Excel 2016(win10)でSQLite ODBC Driver v0.9993を使用しています。外部ソースを使用する主な原動力は、Excel用のデータがあまりにも多くあるため、ユーザーが選択した基準に基づいて取得されます。このため、私は、明確に定義されたワークシート・セルの内容に基づいて、パラメータ化された問合せを使用したいと考えています。SQLiteでExcelでパラメータ化されたクエリ
私は二つの方法しようとしている:私はこのような何か(ラフコード)を行うストレートVBA、
を:
Sub UpdateTables() Dim ws as Worksheet Dim adoCN As ADODB.Connection Dim adoCmd As ADODB.Command Dim adoRS As ADODB.Recordset Dim sDB as String Dim rCell as Range Set adoCN = New ADODB.Connection Set adoRS = New ADODB.Recordset ' ws is set to correct worksheet ' ... ' define sDB from worksheet cell With adoCN .Open "Provider=MSDASQL.1;Persist Security Info=True;" _ & "Driver={SQLite3 ODBC Driver};" _ & "Database=" & sDB & ";" _ & "DSN=SQLite3 Datasource;LongNames=true;fksupport=true", "", "" ' End With Set adoCmd = New ADODB.Command adoCmd.ActiveConnection = adoCN ' rCell points to cell containing query parameter Set adoParam = adoCmd.CreateParameter(, adVarChar, adParamInput, _ Len(rCell.value), rCell.value) adoCmd.Parameters.Append adoParam adoCmd.CommandText = "SELECT * FROM TableName WHERE X = ?" adoRS.Open Source:=adoCmd, CursorType:=adOpenKeyset With ws.ListObjects(1).QueryTable Set .RecordSet = adoRS .Refresh ' errors with "Error 1004: invalid accessor flag" End With End Sub
(コードは、私は健全性チェックが含まれ、一般的に、簡素化されました。
GUIベースのExcelで、と新しいクエリ>他のソースから>ODBCから、DSNを "SQLite3 Datasource"に設定し、上記の接続文字列に入力します。
残念ながら、 "パラメータ" ボタン(接続>選択クエリ>プロパティ>定義タブ)がグレー表示されます。
私は第2の解決策を好むと思いますが、どちらも現時点では機能していません。
。Value2'?それはうまくいくはずです。なぜ、最初のものが動作していないと言いますか?それはどういう意味ですか? – Ralph
これは主にパラメータ化ではないためです。ユーザーがセル '5; DROP TABLE users;を入力することはありそうにないと思うが、私はそれがより速く、より長期的に持続可能であるとも信じている。 – r2evans
私は、最初のメソッドが "Error 1004:invalid accessor flag"でエラーを起こしているため動作していないと言います。これは救済策の明確な兆候がない曖昧なエラーです。 – r2evans