【问题标题】:Delphi XE10, can't edit field values of an empty TQueryDelphi XE10,无法编辑空 TQuery 的字段值
【发布时间】:2017-07-22 21:01:26
【问题描述】:

我有一个数据集,具有 Requestlive=TRUE 属性的 TQuery 对象,Tdatasource 和一个 TDBgrid,已连接。当查询返回空时,我面临这个问题:尝试添加第一条记录,我无法编辑它的字段。 保存此(空)第一条记录后,我可以正常继续(添加,编辑等)。 请问我该怎么做才能避免这个问题?

【问题讨论】:

  • 在这种情况下不能选择退出 BDE。你误会了我。我尝试将新的(第一条)记录添加到数据集中。实际上,数据集已经有记录,但是当我的查询返回空时会出现这个问题(例如,有 2016 年的记录,但没有 2017 年的记录。所以当我尝试添加 2017 年的第一条记录时,我遇到了这个问题)
  • 我不确定我是否误解了你。好的,您的数据库表(服务器端表)包含记录,但是您的 TQuery 执行的查询返回零记录。因此,您有一个空的客户端数据集。恐怕我周围没有任何功能 BDE 数据库来确定 BDE 对此有何反应。保存你的空记录然后编辑它可能是你唯一的选择,除非你做一个明确的 Sql INSERT。
  • 没有XE10这样的东西。好吧,我所知道的唯一以这个名字命名的就是破解软件。你用的是破解软件吗?
  • 那么 ComponentAce (componentace.com/download/download.php?editionid=1) 或 d23 (JEDI 项目) 或 RAD studio 10 (Devart) 或许多其他处理破解软件?
  • 他们犯了和你一样的错误。最后的 XE 是 XE8。之后是 10 西雅图,然后是 10.1 柏林。

标签: delphi tquery


【解决方案1】:

我还没有找到导致这个问题的原因,但我做了这个解决方法:

procedure TFormA.QueryNewRecord(DataSet: TDataSet);
begin
    case Query.RecordCount of
        0 : begin // if dataset is empty then append a fake record
                Query.fieldByname('aDate').AsDateTime := now;
                Query.fieldByname('fieldA').AsFloat := 0; // fieldA is a mantatory field 
                Query.Post;
            end;
        else Query.fieldByname('aDate').AsDateTime := now; 
    end;
end;

在 onCloseForm 事件中我添加了这个:

Query.SQL.Text := 'DELETE FROM NOTES WHERE fieldA=0';
Query.ExecSQL;

删除以这种方式附加的任何虚假记录

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 2018-03-09
    • 2023-03-11
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    相关资源
    最近更新 更多