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

  • 主题发起人 zpselect
  • 开始时间
procedure TForm1.cmdCopyClick(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
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;
end;
 
是不是这样的?如果是这样的,同样报地址错误!
var
strList: TStringList;
i, j: integer;
begin
strList := TStringList.Create;
try
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;
 
那我也没办法,

最后的建议,
你要是愿意,单独立个程序,把上面这个功能,相关的界面
列进去,测一下,如果还是不行,
如果你愿意的话,把它Email给我,dcx0037@163.com
 
忘记说明一点,我将所有字段都加为了固定的字段,是不是这个是至命的啊!
你将其加为固定字段试一下行不?
 
你把你的原码贴上来!
 
公司里上不了QQ,不然我们可以在QQ里交谈了!现在只能这样发贴子了!
 
就是上面的代码
 
晕死!那怎么到的电脑里面就不行了啊!
 
建议单步执行,以找到出错的数据,看是数据约束的问题还是其他的问题,
比如看可不可以添加空记录,
比如用E_Data.Fields[1].AsString := 'a';
E_Data.Fields[2].AsString := 'b';
E_Data.Fields[3].AsString := 'c';展开.
 
晕死,原来是不能使用Lockup字段啊!
procedure TMainForm.m_CopyClick(Sender: TObject);
var
v_Record: array[2..24] of variant;
i: integer;
begin
with DM do
begin
for i := 2 to 24 do
v_Record := DM.E_data.Fields.Value;
E_Data.Append;
for i := 2 to 24 do
E_Data.Fieldvalues[E_Data.Fields.FieldName] := v_Record;
end;
end;
 
不是Lockup字段的问题,
你给个邮箱的话,我把我测试的程序给你。
 
我单独地建了一个应用程序,将所有字段都加进去了,然后加一个Lockup字段,!在复制时出错!去掉之后又可以了!
妈的真的好烦,公司里所有的信箱都上不了!
你发嘛,我等一下去别的电脑上面下!
zpselect@126.com
 
兄弟,邮件发了的话,就在此回复一下!OK?
 
dcx0026,你建一个表,表名任意,字段为四个,分别为:id,name sex bm(部门代码)
id name sex bm
01 aaa 男 01
02 BBBB 男 02
03 CCCC 女 03
04 DDD 女 04

你再建一个表bm(部门表),字段为 bm_dm,bm_mc

bm_dm bm_mc
01 信息管理部
02 人力资源管理部
03 生产部
04 财务部
05 内销部
06 国贸部
07 总务部
08 业务部

你添加一个数据集,连接第一个表,并将数据集都加为固定字段,且加一个Lockup字段,用于
关联第二个表中的bm_mc ,
你再试就知道会不会报错了!
 
已发。

其中TAdoConnection需要设置过,
E_Data中有个LookUp字段'DeptName',
AdoQuery1中的sql要重写。
 
好的,谢谢!
 
我找到原因了,我将关联的Lockup字段的LookupCache改为true 就可以了!
 
dcx0026:交个朋友嘛!
我的QQ:492862776
 
下面的代码是可能实现的!LookupCache改为true
procedure TMainForm.m_CopyClick(Sender: TObject);
var
v_Record: array[2..24] of variant;
i: integer;
p: pointer;
begin
try
with DM do
begin
for i := 2 to 24 do
v_Record := DM.E_data.Fields.Value;
p := E_Data.GetBookmark;
E_Data.Append;
for i := 2 to 24 do
E_Data.Fieldvalues[E_Data.Fields.FieldName] := v_Record;
Act_Edit.OnExecute(self);
end;
finally
DM.E_Data.GotoBookmark(p);
end;
end;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
610
import
I
顶部