ADOQuery的Append问题 ( 积分: 30 )

  • 主题发起人 主题发起人 花信子
  • 开始时间 开始时间

花信子

Unregistered / Unconfirmed
GUEST, unregistred user!
ADOQuery1连接‘规格表’,ADOQuery2连接‘型号表’;其中,‘型号表’是‘规格表’的从表,通过 规格 联系。
DataSource1.DataSet:=ADOQuery1;
ADOQuery2.DataSource:=DataSource1;
ADOQuery2.SQL.Text:='select * from 型号 where 规格=:规格';
ADOQuery2.LockType:=ltBatchOptimistic; //缓存打开
我在执行以下过程中,只出现了最后一个型号。而且,ADOQuery2滚动后,那一条数据也消失了。
j:=strtoint(edit1.Text); // 型号数量
for i:=1 to j do
begin
ADOQuery2.Append;
ADOQuery2.FieldByName('规格').AsString:=ADOQuery1.fieldbyname('规格').AsString;
ADOQuery2.FieldByName('型号').AsString:=ADOQuery1.fieldbyname('规格').AsString+'-'+inttostr(i);
end;
请帮我看一下。谢谢!
 
一般初始化数据记录写在NewRecord事件中
 
Append;
...
post;//在ltBatchOptimistic模式不会提交到数据库。
 
.......Append以后好像需要post吧.......
 
抱歉,我没说清楚,只有用户按‘保存’按钮时才能保存;其他时候只是添加在ADOQuery中,不能执行 保存-UpdateBatch(arall);。
 
你的是没提交post然後又Append啦!用表格控件或數組或臨時表保存中間結果
 
就像你说的你设置了ADOQuery2.LockType:=ltBatchOptimistic;以后就需要通过UpdateBatch来修改数据库
在你没有UpdateBatch以前,操作和普通一样,只不过是保存到缓存里而已,而append和post都是一条纪录的操作方法,和你是否使用缓存是无关的
 
此过程,用BDEQuery时运行正确;用ADOQuery就出错。
而且我执行 ADOQuery2.DataSource:=nil; 后,在运行程序,也完全没错。
这是怎么回事? 我那里写的不对还是那里的属性没设置好?
 
hs-kill,
但我在执行程序后,只出现了最后一个型号。而且,ADOQuery2滚动后,那一条数据也消失了。
 
ADOQuery2.DataSource:=nil;?我没这样写过.....为什么要这么写

只出现最后一个型号?你每个循环结束时都调用post了吗?
我刚找了个access库,好像没这个问题啊...
你直接执行insert语句插入纪录试试呢
 
hs-kill,
就是在非从表中用Append添加数据时,程序没问题。但同样的程序对从表添加数据时就出错。
我每个循环结束后都不保存。
执行insert语句插入纪录,结果一样都只出现最后一条记录。我跟踪程序运行,每条记录都执行了;但每一条都覆盖了上一条。而且,结构不稳定,query一滚动记录就消失了。
 
汗....从表啊....这个我还没试过......
 
多人接受答案了。
 

Similar threads

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