【问题标题】:Delphi ADOQuery not picking up record after another ADOQuery inserted itDelphi ADOQuery 在另一个 ADOQuery 插入后没有拾取记录
【发布时间】:2013-10-02 18:39:22
【问题描述】:

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

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 多少次,新记录不会出现。

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

【问题讨论】:

  • 由于您使用的是不同的 SQL 查询组件,因此只需调用 TADOQuery1.Refresh 即可重新获取数据。
  • 之前尝试过 - 出现错误:用于更新或刷新的键列不足。但如果您在数据库中查看新记录。
  • 这个错误是什么意思?
  • 您似乎不能调用Refresh 来查询没有主键的表。我以前从未遇到过这种情况,因为我一直使用的所有键表都有一个主键。
  • 如果没有主键,你可以试试ADODataSet.Requery,但无论如何你应该有一个主键。

标签: sql delphi ado


【解决方案1】:

链接到ADOQuery1TDataSource 无法知道另一个 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;

更改应反映在链接到TDataSourceTDBGrid 中。


注意事项:

  • 无需调用ADOQuery1.SQL.Clear,因为您是通过ADOQuery1.SQL.Text := '...' 分配SQL
  • INSERT INTO SQL 语句后面应该跟 ADOQuery2.ExecSQL(而不是 ADOQuery2.Active := true),因为您不会将游标返回到数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多