gpt4 book ai didi

oracle - Delphi - Oracle RowID 被 dbGO/ADO 忽略

转载 作者:行者123 更新时间:2023-12-04 07:46:57 28 4
gpt4 key购买 nike

Delphi Rio - 我用 Oracle 配置了 dbGO/ADO(使用 Oracle 的连接器,而不是 Microsoft 的)。我正在处理一个简单的查询。

mySQL := 'select REGISTRY_ID, TERRITORY_ID, ACCOUNT_NAME from ACCOUNTS_SI';

ADO_Q1.Close;
ADO_Q1.SQL.Clear;
ADO_Q1.SQL.Add(mySQL);
ADO_Q1.Open;

ShowMessage(IntToStr(ADO_Q1.FieldList.Count));
这完全按预期工作,消息弹出窗口显示 3。如果我将 ROWID 添加为列,它似乎被完全忽略。下面的查询运行,但仍显示 3 列。
mySQL := 'select ROWID, REGISTRY_ID, TERRITORY_ID, ACCOUNT_NAME from ACCOUNTS_SI';
我什至尝试重命名它。
mySQL := 'select ROWID as MYKEY_ID, REGISTRY_ID, TERRITORY_ID, ACCOUNT_NAME from ACCOUNTS_SI';
ROWID 作为列,虽然完全合法,但被过滤掉了。
当我查看 Oracle 的文档时,似乎表明 RowID 是完全有效的。

In order for the OleDbDataAdapter.Update() method to properly updateOracle with changes made in the DataTable, the DataTable must containa primary key of a database table. If the database table does notcontain a primary key, the ROWID must be selected explicitly whenpopulating the DataTable, so that the ROWID can be used to uniquelyidentify a row when updating a row in the database.


有没有解决的办法?如何在 dbGo 中使用 RowID? (是的,我知道使用 RowID 的问题......但这是一个单一用户,本地数据库。)

最佳答案

看起来它使用 ROWID 用于游标导航等内部目的,因此尝试添加 2 个 ROWID 列并将其中一个包装在嵌套子查询中:

mySQL := 'select RID, REGISTRY_ID, TERRITORY_ID, ACCOUNT_NAME from (select ROWID, ROWID as RID, s.* from ACCOUNTS_SI s';

更新 (因为前一个没有帮助)
另一种变体:
mySQL := 'select RowIDtoChar(ROWID) RID, REGISTRY_ID, TERRITORY_ID, ACCOUNT_NAME from ACCOUNTS_SI';

关于oracle - Delphi - Oracle RowID 被 dbGO/ADO 忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67162116/

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