我有一个Access接口,该接口连接到Oracle数据库。我目前正在研究一种通过单击按钮自动更新Oracle表的方法。我要更新的表具有一个唯一字段,该字段是VARCHAR,但使用的是连续数字。
在进行研究时,我发现以下函数可以找到最后使用的数字,然后以1递增:
Dmax("VAL([INFORMATION_ITEM_ID])", "[EAUSER_INFORMATION_ITEM]") + 1
这确实找到了最后使用的号码并加了一个,但是它仅对第一个记录有效。当我运行INSERT语句时,将在引发不一致错误之前添加第一条记录。它正在使用与其他记录中的第一条记录相同的ID。
要完成这项工作,我还需要做什么?
谢谢!
根据请求添加,这是INFORMATION_ITEM_ID的结构:
INFO_ITEM_ID
1000
1001
1002
1003
...
这是一个Varchar字段,即使只使用数字(不要问我为什么-不是我的想法,对此我也没有发言权)。我想随着记录的添加而增加(1004、1005等)。
答案 0 :(得分:0)
我想出了一个变通方法,这很让人费解,但是可以解决这个问题。我认为问题出在每次插入Oracle数据库后都需要提交更改,而Access则不能。
因为Access不允许在一个查询中使用多个SQL语句,所以我最终不得不进行多个查询才能使此工作正常进行。这是我遵循的步骤:
使用以下命令创建更新查询以计算字符串ID 公式:
CStr([TMP_TABLE]![ID] + DMax(“ Val([INFORMATION_ITEM_ID])”,“ [INFORMATION_ITEM]”)))
使用生成的临时表更新Oracle表
因为我要自动执行此操作,所以我还创建了一个查询来删除临时表,然后再重新创建它,以便新的导入重新开始。
注意:如果只需要将计算出的ID插入一个表中,则可以仅使用常规查询而不是更新表。以我为例,将INFORMATION_ITEM_ID插入到2个表中,如果我没有将其插入到临时表中以使其保持不变,则一旦将其插入到INFORMATION_ITEM表中,DMAX值就会改变。
需要5个查询,但至少可以使用。有时使您不得不为解决Access的怪癖而感到沮丧。
有人有更优雅的方法吗?假设您必须在Access中执行此操作(这是我的情况)。