【问题标题】:ADO .addnew with ODBC for mariadb: ErrorADO .addnew 与 mariadb 的 ODBC:错误
【发布时间】:2016-11-21 15:00:00
【问题描述】:

我正在研究将小型访问应用程序迁移到 MariaDB 的概念验证。 对于概念证明,我使用了 mysql odbc 开发人员指南中列出的代码: https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-examples-programming-vb-ado.html

所有示例代码都可以正常工作,直到下一节我在“rs.Update”处遇到错误(无法更新记录)。为用户授予所有权限。

'rs insert rs.Open "select * from my_ado", conn, adOpenDynamic, adLockOptimistic rs.AddNew rs!Name = "Monty" rs!txt = "Insert row" rs.Update rs.Close

我在 Win7 64 位平台上使用 MariaDB 10.1.19 和 MariaDB Connector/ODBC 2.0.16。

任何帮助将不胜感激......

编辑:odbc 跟踪的最后几行:

估值和 B 1ad8-1f28 ENTER SQLColAttributesW HSTMT 0x004F1F30 超字 3 UWORD 16 PTR 0x0D267D00 剑258 剑 * 0x0018D2DC SQLLEN * 0x00000000

Valuation and B 1ad8-1f28 EXIT SQLColAttributesW with return code -1 (SQL_ERROR) HSTMT 0x004F1F30 超字 3 UWORD 16 PTR 0x0D267D00 剑258 剑 * 0x0018D2DC SQLLEN * 0x00000000

    DIAG [S1C00] [ma-1.0.6][10.1.19-MariaDB]Optional feature not implemented (0) 

估值和 B 1ad8-1f28 ENTER SQLGetDiagRecW SQLSMALLINT 3 SQLHANDLE 0x004F1F30 SQLSMALLINT 1 SQLWCHAR * 0x0018D260 SQLINTEGER * 0x0018CE38 SQLWCHAR * 0x0018CE60 SQLSMALLINT 512 SQLSMALLINT * 0x0018CE48

Valuation and B 1ad8-1f28 EXIT SQLGetDiagRecW with return code 0 (SQL_SUCCESS) SQLSMALLINT 3 SQLHANDLE 0x004F1F30 SQLSMALLINT 1 SQLWCHAR * 0x0018D260 [5]“S1C00” SQLINTEGER * 0x0018CE38 (0) SQLWCHAR * 0x0018CE60 [59]“[ma-1.0.6][10.1.19-MariaDB]可选功能未实现” SQLSMALLINT 512 SQLSMALLINT * 0x0018CE48 (59)

估值和 B 1ad8-1f28 ENTER SQLGetDiagRecW SQLSMALLINT 3 SQLHANDLE 0x004F1F30 SQLSMALLINT 2 SQLWCHAR * 0x0018D260 SQLINTEGER * 0x0018CE38 SQLWCHAR * 0x0018CE60 SQLSMALLINT 512 SQLSMALLINT * 0x0018CE48

Valuation and B 1ad8-1f28 EXIT SQLGetDiagRecW with return code 100 (SQL_NO_DATA_FOUND) SQLSMALLINT 3 SQLHANDLE 0x004F1F30 SQLSMALLINT 2 SQLWCHAR * 0x0018D260 SQLINTEGER * 0x0018CE38 SQLWCHAR * 0x0018CE60 SQLSMALLINT 512 SQLSMALLINT * 0x0018CE48

估值和 B 1ad8-1f28 ENTER SQLColAttributesW HSTMT 0x004F1F30 超字 3 UWORD 23 PTR 0x0D267E10 剑386 剑 * 0x0018D2DC SQLLEN * 0x00000000

Valuation and B 1ad8-1f28 EXIT SQLColAttributesW with return code 0 (SQL_SUCCESS) HSTMT 0x004F1F30 超字 3 UWORD 23 PTR 0x0D267E10 剑386 剑 * 0x0018D2DC (12) SQLLEN * 0x00000000

估值和 B 1ad8-1f28 ENTER SQLColAttributesW HSTMT 0x004F1F30 超字 3 UWORD 22 PTR 0x0D267FA0 剑386 剑 * 0x0018D2DC SQLLEN * 0x00000000

Valuation and B 1ad8-1f28 EXIT SQLColAttributesW with return code 0 (SQL_SUCCESS) HSTMT 0x004F1F30 超字 3 UWORD 22 PTR 0x0D267FA0 剑386 剑 * 0x0018D2DC (6) SQLLEN * 0x00000000

估值和 B 1ad8-1f28 ENTER SQLColAttributesW HSTMT 0x004F1F30 超字 3 UWORD 13 PTR 0x00000000 剑 0 剑 * 0x00000000 SQLLEN * 0x0018D2C8

Valuation and B 1ad8-1f28 EXIT SQLColAttributesW with return code -1 (SQL_ERROR) HSTMT 0x004F1F30 超字 3 UWORD 13 PTR 0x00000000 剑 0 剑 * 0x00000000 SQLLEN * 0x0018D2C8

    DIAG [S1C00] [ma-1.0.6][10.1.19-MariaDB]Optional feature not implemented (0) 

估值和 B 1ad8-1f28 ENTER SQLGetDiagRecW SQLSMALLINT 3 SQLHANDLE 0x004F1F30 SQLSMALLINT 1 SQLWCHAR * 0x0018D244 SQLINTEGER * 0x0018CE1C SQLWCHAR * 0x0018CE44 SQLSMALLINT 512 SQLSMALLINT * 0x0018CE2C

