ACCESS多表查询(200分)

  • 主题发起人 主题发起人 funlove_1975
  • 开始时间 开始时间
F

funlove_1975

Unregistered / Unconfirmed
GUEST, unregistred user!
我有五个表
A 客户名称 定单号 业务员 这个表为数据源表有二万条数据
B 业务员1 定单号
C 业务员2 定单号
D 业务员3 定单号
E 业务员4 定单号
F 业务员5 定单号 理论上业务员表可能还会多
目的,从A表中的定单号查出与每个业务员表中定单号相同的记录,送入DBGRID或者在A表的业务员字段中写入相应的标志。
我用两个ADOQUERY来一个表一个表的查询,实际是读取了20000*4=80000条数据,太慢也不科学。不知道正确的写法应该是什么样?
我的方法:
try
adoquery2.Close;
adoquery2.SQL.clear;
adoquery2.SQL.Add('select 定单号 from B);
adoquery2.Open;
adoquery2.First;
while not adoquery2.eof do
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select 定单号,业务员 from A where 定单号=:定单号');
adoquery1.Parameters.ParamValues['定单号']:=adoquery2.FieldValues['定单号'];
adoquery1.Open;
if adoquery1.FieldValues['定单号]<>null then
begin
adoquery1.Edit;
adoquery1.FieldValues['业务员]:='B';
adoquery1.Post;
end;
adoquery2.Next;
end;
 
Update A AA,(Select '业务员1' as tmp,定单号 From B Union all
Select '业务员2' as tmp,定单号 From C Union all
Select '业务员3' as tmp,定单号 From D Union all
Select '业务员4' as tmp,定单号 From E) BB
Set AA.业务员=BB.tmp
Where AA.定单号=BB.定单号
 
对不起以前没用过UPDATE,能将这个语句赋给一个安钮事件吗?要加什么控件?
 
UPDATE 是SQL语句。及adoquery1.SQL.Add(‘UPDATE....’
 
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(‘UPDATE....’
adoquery1.ExecSQL;
 
还是没有弄明白这个语句,编译不过去.甚至我简化到这样也没行,麻烦您再给看看吧.
adoquery1.close;
adoqeury1.sql.clear;
adoqeury1.sql.add('update A set 业务员='业务员1'');
adoquery1.execsql;
您二楼的A代表我列出的表名那AA BB代表什么?
 
建议你先去access下学习一下两个表之间运用update语句更新,不然你始终理解不了我列的update语句是啥意思,就无法变通使用。
adoquery1.close;
adoqeury1.sql.clear;
adoqeury1.sql.add('update A set 业务员='业务员1'');
adoquery1.execsql;
要改成
adoquery1.close;
adoqeury1.sql.clear;
adoqeury1.sql.add('update A set 业务员=''业务员1''');
adoquery1.execsql;
才是正确的
 
Update A AA,(Select '业务员1' as tmp,定单号 From B Union all
Select '业务员2' as tmp,定单号 From C Union all
Select '业务员3' as tmp,定单号 From D Union all
Select '业务员4' as tmp,定单号 From E) BB
Set AA.业务员=BB.tmp
Where AA.定单号=BB.定单号
----------------------------------
上面的写法只用于Access.
 
哈哈~亲爱的ivy1982看来你是兄弟了,我已能单条试验能过上述语句,但连合后会提示"需要一个可更新的查询"不知是那里的错误.我的语句是这样的:
Adoquery1.Close;
Adoquery1.SQL.Clear;
Adoquery1.SQL.Add('Update A AA,(Select 业务员1 as tmp,定单号 From B Union all Select 业务员2 as tmp,定单号 From C ) BB Set AA.业务员=BB.tmp where AA.定单号=BB.定单号);
Adoquery1.execsql;
 
多人接受答案了。
 

Similar threads

后退
顶部