请大侠帮忙解决一个ACCESS问题
做一个数据导入程序,用了两个ADOQuery连接两个ACCESS数据库,ADOQuery1连接目标数据库
,ADOQuery2连接源数据库。方法是先把源数据库中的数据拷到目标数据库中的一个临
时表里面,然后根据选择没有重复的记录到目标表中,在person表中因为它的里面有图片,
没法用DISTINCT;Vita表是用DISTINCT来去除重复记录。
可是在程序调试时发现,时不时的在几个SQL处出现问题,主要是说数据引擎找不到临时表,
可是打开数据库看到明明已经存在,而且这几个错误随机在1、2、3处发生,有的时候程序
却可以正常运行,请大侠帮忙指点一下。
系统winXP ACESS2000
DELPHI6+UP1+UP2+RTL1、2、3
MDAC2.7
部分程序代码如下
procedure TDataManageForm.ImportPerson;
begin
with ADOQuery2 do
begin
Close;
SQL.Clear;
SQL.Add('Select * Into TempPerson in ''' + SystemDatabase + ''' From Person');
//其中SystemDatabase是程序数据库包含路径的全名
PrePared;
ExecSQL;
end;
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('Insert into person select * from tempperson where Number Not In (Select Number From Person)'); <====问题处1
PrePared;
ExecSQL;
Close;
SQL.Clear;
SQL.Add('Drop Table TempPerson');
PrePared;
ExecSQL;
end;
end;
procedure TDataManageForm.ImportVita;
begin
with ADOQuery2 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * INTO TempVita IN ''' + SystemDatabase + ''' FROM Vita');
PrePared;
ExecSQL;
end;
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM TempVita'); <====问题处2
Open;
if RecordCount = 0 then
begin
Close;
SQL.Clear;
SQL.Add('Drop Table TempVita');
PrePared;
ExecSQL;//删除临时表
Exit;
end;
Close;
SQL.Clear;
SQL.Add('INSERT INTO Temp SELECT * From Vita');
PrePared;
ExecSQL;//把目标表中的数据拷入临时表
Close;
SQL.Clear;
SQL.Add('DELETE * FROM Vita');
PrePared;
ExecSQL;//把目标表清空
Close;
SQL.Clear;
SQL.Add('INSERT INTO Vita SELECT DISTINCT * from TempVita'); <====问题处3
PrePared;
ExecSQL;
Close;
SQL.Clear;
SQL.Add('Drop Table TempVita');
PrePared;
ExecSQL;//删除临时表
end;
end;