VBA ADODB错误-2147217904 - 未为某些必需参数指定值

时间:2014-02-13 11:51:17

标签: sql vba ms-access adodb

在Excel VBA项目中,我使用.accdb Access数据库,以及ADODB.Connection执行查询等。我的系统有MS Office 2007(英语),但客户端的系统是Office 2010(西班牙语)。

我在我的机器上测试过,查询,插入等都运行正常。但是当我在客户端的机器上测试时,我收到了以下错误:

错误-2147217904,没有特别关注al algunos delosparámetrosrequeridos。

可以大致翻译为“没有为某些必需参数指定值。”

使用conn.Execute sql, numRowsAffected

执行以下语句给出了我的问题
INSERT INTO SomeTable
    (COL1, COL2, COL3, COL4, COL5, COL6, COL7, COL8, COL9, COL10, COL11, COL12, COL13, COL14)
    VALUES (1, 'TEXT', 5163, 8482, 103, Verdadero, 3, -1, 'Blanco', 3, 33, 40, 29, 1);

我更改了列名以缩短代码。此外,Verdadero在西班牙语中是True,以防有人想知道。

我在网上搜索过这个错误,但我找不到太多有用的信息。 One forum(西班牙语)提到错误通常意味着字段名称错误,例如表列名称从“Persona”更改为“Person”,但查询仍引用“Persona”。我仔细检查过,我认为这不是这种情况。此外,查询在我的系统上完美执行,如果是这样的问题就不会出现这种情况。

还值得注意的是,其他插入成功执行(在客户端的计算机上),并且仅在执行此特定语句时才会出现错误。此外,SomeTable具有AUTOINCREMENT PK ID值,该值未包含在上述SQL语句中。

我认为2007 VBA将与2010兼容,并且拥有西班牙语版Office的客户机器无关紧要,但现在我有疑问。我正在使用对“Microsoft Office 12.0对象库”的引用,而客户端是14.0,而Microsoft ActiveX Data Objects 6.0库,而客户端是6.1(我认为)。对于Access数据库引擎对象库,我的是12.0,客户端是14.0。

任何人都知道有任何潜在的原因吗?

1 个答案:

答案 0 :(得分:2)

正如问题评论中所建议的那样,这似乎是参数化查询将使代码更易于管理(以及更安全)的另一个示例。在这种情况下,代码看起来像这样:

Option Compare Database
Option Explicit

Sub InsertTest()
    Dim con As ADODB.Connection, cmd As ADODB.Command
    Const Veradero = True  ' to simulate Spanish VBA environment
    Set con = CurrentProject.Connection
    Set cmd = New ADODB.Command
    cmd.ActiveConnection = con
    cmd.CommandText = _
            "INSERT INTO SomeTable (TextField, YesNoField) VALUES (?,?)"
    cmd.Parameters.Append cmd.CreateParameter("?", adVarWChar, adParamInput, 255, "TEXT")
    cmd.Parameters.Append cmd.CreateParameter("?", adBoolean, adParamInput, , Veradero)
    cmd.Execute
    Set cmd = Nothing
    con.Close
    Set con = Nothing
End Sub