# 删除MS Access中链接的Oracle表的值

a8jjtwal  于 2022-12-22  发布在  Oracle
关注(0)|答案(2)|浏览(140)

我在Oracle 12c中创建了一个简单的表,如下所示:

CREATE TABLE TEST
(
ID NUMBER GENERATED ALWAYS AS IDENTITY,
TEXT VARCHAR2(2000 CHAR),
CONSTRAINT ID_PK PRIMARY KEY (ID)
);

然后我在MS Access中使用ODBC驱动程序链接它。问题是,当我输入值到文本中并单击离开时,ID和文本都显示#已删除。我的值会记录在数据库中,但我必须在MS Access中重新查询才能看到它。
我还注意到如果我把文本字段的数据类型改为数字,它工作正常。在MS Access中保存记录后,文本字段中自动生成的ID和值都在那里。我不需要重新查询任何东西。
这种情况只在插入时发生。更新工作正常。
请指示。

iqjalb3h

iqjalb3h1#

因此,看起来您已经找到了解决方案,但这更多的是解释为什么它是这样工作的。简单地说,如果基表使用非整数值作为主键,Access会将这些整数四舍五入到最接近的整数,然后(因为它不是数值)Access无法再找到适用的记录。因此,在表结构中将数据类型从TEXT更改为INTEGER将给予所需的结果。
或者,如果您使用查询来遍历这些数据,如果您无法更改Oracle表中的键,则将Access查询类型更改为快照(在查询属性中)也可以绕过此问题,但从声音上看,这不是您使用数据的方式。

w8biq8rn

w8biq8rn2#

在我的例子中,Oracle ODBC驱动程序(使用相当旧的版本11.02.00.01,否则可以正常工作,以及Microsoft Access 2016 32位)似乎使用唯一索引,而不是主键约束来确定主键。
我有一个以NUMBER(11)作为PK的字段,它有一个唯一索引,然后添加了一个具有另一个唯一索引的VARCHAR2字段,VARCHAR2字段的索引名称按字母顺序排在NUMBER字段的索引名称之前。
现在,Microsoft Access中的链接表将VARCHAR2字段显示为主键,我遇到了输入并保存记录后出现“#Deleted”的问题,如您所述。
在Oracle中重命名NUMBER字段上的唯一索引,使其按字母顺序排在VARCHAR2字段之前,并在Microsoft Access中重新链接该表后,NUMBER字段再次成为Microsoft Access中的主键,“#Deleted”问题得到解决。

相关问题