2012-03-12 48 views
5

我有一个表中的数据行显示为#DELETED在一台计算机上使用Access时,但它们在SQL数据库和使用Access的其他计算机上都正常。它似乎只是最新的200行。 Access 2007版本和ODBC MSJet驱动程序在每台计算机上的最新版本看起来都是相同的&。一个建议是将任何PK或FK改为int,但它们已经是。行显示为#DELETED

任何想法为此修复?

回答

8

这发生在表主键值超出MS Access支持的范围时,通常如果您在SQL Server中使用“BigInt”类型,如果您只是想要读取数据,那么只需创建一个“快照-shot“查询,并且所有行将正确显示,因为”快照“不需要读取所有索引。

如果您需要随时更新这些行中的数据,那么我建议使用ADO记录集。

+0

如果这是一个Access问题,它将如何影响一个用户而不是一次性影响所有人? – TesseractE 2014-11-04 16:58:48

+0

很难打电话,设置中可能会有细微的差异,可能是服务包或补丁程序级别,32位和64位,但没有看到两个实例分别是一个谜。 – 2014-11-06 17:39:54

+0

我想问的原因是,我偶尔在一个项目上看到过这种情况,但它一次不会影响多个用户,并且通常会自行消失。 显然我宁愿完全避免它,但如果这是广泛报道的'bigint'问题应该是更广泛的,我应该思考。 – TesseractE 2014-11-06 22:46:15

4

考虑在SQL的主键数据类型的使用数字(18,0)代替BIGINT。如果在SQL Server端将其设置为数字数据类型,MS Access可以解析有效的大整数PK。我在Access 2010的SQL 2008R2上遇到了同样的问题,其中所有行在使用bigint PK时显示“#DELETED”。

+0

感谢您的信息,我会尽快尝试。但你见过这个:http://stackoverflow.com/questions/6838374/sql-server-bigint-or-decimal18-0-for-primary-key?不确定小数和数字是否被认为是一个很大的差异。 – 2013-01-09 23:04:53

2

嗯,只是想添加解决方案,为我工作。

我将一些视图链接到MS Access,这些工作正常。过了一段时间后,我改变了Integer之前的那一列的类型,并且我做了VARCHAR。由于此列是我的表的主键(我在MS Access中添加View时也选择了主键),因此在更改后开始显示“#DELETED”。为了解决这个问题,我只是用“ALTER VIEW”声明重新执行了相同的视图,并使用了sp_refreshview'VIEW_NAME'。

这样做后,它开始为我工作。 希望这可以帮助面临同样问题的人。

+0

这有点复杂,不过谢谢。 – 2016-10-06 01:29:03

1

我一直连接访问前端到SQL Server 2000,2008 R2然后2014多年没有问题。硬盘发生故障后,我在Windows 7(64位)计算机上重新安装了SQL Server 2014 Developer,并且当移动到新记录或单击功能区上的保存时,突然间,我的Access 2010表单在每个字段中都会遇到可怕的#Deleted。

这很奇怪,因为在另一台计算机上安装相同的Windows 7(64位)没有问题。那么,几乎相同。在新硬盘上安装SQL Server 2014后,我发现只安装了Native Client 11.0驱动程序,因此我修改了ODBC连接字符串以在Access VBA代码中使用DRIVER = SQL Server Native Client 11.0。当使用Access表单时,我立即开始获取插入记录的每个字段中的#Deleted。

调查显示,办理了插入的记录正确的“好”的计算机之间的区别,并得到了中#Deleted的“坏”的计算机是存在/不存在本机客户端10.0驱动程序。我从Microsoft下载了10.0驱动程序,安装它并检查我的代码,以确保所有使用DRIVER = SQL Server Native Client 10.0的ODBC连接字符串。

一切正常,现在没有更多#Deleted问题。

2

我有相同的#DELETED问题,这是因为主键数据类型是bigint。当我查询由第三方应用程序创建的表时,我无法修改数据类型,因此我在表上创建了一个视图并使用CAST将数据类型转换为int(在检查值保存后在表中不会导致溢出)。

1

如果您在SQL使用ROW_NUMBER()函数的字段上设置主键,则可以将其转换为int。默认情况下ROW_NUMBER()是int64(bigInt)。

1

这种奇怪的行为可能会发生指向访问SQL 2017数据库(以前指向SQL 2008R2数据库)。当我们使用更新的ODBC驱动程序(SQL Native Client 11)创建新的DSN时,行为恢复正常。