VBA - MariaDB - 无法更新查询,因为它不包含用作键的可搜索列

VBA - MariaDB - Query cannot be updated because it contains no searchable columns to use as a key

我正在使用 MariaDB,VBA 到 read/write 使用 ADODB 的平面数据库。这不是我的选择,但是我被要求以这种方式工作。另一种方法是直接使用 SQL 查询,但这是一个非常古老的 VB3 应用程序的端口。

这是我连接到数据库的代码,提取所有记录,更新最后一条记录,然后调用 update 有效地将其写回数据库

Global DB As New ADODB.Connection
Global TD As New ADODB.Recordset

DB.Open "Driver={MariaDB ODBC 2.0 Driver};Server=localhost;UID=???;PWD=???;DB=sf_log;Port=3306"
Dim query As String: query = "SELECT * FROM `" & TableName & "` ORDER BY `Record ID`"

TD.CursorLocation = adUseServer
TD.CursorType = adOpenDynamic
TD.Open query, DB, adOpenKeyset, adLockOptimistic
TD.MoveLast

Dim TestColumnField as string
TestColumnField = TD.Fields("TestColumn")  'This returns the correct value from the database indicating the connection was successful

TD.Fields("TestColumn") = "test"

TD.UpdateBatch (adAffectCurrent)  ' This line throws the error

报告的错误是 "Query cannot be updated because it contains no searchable columns to use as a key"

该数据库是一个没有键的平面无关系数据库。我试过将 "record id" 设置为主键,但没有成功。

这个错误是由于 MariaDB 而不是 implementing/supporting ADODB recorset?是因为我的数据库结构吗?还是我只是错误地使用了 ADODB 记录集?

编辑:这是一个示例,表明您不需要 SQL 更新语句。您可以简单地 select 数据并调用更新。

http://www.accessallinone.com/updating-adding-and-deleting-records-in-a-recordset/

Sub ADODBUpdating()
Dim sql As String
Dim rs As adodb.Recordset

sql = "SELECT * FROM tblTeachers WHERE TeacherID=5"

Set rs = New adodb.Recordset
rs.Open sql, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
'Open RecordSet

With rs
    If Not .BOF And Not .EOF Then
        .MoveLast

        If .Supports(adUpdate) Then

            ![FirstName] = "x" & ![FirstName]

            .Update            
        End If
    End If

    .Close
End With

1.) 您不能使用 SELECT-语句在 SQL 中进行更新。而是使用更新语句。 2.) 不要尝试更新所有记录。仅更新您要更新的单行。正如您所写,这应该是最后一条记录。

您更新了测试字段并且您必须在 WHERE 子句中足够具体,您只 select 您想要更新的唯一记录。

服务器端游标实施似乎受到限制,请改用客户端游标 (DB.CursorLocation = adUseClient)。