使用VBA中的bigint字段更新SQL表(MS Access)

时间:2009-06-24 20:46:19

标签: sql ms-access vba

enter code here我在SQL Server 2005上有一个表,其中包含bigint主键和MS Access 2003前端(链接表)。

我想更新bigint为primarykey的表的记录。 我用

CurentDb.execute _
    "Update myTable SET Field1 =1 , Field2 = 'test' WHERE bigintKey = " & myVar

我的标准表达式数据不匹配。

如何在MS Access上更新具有bigint字段的MS SQL数据库的记录?

编辑:当我这样做时,它不会给我一个错误

CurentDb.execute _
    "Update myTable SET Field1 =1 , Field2 = 'test' WHERE bigintKey = '" & _
    myVar & "'"

但它没有更新记录...

3 个答案:

答案 0 :(得分:3)

没有太多理由使用范围从-9,223,372,036,854,775,808到9,223,372,036,854,775,807的主键值。

您最好将该主键更改为sql端的int列。如果你做了这个改变,事情就会好起来的。我建议这样做。记住,在sql server中一个int = long in ms-access。

尝试在访问的表视图中打开链接表。我发现带有bigint作为PK的sql 2005表甚至不能正确显示(你会看到每列都删除了)。

如果删除sql server端的PK设置,我发现链接可以正常工作。换句话说,您可以拥有唯一索引并将其设置为递增(标识),但不要将其设置为PK。从文档的角度来看这并不理想,如果强制关系中还有其他表,那么我不建议删除PK设置(实际上你不能这样做)。

所以,现在看来,如果PK是bigint,我无法成功链接到SQL服务器表。请注意,其他列可以作为bigint工作正常。它们只是作为ms-access的文本数据类型链接。我正确地看到你的代码样本假设这将是一个文本列(这对你来说是正确的)。只有当bigInt是PK列时,这才会搞砸。

我会将sql端的bigint更改为int(我只是看不到需要这么大的pk)。如果你必须将列保持为bigInt,那么只需删除sql端的PK设置(如果可能的话)。

因此,您可以将该bigInt列作为唯一索引,并且它可以继续作为自动增量标识列。但是,它不能成为BigInt PK,只是不起作用。

答案 1 :(得分:0)

条件表达式中的数据不匹配通常意味着SQL语法错误。尝试将生成的SQL复制到MS Access中的新查询中,并直接从Access运行。

你的例子中myVar是什么?结果是什么SQL?

答案 2 :(得分:0)

那么,您有MS Access DB,它是SQL Server的前端吗? OR
Access DB是否将表链接到SQL Server?

运行DML语句后,查看是否通过查看SQL Server(使用查询分析器)更新SQL Server。我的猜测是,Access可能无法刷新它。