晕死啊,给一百分,三天了都做不出来的问题! ( 积分: 100 )

  • 主题发起人 主题发起人 zpselect
  • 开始时间 开始时间
Z

zpselect

Unregistered / Unconfirmed
GUEST, unregistred user!
我点击复制按钮,将当前选中的这笔记录复制起来,然后数据集APPEND,将复制的记录粘贴到新的记录中。
望改之;
procedure TMainForm.m_CopyClick(Sender: TObject);
var
strList: TStringList;
i: integer;
begin
inherited;
try
strList := TStringList.Create;
with DM do
begin
for i := 0 to E_Data.FieldCount - 1 do
if E_Data.Fields.FieldName <> 'RKEY' then
if E_Data.Fields.FieldKind = fkData then
strList.Add(E_data.Fields.AsString);
E_Data.Append;
for i := 0 to StrList.Count - 1 do
begin
if E_Data.Fields.FieldName <> 'RKEY' then
if E_Data.Fields.FieldKind = fkData then
E_Data.Fields.AsString := StrList;//这一句出错
end;
end;
finally
strList.Free;
end;
end;
 
靠,又忘记了,这个题目都给了一百分!晕死!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
 
你为什么自己不试着调试一下呢?
 
E_Data.Fields.AsString := StrList;//这一句出错
这是这一句出错,我将其改为 E_Data.Fields.AsString:=‘00’;
也报错,是报地址错误!所以。。。
 
可以贴一下完整的错误提示吗?
E_Data是什么?
 
问题出在,
Fields和StrList不一定是对应的。
你试着在纸上举例感受一下。
 
这就是全部的代码;
我的意思是:将当前选怿那一笔记录复制么StringList中,然后,再将StringList中的值,一个一个地赋给新增后的字段!
E_Data :ADODataSet
 
procedure TMainForm.m_CopyClick(Sender: TObject);
var
strList: TStringList;
i: integer;
j: Integer;//
begin
inherited;
try
strList := TStringList.Create;
with DM do
begin
for i := 0 to E_Data.FieldCount - 1 do
if E_Data.Fields.FieldName <> 'RKEY' then
if E_Data.Fields.FieldKind = fkData then
strList.Add(E_data.Fields.AsString);
if strList.Count >0 then//
begin//
j := 0; //
E_Data.Append;
for i := 0 to E_Data.FieldCount - 1 do//
begin
if E_Data.Fields.FieldName <> 'RKEY' then
if E_Data.Fields.FieldKind = fkData then
begin//
E_Data.Fields.AsString := StrList[j];//
if j <=strList.Count -1 then//
j:=j +1//
else
...//
end;//
end;
E_Data.Post;
end//
else//
...;//
end;
finally
strList.Free;
end;
end;

加'//'的句子是我加的或改过的。
 
procedure TMainForm.m_CopyClick(Sender: TObject);
var
strList: TStringList;
i: integer;
j: Integer;
begin
inherited;
try
strList := TStringList.Create;
with DM do
begin
for i := 0 to E_Data.FieldCount - 1 do
if E_Data.Fields.FieldName <> 'RKEY' then
if E_Data.Fields.FieldKind = fkData then
strList.Add(E_data.Fields.AsString);

if strList.Count > 0 then
begin
j := 0;
E_Data.Append;
for i := 0 to E_Data.FieldCount - 1 do
begin
if E_Data.Fields.FieldName <> 'RKEY' then
if E_Data.Fields.FieldKind = fkData then
begin
E_Data.Fields.AsString := StrList[j];
if j <= strList.Count - 1 then
j := j + 1;
end;
end;
end;
end;
finally
strList.Free;
end;
end;

if j <= strList.Count - 1 then 报地址错误
 
多问一个问题:谁能把这个功能实现,100分全给他!
我将TXT文件中的内容全部加到StringList中(Form.Create时加载到StringList中),
TXT内容如下:
0001AAAA
0002BBBB
0003CCC
0004CCC
005DDD
010888
。。。。
在操作界面上,我要根据条件糊糊查询从StringList中取值到出来(如显示在DBGrid);
就相当于AdoQuery.Open;之后,使用AdoQuery.Filter来筛选值一样!
这种筛选怎么写?
如:在Edit1输入010,之后就显示:010888等
 
if j <= strList.Count - 1 then
改成
if (j <= (strList.Count - 1)) then
 
if (j <= (strList.Count - 1)) then
这一句还是报错!
 
在ListBox中怎样显示多列?像DBGrid一个,可以有任意列的显示?
 
把错误提示贴出来!
 
project P_EMP120.Exe Raised Exception classs EoleException With Message ''发生未知错误.''process stopped.use Step or Run to Continune
 
strList := TStringList.Create;//这句要放在
try
上面

如果编译没通过,查看你的代码书写格式是否正确?
如果执行错误,看一下TAdoDataSet的设置上有没有问题?
就以上代码看,已可以执行成功,
如果还是不行,则重建一个项目,单独测试以上的功能?
 
真是好背,本来只给10分的,可是一下子忘记选分了,系统默认就是100分!!!!严重抗议:大富翁将系统分数设为100分,我都被错过几次了,原先可用分数500多分了,就那么变成了100多分了!
 
你在dfw上提了很多贴,为什么不试着多看些书,多收集些资料,把基本功打扎实一些呢?
提问应该在你努力过后,实在无法解决再提出,
这样才对的起别人,也对的起自己!
 
procedure TMainForm.m_CopyClick(Sender: TObject);
var
strList: TStringList;
i: integer;
begin
inherited;
try
strList := TStringList.Create;
with DM do
begin
for i := 0 to E_Data.FieldCount - 1 do
if E_Data.Fields.FieldName <> 'RKEY' then
if E_Data.Fields.FieldKind = fkData then
strList.Value[E_data.Fields.FieldName] := E_data.Fields.AsString;
E_Data.Append;
for i := 0 to StrList.Count - 1 do
begin
if E_Data.Fields.FieldName <> 'RKEY' then
if E_Data.Fields.FieldKind = fkData then
E_Data.Fields.AsString := strList.Value[E_data.Fields.FieldName];
end;
end;
finally
strList.Free;
end;
end;
 
你的代码也报地址报错!
我这样写也不行!!!!,
我用ShowMessage(strList)来显示了一下,在第二次循环中,为什么第一次循环的值第二个字值的值?
procedure TMainForm.m_CopyClick(Sender: TObject);
var
strList: TStringList;
i, j: integer;
begin
inherited;
try
strList := TStringList.Create;
with DM do
begin
for i := 0 to E_Data.FieldCount - 1 do
begin
if (E_Data.Fields.FieldName = 'RKEY') or (E_Data.Fields.FieldName = 'signature')
or (E_Data.Fields.FieldName = 'BM_MC') then
continue;
strList.Add(E_data.Fields.AsString);
Memo1.Lines.Add(E_data.Fields.AsString)
end;

E_Data.Append;
for i := 0 to StrList.Count-1 do
begin
if (E_Data.Fields.FieldName = 'RKEY') or (E_Data.Fields.FieldName = 'signature')
or (E_Data.Fields.FieldName = 'BM_MC') then
continue;
ShowMessage(StrList);
// E_Data.Fields[i-1].AsString := strList;
Memo2.Lines.Add(strList);
end;
end;
finally
strList.Free;
end;
end;
我用ShowMessage(strList)来显示了一下,在第二次循环中,为什么第一次循环的值第二个字值的值?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
654
import
I
I
回复
0
查看
551
import
I
后退
顶部