首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >被dbGO/ADO忽略

被dbGO/ADO忽略
EN

Stack Overflow用户
提问于 2021-04-19 12:34:58
回答 1查看 120关注 0票数 2

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

代码语言:javascript
复制
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列。

代码语言:javascript
复制
mySQL := 'select ROWID, REGISTRY_ID, TERRITORY_ID, ACCOUNT_NAME from ACCOUNTS_SI';

我甚至试过重新命名它。

代码语言:javascript
复制
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。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-19 12:45:19

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

代码语言:javascript
复制
mySQL := 'select RID, REGISTRY_ID, TERRITORY_ID, ACCOUNT_NAME from (select ROWID, ROWID as RID, s.* from ACCOUNTS_SI s';

更新(因为上一个版本没有帮助)另一个变体:

代码语言:javascript
复制
mySQL := 'select RowIDtoChar(ROWID) RID, REGISTRY_ID, TERRITORY_ID, ACCOUNT_NAME from ACCOUNTS_SI';
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67162116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档