【发布时间】:2021-04-19 12:34:58
【问题描述】:
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 是完全有效的。
为了让 OleDbDataAdapter.Update() 方法正确更新 Oracle 对 DataTable 所做的更改,DataTable 必须包含 数据库表的主键。如果数据库表没有 包含主键时,必须显式选择 ROWID 填充 DataTable,以便 ROWID 可用于唯一 更新数据库中的一行时识别一行。
有没有办法解决这个问题?如何在 dbGo 中使用 RowID? (是的,我知道使用 RowID 会出现问题……但这是单个用户,本地数据库。)
【问题讨论】: