大家可能都知道,要更新 IBDataSet 中的数据,只需要重新打开它,即 使“关闭”和“打开”。
- 但如果是应用程序/客户端,分散在两台机器上。
Dataset1(第一台机器)编辑记录 - 一个字段(使用 DBNavigator)。在DataSetAfterPost事件中,它花费IBTransaction.CommitRetaining。之后,数据库本身的记录被更新。
Dataset2(第二台机器)已经打开并且在“ BeforeRefresh ”事件中我做了Close和Open,即
ADataSet.Close;
ADataSet.SelectSQL.Clear;
ADataSet.SelectSQL.Add(ARequire);
ADataSet.Open;
ADataSet.FetchAll;
Dataset2中的记录未更新
我忘记了什么?
- Delphi10.2,将请求传递给字符串变量ARequire,在调试中我看到(在行尾)“'*select * from CONTRACT where ARCHIVE = 1*'#**$**D#$A” -这个废话被转移到 DataSet 。
- 虽然,这 5 行,我一直在使用,请求从来没有任何问题
- 好吧,像往常一样,他们在这里写,在 IBDataBase.Connected 假和真之后 - 一切都很好
也许事务有 Dataset2(在第二台机器上)和 concurrency 参数,也就是说,它看不到由在它启动后提交的事务创建的新记录(或新版本的记录)。使用 read_committed(最好使用 rec_version 选项)。
阅读交易:
http://www.ibase.ru/mga/
http://www.ibase.ru/ibx/#tran_use
http://www.ibase.ru/ibtrans/