Applyupdate的问题(自认为很经典)(15分)

  • 主题发起人 主题发起人 蜉蝣小生
  • 开始时间 开始时间

蜉蝣小生

Unregistered / Unconfirmed
GUEST, unregistred user!
query在窗体的oncreat事件里面赋值为
with query do
begin
close;
sql.clear;
sql.add('select * from aaa where 1=2');
open;
end;

向query连接的dbgrideh里面添加几条记录,执行下列过程保存
query1.applyupdate;
保存后再修改记录,然后再applyupdate保存,此时问题出现:
at end of table;
以前再主从表里面遇到这样的情况都执行
close
open
即可解决,可是如果我这个sql语句条件为 1=2,所以open后就为空了
请问高手:
怎么解决这个问题的at end of table 问题?
 
不明白为什么要 1 = 2
 
我想再窗体打开时什么也不显示,想要添加数据的话直接添加就行,不用再点按钮什么的,楼上明白?
 
不管你是新增,还是修改,都是是对一个空数据集进行操作的.新增的时候肯定不会有问题.修改的时候肯定会报那个错
 
意思说,不管你是adoQuery.insert还是edit,都是在open的前提下,它open出来的就是一个空数据集
 
open 出来的是一个空数据集,可是我向里面添加记录以后再applyupdate,我edit的是已经保存过的insert的内容啊
 
你理解有问题,你自己试试,applyupdate除了保存,还刷新数据集,它就是凭那条sql语句去刷新,你说刷新出来的还有记录,你自己可以试试
 
楼上说的有道理,可是有一点,我applyupdate后的确显示的有数据,的确是刷新了,但是数据也显示出来了,也就是说它不是按照1=2的语句刷新数据的.
 
不知道我这样写法能不能解决这个问题??
 
TQuery的ApplyUpdate只是向数据库提交数据,不能刷新数据集.你自己去看ApplyUpdate这个过程.你可以对比一下TClientDataset的 ApplyUpdate方法.我开始搞错了,以为两个applyupdate的方法实现是一样的.你如果用这一条sql语句的话,应该在post的时候是能做修改操作的.如果你想在applyupdate之后再修改,就不能是空数据集了.
 
你再edit,它才进行刷新操作.
 
问题好像不是出在我这条1=2 的语句上,我把语句改了,去掉了1=2,就是在oncreat事件里面把所有的记录都查询出来了,然后添加一条新的,APPLYUPDATE,再更改记录,再APPLYUPDATE,这是at end of table 仍旧出现.
 
你还能把全部的代码复制过来看看呢
 
我刚才特地试了一下,没有任何问题啊
 
好的,先谢谢
procedure TFrmpmtz.FormCreate(Sender: TObject);
begin
with querytzpm do
begin
close;
sql.Clear;
sql.Add('select * from a_tuzhipinmingbiao where 1=100 order by tuzhihao ');
open;
end;
end;
打开界面以后,我就开是向里面添加记录了,添加一条以后执行下面的保存
procedure TFrmpmtz.BitBtn3Click(Sender: TObject);
var str,str1:string;
begin
str:=querya.fieldbyname('tuzhihao').AsString;
if (querytzpm.UpdatesPending= true) or (querytzpm.State in [dsedit,dsinsert]) then
begin
querytzpm.ApplyUpdates;
end;
querytzpm.Locate('tuzhihao',str,[loCaseInsensitive]);
end;
保存以后再更改记录的内容,再执行上面的保存过程,运行到
querytzpm.ApplyUpdates;
后就出现at end of table 的错误.
 
ApplyUpdates以后调用一下CommitUpdates。
 
CommitUpdates以后dbgrideh的内容全部都没有了,估计是CommitUpdates以后是按照
'select * from a_tuzhipinmingbiao where 1=100 order by tuzhihao 刷新了
 
我用你的代码试过了,如果1=100条件加上的话,报的错和你的一样,但去掉条件就很正常了,不知道你为什么去掉条件都不正常.
 
我也不知道具体是什么原因,数据库中对应的有几十万条记录,我想通过dbgrideh向数据库添加记录,总不能一下子用'select * from a_tuzhipinmingbiao把所有的记录都给找出来然后再向里面添加,能不能有效率高的方法呢?
 
你就是想单纯的增加数据?如果是,那就简单了,用'select top N * from a_tuzhipinmingbiao,不就行了.
 

Similar threads

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