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

  • 主题发起人 主题发起人 zpselect
  • 开始时间 开始时间
我测了一下ListCount是从1开始的,所以我改了一下代码用
Memo1和Memo2分别将其内容显示出为,结果是相同的,但是将其加载到数集中却又报地址错误!
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[i-1]);
E_Data.Fields.AsString := strList[i-1];
Memo2.Lines.Add(strList[i-1]);
end;
end;
finally
strList.Free;
end;
end;
 
stringlist.loadfromfile('1.txt');
 
TO:gohoo,
我是对数选中的当前记录进行复制啊,又不是取文本文档文件中的内容!
 
能把E_Data用到的表的表结构贴出来吗(所有字段名和数据类型)?
还有你用的数据库管理系统是什么?
 
这与管理系统有什么关系吗?是:SQL Server 2000
字段名称 类型 长度
RKEY int 4
EMPL_CODE varchar 10
EMPLOYEE_NAME varchar 16
ABBR_NAME varchar 10
EMPLOYEE_ID int 4
ADDRESS_LINE_1 varchar 70
STATE varchar 10
ZIP varchar 10
PHONE varchar 14
ACTIVE_FLAG char 1
BUYER_FLAG char 1
INACTIVE_DATE smalldatetime 4
TPOSTION varchar 30
EMAIL varchar 50
signature image 16
popedom tinyint 1
work_date smalldatetime 4
sex_type char 2
study_degree varchar 10
id_card varchar 20
born_date smalldatetime 4
remark varchar 100
EMP_HF char 4
EMP_MZ varchar 20
EMP_ZZMM varchar 4
 
E_Data.Fields.AsString := StrList;//这一句出错
在赋值的时候,有的字段类型不是字符串的,像时间类型的你用字符串赋值可能就会出错.
 
TO:ww20000309
你说得很对,所以我才用了强制转为AsString类型啊!
E_Data.Fields.AsString
 
var
strList: TStringList;
i , j: integer;
begin
strList := TStringList.Create;
try
//with Self 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 begin

end;
end;//
end;
//E_Data.FieldByName('signature').Assign(cxImage1.Picture.Graphic);
E_Data.Post;
end
else begin

end;
end;
finally
strList.Free;
end;
根据你的表结构,以上代码测试通过。
图片也可以复制,当然格式要相同。

问题是不是在E_Data,当E_Data.Active := True时是否有错?
E_Data的事件中是否有导致错误的代码?
界面上其它控件会不会有问题?

依据你的回复,你依然在范一个错误,
在你的两个循环中,第一个循环取到的值的字段与第二个循环赋的值的字段不一定是对应的,显然你没有仔细看。

为什么不模拟一下呢?!
 
一样的报错!
 
麻烦你看清楚一点,“测试通过”,
你为什么不去找找其它的原因呢?

项目能Email吗?
 
dcx0026:大哥,如果说不报错的话,我肯定说可以的,而且这一百分全给你!我有这个必要来骗你吗?我将你的原码,全封不动地COPY到我的电脑里进行测试的!
 
我没说你骗我吧,三天来,我一直在回答你的问题,
我甚至要了你的表结构,立项帮你测试。

分数很重要吗?因为dfw帮助了我,所以我也在这里帮助别人。

我说帮你在我的电脑上测试通过了,或许说明那段代码并不存在问题,
是否其它的地方?
如果有条件你还可以在别的电脑上试试看?

或者你可以把这部分功能单独立个项目测试下?
你要愿意也可Email给我?
^_^
 
谢谢dcx0026的回复!
其实我要实现的功能就只是一处复制的功能,表结构已经给了你!
我这种情况是这样的:(查询和新增我都是用的一个数据集,即E_Data)
1:我选怿一笔记录,当然这笔记录有通过Lockup关联过来的一个字段,所以在将数据集字
加载到StringList时判断了其FieldKind是否为ftData
2:数据集Append;
3:再将StringList中的数据填充到新增的记录中去,当然要满足一定的条件的,即,RKEY字
段不需要,加载!因为那个字段是关键字,其值自动递增的!
就这么一个功能!
你可以在你的本地数据库建一个表,有三个字段,id,name,sex
你做一个复制的功能就知道了啊!
 
首先,我根据你的表结构和上面列出的代码,成功的复制了记录。
不过我没有关联字段。E_Data的CommandText的值是
select * from tb。
其次,你关联的这个字段,是否可以把它去掉了,再试试,也许问题就出在那里?
 
那应该不碍事啊!
 
下面的有问题么?

procedure TMainForm.m_CopyClick(Sender: TObject);
var
strList: TStringList;
i, j: integer;
begin
strList := TStringList.Create;
try
with DM do
begin
for i := 0 to E_Data.FieldCount - 1 do
begin
strList.Add(E_data.Fields.AsString);
E_Data.Next;
end;
E_Data.Append;
for j := 0 to StrList.Count - 1 do
begin
if (E_Data.Fields[j].FieldName = 'RKEY')
or (E_Data.Fields[j].FieldName = 'BM_MC') then
continue;//跳过啊,怎么??
E_Data.Fields[j].AsString := StrList[j];
end;
end;
finally
strList.Free;
end;
end;
 
你要是愿意,单独立个程序,把上面这个功能,相关的界面
列进去,测一下,如果还是不行,
如果你愿意的话,把它Email给我,dcx0037@163.com
表结构我有
 
我测了一下,就是那个Lockup字段出了问题!,而且重要的是:Field是从0开始而StringList从1开始
我不是用了continue跳过了么?应该跳到下一次循环去了啊!即那些不满条件的语句字段不进行赋值啊!
 
你最后贴出的代码,
要把
E_Data.Next;这句去掉

其它的,根据你的表结构和最后贴出的代码,我也设了Lookup字段,
复制是成功的,没有错。
再仔细找找其它原因吧!?
有一点要注意,Field和StringList的序号都是从0开始的。

最后给你体格建议,找些书看看,把基础打扎实一些,才会有想象的空间。
^_^
 
那你有没有试过几复制几个字段的内容的测试?
即id name sex 只复制 name ,sex两个字段的内容!
如果可以的话,就把代码贴上来!OK?
 

Similar threads

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