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
);