数据库:Paradox 表。用 TQuery 操作数据库(全用SQL语言)。用“INSERT INTO”语句插入一条记录后,在 TDBGrid 没有立即显示出来。
再调用 TQuery 和 TDBGrid 的 Refresh 过程后,插入的数据还是没有显示出来。
只有重新用“SELECT * ”语句才显示出来。
这种方法虽然可以,但有许多的缺陷(强烈的闪烁,并且,当前记录会变为第一条)。不知可用什么方法实现即时显示?
还请各位大侠相助
再调用 TQuery 和 TDBGrid 的 Refresh 过程后,插入的数据还是没有显示出来。
只有重新用“SELECT * ”语句才显示出来。
这种方法虽然可以,但有许多的缺陷(强烈的闪烁,并且,当前记录会变为第一条)。不知可用什么方法实现即时显示?
还请各位大侠相助
begin
insert;
...
post;
end保证你的DBGrid也是连的这个query
这样就可以
begin
insert;
query.close;
query.sql.clear;
query.sql.add('INSERT INTO.......');
query.execSQL; //此行会产生异常
post;
end
sheepcyk(一面湖水) 你的方法我已经试过, 没用
begin
RequestLive:=true;
Append;
FieldByName('field1').AsString:=..;
... //依次给字段赋值,就是你要插入的值
Post;
end;
QUERY.CLOSE;
QUERY.OPEN;
要用 SQL 语句插入记录.
只能Close、Open,然后重新定位。
解决不了闪烁问题。
begin
//记录下当前纪录的值
DisableControls ;
Close;
Open;
//Locate查找
EnableControls;
end;
//可以用来解决刷新问题
要解决刷新后的定位你在Close之前记录到选中纪录的某个主键值
Open之后再用Locate()本地定位就行了!
不行的话,不要用Insert语句。用TQuery的Append方法。
*******************
RequestLive:=true;
*******************
然后提交一下是个参考:////////////////记录暂存在dbgride中
procedure Tfrm_setPicture.btn_addClick(Sender: TObject);
begin
btn_add.Enabled := false;
query1.InsertRecord([strtoint(edt_picid.text),edt_picname.text,strtoint(edt_picheight.text),strtoint(edt_picwidth.text)]);
btn_commit.Enabled := true;
btn_add.Enabled := false;
imgpic.Picture := nil;
edt_picid.Text := '';
edt_picname.Text := '';
edt_picwidth.Text := '';
edt_picheight.Text := '';
end;////////将添加的记录提交/////////////
procedure Tfrm_setPicture.btn_commitClick(Sender: TObject);
begin
dm.Database.StartTransaction;
try
query1.ApplyUpdates;
query1.CommitUpdates;
dm.Database.Commit;
except
application.MessageBox('处理数据有误,请重新添加','提示',mb_iconerror+mb_ok);
query1.CancelUpdates;
dm.Database.Rollback;
end;
end;