4

MS-Access 2007 で単純なパラメーター化された挿入を実行しようとしていますが、次のエラー (3708) が引き続き発生しますADODB.Parameters

Parameter object is improperly defined. Inconsistent or incomplete information was provided. s'

3 つのフィールドに挿入される 3 つのパラメーターがあります。次のタイプがあります。

  • クエリ名: TEXT (50)
  • db_id: 数値 (長整数)
  • query_text: メモ

db_idは問題なく挿入されますが、他の 2 つのテキスト フィールドでは上記のエラーが発生します。

以下は私の簡単なサンプルコードです:

Sub testz()

    Dim conn As ADODB.Connection
    Set conn = CurrentProject.Connection

    Dim adoCMD As ADODB.Command
    Dim adoRS As ADODB.Recordset
    Dim strSQL As String
    Dim lRecordsAffected As Long

    On Error GoTo Err_Insert

    strSQL = "INSERT INTO queries (query_name, db_id, query_text) VALUES (?, ?, ?)"

    Set adoCMD = New ADODB.Command

    With adoCMD
        Dim test As String
        test = "tetws"
        .ActiveConnection = conn
        .CommandType = adCmdText
        .CommandText = strSQL

        .Parameters.Append .CreateParameter("x1", adVarChar, adParamInput) ' Doesn't work - MS ACCESS Text field
        .Parameters.Append .CreateParameter("x2", adInteger, adParamInput) ' This works - Numeric field
        .Parameters.Append .CreateParameter("x3", adLongVarChar, adParamInput) ' This doesn't work MS ACCESS Memo field.

        .Parameters("x1").Value = test
        .Parameters("x2").Value = 56
        .Parameters("x3").Value = test

        adoCMD.Execute adExecuteNoRecords
    End With

    If lRecordsAffected = 0 Then
        Debug.Print ("------------------------")
        Debug.Print ("ERROR QUERY not inserted:")
        Debug.Print ("database id: " & id)
        Debug.Print ("query name: " & tblName)
        Debug.Print ("strSQL: " & qryTxt)
        Debug.Print ("------------------------")
    Else

    End If

Exit_Insert:
    Set adoCMD = Nothing
    Set adoRS = Nothing

    Exit Sub

Err_Insert:
    Debug.Print "----------------"
    Debug.Print "BEGIN: Err"
    If err.Number <> 0 Then
        Msg = "Error # " & Str(err.Number) & " was generated by " _
         & err.Source & Chr(13) & "Error Line: " & Erl & Chr(13) & err.Description
        'MsgBox Msg, , "Error", err.HelpFile, err.HelpContext
        Debug.Print Msg
    End If
    Resume Exit_Insert


End Sub

次のリファレンスでは、データベース タイプ s のフィールドのMEMOパラメータ タイプは でadLongVarCharあり、そのタイプ データベース タイプのタイプTEXTは である必要があると述べていますadVarChar

4

1 に答える 1

5

ここには 2 つの問題があると思います。

  1. adVarWCharJet 4.0 (およびその後の ACE) のリリースで、必要な型がfor Text、およびadLongVarWCharfor Memo(マルチバイト文字サポート用)に変更されたことは確かです。

  2. テキスト パラメータには、(最大) 長さが定義されている必要があります。あなたの.CreateParameter()通話にはそれらが表示されません。

于 2013-06-03T18:49:29.247 に答える