如何将Query1 select的记录全部存到一个Table里面? (100分)

  • 主题发起人 主题发起人 coolqiang
  • 开始时间 开始时间
C

coolqiang

Unregistered / Unconfirmed
GUEST, unregistred user!
例如:Query1从两个表里取出所需记录;
[blue]Query1.SQL.Add('select A.No,B.Name,... from 表1 A,表2 B where B.No=A.No');[/blue]

现在要将这些记录全部存到表3中,该如何做?我知道有个[blue]insert into ... value ...[/blue],
但这样好像只能添加一个记录。而且我要取的字段非常多,into和value后面要写一长串,
很不方便,各位高手还有没有更好的办法?

还有一个不错的方法,
select A.No,B.Name,... [red]into 表3[/red] from 表1 A,表2 B where B.No=A.No
但它要求表3不能是已经存在的表,必须是一个新建的表。眼看问题要解决了,想不到节外
生枝![:(]
 
用 TBatchMove
把 Source 属性设为 Query1;
加一个TTable控件 把TBatchMove的Destination属性设为Table
属性Mode要设为[red]batAppend[/red],这样就不用建新表啦。[:)]
 
insert into 表3(字段1,字段2,字段3,... )
select A.No,B.Name,... from 表1 A,表2 B where B.No=A.No


 
来晚了!楼上说的对。

不过有insert等select语句的query执行时用exec,不用open
 
tinytao:等我试试再看!

zealots:你的的方法跟我原来的比较接近,先试了一下,提示Insert into 语法错误!
对了,我用的是Access数据库,不支持这个语法吗?
 
delphi的QUERY 好象不支持这样复杂的语句,你只能用遍历的方法往一个表中插入
 
zealots:不好意思,刚才是into(...)最后忘了加括号,因为字段太多,写得眼花了。
呵呵![:)]但编译虽然通过了,运行时却出现了“Error creating cursor handle”
错误?!我头都大了,这跟光标句柄有何关系?风马牛不相及嘛!但经过测试确实是
insert into这语句引起的,因为去掉就OK了。
 
:coolqiang,你一定是用了open或者active:=true,用execsql就可以了,搞定你的问题了
 
这个语句肯定可以在Access中执行,必须注意的是插入Access表中的字段数量、类型要和
Select出来的一致。
 
代码如下:
with qryTemp do
begin
Close;
SQL.Clear;
SQL.Add('insert into 表3(No,CardNo,Name)');
SQL.Add('select A.No,B.CardNo,B.Name from 表1 A,表2 B where B.No=A.No');
ExecSQL;
end;
发现用ExecSQL代替Open就可以,但我也想qryTemp也保存有那些记录啊!

是不是说要实现将select的记录存入表3,就必须用ExecSQL,不返回结果到qryTemp;
而要返回结果到qryTemp,就要用select再选一次(当然去掉insert into那行),而且用
Open,我现在就是这样做的。

with qryTemp do
begin
[blue] //利用qryTemp通过ExecSQL将结果存到表3[/blue]
Close;
SQL.Clear;
SQL.Add('insert into 表3(No,CardNo,Name)');
SQL.Add('select A.No,B.CardNo,B.Name from 表1 A,表2 B where B.No=A.No');
ExecSQL;

[blue] //qryTemp通过Open返回结果[/blue]
Close;
SQL.Clear;
SQL.Add('select A.No,B.CardNo,B.Name from 表1 A,表2 B where B.No=A.No');
Open;
end;

否则处理不好的话,可能这里没有问题,但当qryTemp和表3Active:=True进行显示时,就
会出现那个奇怪的问题“[red]Error creating cursor handle[/red]”了。
 
当然是这样,在DELPHI中使用QUERY或者STROEDPROCS的时候,当执行的语句不返回数据集
的时候就必须要用EXECSQL和EXECPROC,否则就会出现你说的现象。
 
同意tinytao,这个方法简单省事。
 
派分的时候DFW居然没有列出tinytao的名字,是BUG吗?我已经将此情景截图!
我该怎么办?
 
天啊,有这种事。我[:(]。
 
呵呵!tinytao,不要着急!
你发的[:(]帖子,系统终于又列出你来了!
 
多人接受答案了。
 

Similar threads

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