AqryMainTemp.Close;
AqryMainTemp.SQL.Clear;
AqryMainTemp.SQL.Add('select code, e_inc, e_name from');
AqryMainTemp.SQL.Add('(');
AqryMainTemp.SQL.Add('select * from st_mg_count_main where prod_no = ' + quotedstr(CmbProduct.Text) + ' and code not in (' + code + ') and e_stint is not null');
AqryMainTemp.SQL.Add(') main_temp');
AqryMainTemp.SQL.Add('where code in');
AqryMainTemp.SQL.Add('(');
AqryMainTemp.SQL.Add('select max(code) code from');
AqryMainTemp.SQL.Add('(');
AqryMainTemp.SQL.Add('select * from st_mg_count_main where prod_no = ' + quotedstr(CmbProduct.Text) + ' and code not in (' + code + ') and e_stint is not null');
AqryMainTemp.SQL.Add(') main_tmp');
AqryMainTemp.SQL.Add('group by e_inc, e_name');
AqryMainTemp.SQL.Add(')');
AqryMainTemp.Open;
// 3、将2中查出来的数据插入到标准零件库当中,先将主表数据插入,然后根据2中的code到st_mg_count_detail查找出被插入零件对应的
// 工序,并插入到标准零件库中的从表中
if AqryMainTemp.RecordCount > 0 then
begin
try
DataModule2.ADOConnection1.BeginTrans;
AqryMainTemp.First;
while not AqryMainTemp.Eof do
begin
e_inc_temp := AqryMainTemp.FieldByName('e_inc').AsString;
e_name_temp := AqryMainTemp.FieldByName('e_name').AsString;
if AqryMain.RecordCount > 0 then
begin
AqryMain.Last;
id := AqryMain.FieldByName('codeid').AsInteger + 1;
end
else
id := 1;
AqryMain.Append;
AqryMain.FieldByName('codeid').AsInteger := id;
AqryMain.FieldByName('e_inc').AsString := e_inc_temp;
AqryMain.FieldByName('e_name').AsString := e_name_temp;
AqryMain.Post;
AqryMainTemp.Next;
end;
DataModule2.ADOConnection1.CommitTrans;
except
DataModule2.ADOConnection1.RollbackTrans;
Application.MessageBox('导入汇总工序时发生错误,无法导入!', '系统提示', mb_ok + mb_iconwarning);
raise;
Screen.Cursor := crDefault;
exit;
end;
Screen.Cursor := crDefault;
Application.MessageBox('汇总工序导入完毕!', '系统提示', mb_ok + mb_iconinformation);
end;
大家看一下这段程序,我想让AqryMainTemp查出来的数据(大概三千多条)循环的插入到AqryMain中去,但是只执行了一条,就跳出了循环,设置断点发现,在插入了一条数据以后,AqryMainTemp里的查询竟然变成了AqryMain中的查询;他们分别是连接两个表,这是怎么回事?程序里哪里写的有问题吗?麻烦大侠们帮助一下,在线等~~~~~~~~
你把这句放到这里试试
AqryMain.Post;
DataModule2.ADOConnection1.CommitTrans;
2、AqryMainTemp.RecordCount 本来就等于1
这句怎么没有上下文阿
AqryMain的默认SQL是查询select * from st_parts
直接先判断这里的数量
// 3、将2中查出来的数据插入到标准零件库当中,先将主表数据插入,然后根据2中的code到st_mg_count_detail查找出被插入零件对应的
// 工序,并插入到标准零件库中的从表中增加两行 就好了
AqryMainTemp.last;
AqryMainTemp.first;
if AqryMainTemp.RecordCount > 0 then