14

我在使用 SQLite 数据库时遇到问题。我正在使用来自http://www.ch-werner.de/sqliteodbc/的 SQLite ODBC 安装了 64 位版本并使用以下设置创建了 ODBC:

在此处输入图像描述

我打开我的 Access 数据库并链接到数据源。我可以打开表格,添加记录,但不能删除或编辑任何记录。我需要在 ODBC 端修复什么以允许这样做吗?尝试删除记录时出现的错误是:

Microsoft Access 数据库引擎停止了该过程,因为您和另一个用户正试图同时更改相同的数据。

当我编辑记录时,我得到:

自您开始编辑该记录以来,该记录已被其他用户更改。如果您保存记录,您将覆盖其他用户所做的更改。

保存记录被禁用。只能复制到剪贴板或删除更改。

4

3 回答 3

10

我最初尝试重新创建您的问题没有成功。我在我的 32 位测试虚拟机上使用了以下内容:

  • 访问 2010
  • SQLite 3.8.2
  • SQLite ODBC 驱动程序 0.996

我创建并填充了测试表 [tbl1],如此所述。我创建了一个 Access 链接表,并在出现提示时选择了两列([one] 和 [two])作为主键。当我在数据表视图中打开链接表时,我能够毫无意外地添加、编辑和删除记录。

我可以看到我的设置和你的设置之间的唯一区别(除了我使用 32 位而你使用 64 位这一事实之外)是在 ODBC DSN 设置中,我将Sync.Mode设置保留为默认值NORMAL,而你的似乎设置为OFF

尝试将您的设置Sync.ModeNORMAL,看看是否有所作为。

编辑回复:评论

在这种情况下,解决方案如下:

一种可能的解决方法是创建一个新的 SQLite 表,其中包含所有相同的列以及一个新的 INTEGER PRIMARY KEY 列,Access 将“看到”为自动编号。您可以在前四列(当前是什么)上创建唯一索引以确保它们保持唯一,但新的新“身份”(ROWID) 列是 Access 用来识别 CRUD 操作的行。

于 2013-12-10T15:33:09.070 回答
4

我也有这个问题。我在 VARCHAR(30) (TEXT) 字段上有一个带有主键的表。

添加 INTEGER PRIMARY KEY 列根本没有帮助。经过大量测试后,我发现问题出在表中的 DATETIME 字段上。我删除了 DATETIME 字段,并且能够更新 MS-Access 数据表视图中的记录值。

所以现在我在 SQLite 中需要的任何 DATETIME 字段,我声明为 VARCHAR(19),因此它们通过 ODBC 作为文本进入 Access。不完美,但它有效。(当然 SQLite 并没有真正的 DATETIME 字段类型,所以 TEXT 很好,可以转换)

我确认这是一个数字转换问题。使用空的 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 在尝试更新任何字段 时也会出错在那一行。

于 2014-09-02T02:38:15.163 回答
0

我搜索了所有类似的帖子,因为我遇到了通过 ODBC 链接到 Access 的 SQLite 的类似问题。我有三个表,其中两个允许编辑,但第三个不允许。第三个有一个 DATETIME 字段,当我将数据类型更改为原始 SQLite 数据库中的 TEXT 字段并重新链接到访问时,我可以编辑表。所以对我来说,它被确认为 DATETIME 字段的问题。

于 2015-10-29T06:30:54.967 回答