Excel:SQL実行関数のエラー原因を知るには?
年甲斐もなく昨日からSQLでExcelデータを参照、更新、削除する二つの関数の作成に挑戦しています。が、
>[Microsoft][ODBC Excel Driver] パラメーターが少なすぎます。
>1を指定してください。
とのエラーで立ち往生中。
作成しているのは、SELECT文を実行するDBLookup()とUPDATE文、INSERT文、DELETE文を実行するCnnExecute()の二つ。どちらも、添付図のようにTESTに成功。で、一旦、Excel を閉じて、もう再テスト。すると、前述のエラーに遭遇。一度だけDBLookup()が正常に動いたのでCnnExecute()も再テスト。すると、前述のエラーが発生。同時に、DBLookup()も動かなくなりました。で、その後、5時間の試行錯誤中。だが、手詰まり感強く質問することに。このようなバグ取りで他者に質問と言う形で助けを求めるのは実に情けないことです。そこは、大目に見て下さい。
【質問】どういうアプローチをすべきと思いますか?
【DBLookup()のコード】
Public Function DBLookup(ByVal strQuerySQL As String, _
Optional xlFileName As String = "", _
Optional returnValue As String = "") As Variant
On Error GoTo Err_DBLookup
'
' 【要参照設定】
'
' Micrsoft ActiveX Data Objects 2.8 Library
'
Dim DataValue
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
'
' ThisWorkbook.FullName の指定
'
If Not Len(xlFileName) Then
xlFileName = ThisWorkbook.FullName
End If
'
' 接続設定
'
With cnn
.Provider = "MSDASQL"
'
' 32bit
'
'cnn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
' "DBQ=" & xlFileName & ";" & _
' "ReadOnly=False;"
'
' 64bit
'
.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
"DBQ=" & xlFileName & "; ReadOnly=False;"
.Open
'
' 列の読み込み
'
With rst
.Open strQuerySQL, cnn, adOpenStatic
If Not .BOF Then
.MoveFirst
DataValue = .Fields(0) & ""
End If
End With
End With
Exit_DBLookup:
On Error Resume Next
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
DBLookup = IIf(Len(DataValue), DataValue, returnValue)
Exit Function
Err_DBLookup:
MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
"・Err.Description=" & Err.Description & Chr$(13) & _
"・SQL Text=" & strQuerySQL, _
vbExclamation, " 関数エラーメッセージ"
Resume Exit_DBLookup
End Function
【CnnExecute()のコード】
Public Function CnnExecute(ByVal strSQL As String, _
Optional xlFileName As String = "") As Boolean
On Error GoTo Err_CnnExecute
'
' 【要参照設定】
'
' Micrsoft ActiveX Data Objects 2.8 Library
'
Dim isOK As Boolean
Dim DataValue
Dim cnn As ADODB.Connection
isOK = True
Set cnn = New ADODB.Connection
'
' ThisWorkbook.FullName の指定
'
If Not Len(xlFileName) Then
xlFileName = ThisWorkbook.FullName
End If
'
' 接続設定
'
With cnn
.Provider = "MSDASQL"
'
' 32bit
'
'cnn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
' "DBQ=" & xlFileName & ";" & _
' "ReadOnly=False;"
'
' 64bit
'
cnn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
"DBQ=" & xlFileName & ";" & _
"ReadOnly=False;"
.Open
.Execute strSQL
End With
Exit_CnnExecute:
On Error Resume Next
cnn.Close
Set cnn = Nothing
CnnExecute = isOK
Exit Function
Err_CnnExecute:
isOK = False
MsgBox "SQL 文の実行時にエラーが発生しました。(CnnExecute)" & Chr$(13) & Chr$(13) & _
"・Err.Description=" & Err.Description & Chr$(13) & _
"・SQL Text=" & strSQL, _
vbExclamation, " 関数エラーメッセージ"
Resume Exit_CnnExecute
End Function
「あっ、これは、多分、こういうことだな!」という思われた方は、気軽にご回答ください。
お礼
ご教授くださいまして。ありがとうございます。 そういった関連のドキュメントがどこにも見つけられなくて 質問してめみました。 解決いたしました。ありがとうございます。