Valuation and B 1ad8-1f28 EXIT SQLGetDiagRecW with return code 0 (SQL_SUCCESS) SQLSMALLINT 3 SQLHANDLE 0x004F1F30 SQLSMALLINT 1 SQLWCHAR * 0x0018D244 [5]“S1C00” SQLINTEGER * 0x0018CE1C (0) SQLWCHAR * 0x0018CE44 [59]“[ma-1.0.6][10.1.19-MariaDB]可选功能未实现” SQLSMALLINT 512 SQLSMALLINT * 0x0018CE2C (59)

估值和 B 1ad8-1f28 ENTER SQLGetDiagRecW SQLSMALLINT 3 SQLHANDLE 0x004F1F30 SQLSMALLINT 2 SQLWCHAR * 0x0018D244 SQLINTEGER * 0x0018CE1C SQLWCHAR * 0x0018CE44 SQLSMALLINT 512 SQLSMALLINT * 0x0018CE2C

Valuation and B 1ad8-1f28 EXIT SQLGetDiagRecW with return code 100 (SQL_NO_DATA_FOUND) SQLSMALLINT 3 SQLHANDLE 0x004F1F30 SQLSMALLINT 2 SQLWCHAR * 0x0018D244 SQLINTEGER * 0x0018CE1C SQLWCHAR * 0x0018CE44 SQLSMALLINT 512 SQLSMALLINT * 0x0018CE2C

估值和 B 1ad8-1f28 ENTER SQLFreeStmt HSTMT 0x004F1F30 UWORD 2

Valuation and B 1ad8-1f28 EXIT SQLFreeStmt with return code 0 (SQL_SUCCESS) HSTMT 0x004F1F30 UWORD 2

估值和 B 1ad8-1f28 ENTER SQLFreeStmt HSTMT 0x004F1F30 UWORD 0

Valuation and B 1ad8-1f28 EXIT SQLFreeStmt with return code 0 (SQL_SUCCESS) HSTMT 0x004F1F30 UWORD 0

估值和 B 1ad8-1f28 ENTER SQLFreeStmt HSTMT 0x004F3040 UWORD 1

Valuation and B 1ad8-1f28 EXIT SQLFreeStmt with return code 0 (SQL_SUCCESS) HSTMT 0x004F3040 UWORD 1

估值和 B 1ad8-1f28 ENTER SQLFreeStmt HSTMT 0x004F1F30 UWORD 0

Valuation and B 1ad8-1f28 EXIT SQLFreeStmt with return code 0 (SQL_SUCCESS) HSTMT 0x004F1F30 UWORD 0

估值和 B 1ad8-1f28 ENTER SQLFreeStmt HSTMT 0x004F1F30 UWORD 1

Valuation and B 1ad8-1f28 EXIT SQLFreeStmt with return code 0 (SQL_SUCCESS) HSTMT 0x004F1F30 UWORD 1

估值和 B 1ad8-1f28 ENTER SQLDisconnect HDBC 0x004F1AC0

Valuation and B 1ad8-1f28 EXIT SQLDisconnect with return code 0 (SQL_SUCCESS) HDBC 0x004F1AC0

估值和 B 1ad8-1f28 ENTER SQLFreeConnect HDBC 0x004F1AC0

Valuation and B 1ad8-1f28 EXIT SQLFreeConnect with return code 0 (SQL_SUCCESS) HDBC 0x004F1AC0

估值和 B 1ad8-1f28 ENTER SQLFreeEnv HENV 0x004F17B0

Valuation and B 1ad8-1f28 EXIT SQLFreeEnv with return code 0 (SQL_SUCCESS) HENV 0x004F17B0

估值和 B 1ad8-1f28 ENTER SQLFreeEnv HENV 0x004F1828

Valuation and B 1ad8-1f28 EXIT SQLFreeEnv with return code 0 (SQL_SUCCESS) HENV 0x004F1828

【问题讨论】:

  • 请提供准确的错误信息,包括 SQLSTATE 等。
  • 错误号为 -2147467259。我不确定,SQLSTATE 是什么意思。我确实有一个 odbc 跟踪文件,但我无法在此处附加它。
  • 经过一些研究发现一些迹象:DIAG [S1C00] [ma-2.0.13][10.1.19-MariaDB]可选功能未实现 (0)。不幸的是我不能把它放在上下文中?这是 MariaDB 错误吗?

标签: mysql odbc mariadb ado


【解决方案1】:

我遇到了同样的问题。除了其他一些问题,这个更新错误让我发疯了,因为尽管有这个错误,第一条记录还是被添加到了 maria-db。当我从头开始测试时,我发现只有在执行 upadte 命令时还有其他记录集打开时才会发生此错误。 由于我不想重写我的访问代码,所以第一个快速而肮脏的试验是将更新命令包装在“下一个错误恢复”中。这解决了问题。

例如

Set rs = CurrentDb.OpenRecordset("...")
Set rs2 = CurrentDb.OpenRecordset(".....")
....
Do While Not rs.EOF
  rs2.AddNew
  rs2.Fields("...") = rs.Fields("...")
  rs2.Fields("...") = rs.Fields("...")
  ....
  ....
  On Error Resume Next
  rs2.Update
  On Error GoTo 0
Loop
....

我希望,这对你也有用。 请注意日期和时间字段的潜在问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    相关资源
    最近更新 更多