1

VBA から SQL およびパラメーター化されたクエリを使用すると、次の問題が発生します。

パラメーターを作成するとき、varchar パラメーターと int パラメーターを個別に作成して正しく使用できます。ただし、それらを混在させると、次の SQL エラーが発生します。

Operand type clash: text is incompatible with int

複数のタイプのパラメーターを組み合わせると、SQL がすべてをテキストに粉砕しているようです。

3 番目のケース (さまざまなタイプのパラメーターを使用) を機能させるには、自分のコード (VBA/SQL) で別の方法で何をする必要がありますか?


VBAコードは次のとおりです。

Sub testAdodbParameters()


    Dim Cn As ADODB.Connection
    Dim Cm As ADODB.Command
    Dim Pm As ADODB.Parameter
    Dim Pm2 As ADODB.Parameter
    Dim Rs As ADODB.Recordset

    Set Cn = New ADODB.Connection
    Cn.Open "validConnectionString;"

    Set Cm = New ADODB.Command

    On Error GoTo errHandler

    With Cm
        .ActiveConnection = Cn
        .CommandType = adCmdText

        Set Pm = .CreateParameter("TestInt", adInteger, adParamInput)
        Pm.value = 1

        Set Pm2 = .CreateParameter("TestVarChar", adVarChar, adParamInput, -1)
        Pm2.value = "testhi"


        'this works
        If True Then
            .CommandText = "INSERT INTO Test(TestInt) VALUES(?);"
            .Parameters.Append Pm

        End If

        'this also works
        If False Then
            .Parameters.Append Pm2
            .CommandText = "INSERT INTO Test(TestVarChar) VALUES(?);"

        End If

        'this fails with:
        'Operand type clash: text is incompatible with int
        If False Then
            .Parameters.Append Pm
            .Parameters.Append Pm2
            .CommandText = "INSERT INTO Test(TestVarChar,TestInt) VALUES(?,?);"

        End If

        Set Rs = .Execute
    End With
errHandler:
    Debug.Print Err.Description
End Sub

テーブルを生成する SQL コードは次のとおりです。

CREATE TABLE Test (
    ID int IDENTITY(1,1) PRIMARY KEY,
    TestVarChar varchar(50),
    TestInt int
);
4

1 に答える 1

0

クエリで VARCHAR、INT の順序になっています。これを試すことができます。

        .Parameters.Append Pm2
        .Parameters.Append Pm
        .CommandText = "INSERT INTO Test(TestVarChar,TestInt) VALUES(?,?);"

それは動作しますか?

于 2013-10-15T14:17:12.407 に答える