Delphi我已经用Oracle配置了dbGO/ADO (使用Oracle的连接器,而不是微软的)。我正在处理一个简单的查询。
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()方法能够正确地更新DataTable中的更改,DataTable必须包含数据库表的主键。如果数据库表不包含主键,则在填充DataTable时必须显式地选择ROWID,以便在更新数据库中的行时可以使用ROWID唯一标识行。
有办法绕道吗?如何将RowID与dbGo结合使用?(是的,我知道使用RowID...but的问题-这是一个单独的用户,本地DB。)
发布于 2021-04-19 12:45:19
看起来它将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';https://stackoverflow.com/questions/67162116
复制相似问题