gpt4 book ai didi

sql - Delphi ADOQuery 在另一个 ADOQuery 插入后没有拾取记录

转载 作者:行者123 更新时间:2023-12-03 19:15:57 28 4
gpt4 key购买 nike

我不确定为什么会发生这种情况,所以我将简要解释一下情况(应该很容易理解):

Form1 一个执行 sql select 语句并将其显示在通过 TDataSource 组件链接到 ADOQuery1 组件的 dbgrid 上的过程:

procedure form1. Selectp;
begin
ADOQuery1.Active:=false;
ADOQuery1.SQL.Text:='select * from tbl';
ADOQuery1.Active:=true;
end;

Form1 有一个按钮,可以打开一个新表单以输入记录字段:
procedure form1. buttonaddrecordClick(Sender: TObject);
var
form2:Tform;
begin
form2:=Tform2.Create(nil);
try
form2.ShowModal;
finally
form2.Release;
end;
selectp;//executes but new record doesn’t show up although in database;
end;

Form2 有一个通过 form2.ADOQuery2 将值插入数据库的过程。
procedure form2.Insertp;
begin
ADOQuery2.Active:=false;
ADOQuery2.SQL.Text:='insert into tbl (field1) values ('''+ sfield +''')';
ADOQuery2.ExecSql;
ModalResult := mrOk;
end;

如果我在 form1 上放置一个按钮来运行 selectp,我必须在新记录显示之前按下它 2 次以上,但无论我在 buttonaddrecord 中的 showmodal 之后调用 selectp 多少次,新记录都不会显示。

是什么原因造成的,如何纠正?

最佳答案

TDataSource链接到 ADOQuery1无法知道另一个 ADOQuery2对数据库进行了更改。

您可以调用 ADOQuery1.Requery 之后 您通过 ADOQuery2 插入新行(很像 DataSet.Close 后跟 DataSet.Open ),或者你可以通过 ADOQuery1引用 Tform2 ,并像这样插入一条新记录:

ADOQuery1.Append;
// If you do not have some auto-inc primary key (or other) - generate it manually:
ADOQuery1.FieldByName('id').AsString := some_new_unique_id;
ADOQuery1.FieldByName('field1').AsString := sfield;
ADOQuery1.Post;

更改应反射(reflect)在 TDBGrid链接到 TDataSource .

笔记:
  • 无需调用ADOQuery1.SQL.Clear因为您是通过 ADOQuery1.SQL.Text := '...' 分配 SQL
  • INSERT INTO SQL 语句后面应该跟 ADOQuery2.ExecSQL (不是 ADOQuery2.Active := true )因为您没有将游标返回到数据。
  • 关于sql - Delphi ADOQuery 在另一个 ADOQuery 插入后没有拾取记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19144308/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com