我遇到了SQLite数据库的问题。我正在使用http://www.ch-werner.de/sqliteodbc/中的SQLite ODBC安装了64位版本并使用以下设置创建了ODBC:
我打开Access数据库并链接到数据源。我可以打开表,添加记录,但不能删除或编辑任何记录。有没有什么我需要修复ODBC端允许这个?我尝试删除记录时遇到的错误是:
Microsoft Access数据库引擎停止了该过程,因为您和另一个用户正在尝试同时更改相同的数据。
当我编辑记录时,我得到:
自您开始编辑以来,其他用户已更改该记录。如果您保存记录,则将覆盖其他用户所做的更改。
已禁用保存记录。只能复制到剪贴板或删除更改。
答案 0 :(得分:9)
我最初尝试重新创建您的问题是不成功的。我在32位测试VM上使用了以下内容:
我按照文档here创建并填充了测试表[tbl1]。我创建了一个Access链接表,当提示我时,我选择了两列([1]和[2])作为主键。当我在数据表视图中打开链接表时,我能够无事故地添加,编辑和删除记录。
我可以在我的设置和你的设置之间看到的唯一区别(除了我是32位而你是64位的事实)是在ODBC DSN设置中我离开了Sync.Mode
设置默认值为NORMAL
,而您的默认设置为OFF
。
尝试将Sync.Mode
设置为NORMAL
,看看是否有所作为。
修改评论<评论
本案的解决方案如下:
一种可能的解决方法是创建一个包含所有相同列的新SQLite表以及一个新的INTEGER PRIMARY KEY列,Access将“看到”为AutoNumber。您可以在前四列上创建唯一索引以确保它们保持唯一,但新的“身份”(ROWID)列是用于标识CRUD操作行的新列。
答案 1 :(得分:4)
我也有这个问题。我在VARCHAR(30)(TEXT)字段中有一个带有主键的表。
添加INTEGER PRIMARY KEY列根本没有帮助。经过大量测试后,我发现问题出在表格中的DATETIME字段中。我删除了DATETIME字段,并且我能够在MS-Access数据表视图中更新记录值。
所以现在我在SQLite中需要的任何DATETIME字段,我声明为VARCHAR(19),所以他们通过ODBC作为文本进入Access。不完美,但它的工作原理。 (当然,SQLite还没有真正的DATETIME字段类型,因此TEXT很好并且转换成OK)
我确认这是一个数字转换问题。使用空的DATETIME字段,我可以通过Access的数据表视图添加时间01-01-2014 12:01:02,如果我然后查看SQLite中的值已经四舍五入:
sqlite> SELECT three from TEST where FLoc='1020';
2014-01-01 12:01:00.000
SYNCMODE也应该是NORMAL而不是OFF。
<强>更新强> 如果您有任何具有已定义长度的文本字段(例如foo VARCHAR(10))并且字段内容包含的字符数多于字段定义(SQLite允许的话),则MS-Access在尝试更新任何该行上的字段。
答案 2 :(得分:0)
我搜索了所有类似的帖子,因为我遇到了类似的问题,SQLite通过ODBC链接到Access。我有三张桌子,其中两张允许编辑,但第三张没有。第三个有一个DATETIME字段,当我将数据类型更改为原始SQLite数据库中的TEXT字段并重新链接访问时,我可以编辑该表。所以对我而言,它被确认为DATETIME字段的问题。