2013-06-03 30 views
4

我試着用MS-Access 2007中一個簡單的參數化的插入,我不斷從ADODB.Parameters收到以下錯誤(3708):VBA/MS-ACCESS中帶有備註和文本字段的參數化INSERT?

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

我有插入到了3場3個參數。它們有以下幾種類型:

  • QUERY_NAME:TEXT(50)
  • DB_ID:數字(長整型)
  • QUERY_TEXT:備註

db_id插入就好了,但其他兩個文本字段導致上述錯誤。

下面是我的簡單示例代碼:

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 

following reference說,數據庫類型的字段MEMO S的關係有adLongVarChar參數類型和類型的數據庫類型TEXT,應該有一個類型的adVarChar

+0

您嘗試過'adLongVarWChar'和'adVarWChar'嗎? –

+0

我嘗試了兩種方法,假設'LongVarWChar'用於備註字段,'adVarWChar'用於文本字段,這不起作用。 – leeand00

回答

4

我認爲有在玩兩個問題在這裏:

  1. 我敢肯定,與Jet 4.0的版本(以及隨後,ACE)所需要的類型改爲adVarWCharText,和adLongVarWCharMemo(用於支持多字節字符)。

  2. 文本參數必須定義(最大)長度。我在.CreateParameter()調用中看不到那些人。

+0

那麼備忘錄的最大長度是64000東西... – leeand00

+0

好吧,爲adVarWChar添加字段的大小似乎有所幫助.. – leeand00

+0

我去了這裏:http://office.microsoft.com/en-us/access -help/use-a-memo-field-to-store-large-amount-of-information-HA102505209.aspx,發現備忘錄字段是'65535'字符,並添加到我的參數似乎使它工作。謝謝! – leeand00

相關問題