- 締切済み
EXCELのSQL文
EXCELのSQL文で下記にてAccessのテーブルから取得中ですが mySQL = "SELECT 流通システム.協力者, 流通システム.ファイルパス, 流通システム.出品者へ入金 FROM 流通システム " & _ "WHERE(((流通システム.入金日)>=#" & orderDate & "#) AND ((流通システム.入金日)<=#" & shipDate & "#));" 下記にすると動きません mySQL = "SELECT 流通システム.協力者, 流通システム.ファイルパス, 流通システム.出品者へ入金 FROM 流通システム " & _ "WHERE(((流通システム.入金日)>=#" & orderDate & "#) AND ((流通システム.入金日)<=#" & shipDate & "#)) AND ((流通システム.協力者 =" & TextBox1 & ")) ;" 協力者を追加したいのですが上記じゃ駄目みたいです 1つ以上の必要なパラメータの値が設定されていません と出ます 大分はまっていしまいくたくたです 分かる方、急ぎでおしえてください
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- piroin654
- ベストアンサー率75% (692/917)
mySQL = "SELECT 流通システム.協力者, 流通システム.ファイルパス, 流通システム.出品者へ入金 FROM 流通システム " & _ "WHERE(((流通システム.入金日)>=#" & orderDate & "#) AND ((流通システム.入金日)<=#" & shipDate & "#));" 上記でパラメータを要求されていないということは 関数で「orderDate」、「shipDate」をSQLに渡して いるのだろうと思いますが、 mySQL = "SELECT 流通システム.協力者, 流通システム.ファイルパス, 流通システム.出品者へ入金 FROM 流通システム " & _ "WHERE(((流通システム.入金日)>=#" & orderDate & "#) AND ((流通システム.入金日)<=#" & shipDate & "#)) AND ((流通システム.協力者 =" & TextBox1 & ")) ;" では、「TextBox1」はユーザーフォームに設定 されたテキストボックスであるならば、これは VBAの中でパラメータを設定してSQL文に渡す 必要があります。 たとえば、ユーザーフォームにコマンドボタンと テキストボックスを設定します。コマンドボタンの クリック時のイベントで以下のようにします。 「orderDate」と「shipDate」はどのように 設定しているのかわからないので、VBAの中で 設定しておくことにします。 ADOを使っているのでコード表の参照設定でADOにチェックを 入れておいてください。以下のような感じです。 Microsoft ActiveX Data Objects xx Library AccessファイルはExcelと同じディレクトリに あるものとします。 Private Sub CommandButton1_Click() Dim myCon As New ADODB.Connection Dim myCmd As New ADODB.Command Dim myRS As New Recordset Dim FileName As String Dim strSQL As String Dim orderDate As Date Dim shipDate As Date Dim param As ADODB.Parameter orderDate = "2011/01/01" shipDate = "2011/01/31" strSQL = "SELECT 流通システム.協力者, 流通システム.ファイルパス, 流通システム.出品者へ入金 FROM 流通システム " & _ "WHERE(((流通システム.入金日)>=#" & orderDate & "#) AND ((流通システム.入金日)<=#" & shipDate & "#)) AND ((流通システム.協力者 =" & TextBox1 & ")) ;" FileName = ThisWorkbook.Path & "\sample.mdb" myCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileName With myCmd .ActiveConnection = myCon .CommandText = strSQL End With '----パラメータの設定------ Set param = New ADODB.Parameter Set param = myCmd.CreateParameter("協力者", adVarChar, adParamInput, 30) myCmd.Parameters.Append param myCmd.Parameters("協力者") = TextBox1 '----ここまで----複数ある場合は同じように設定します。 Set myRS = myCmd.Execute Worksheets("Sheet1").Range("A1").CopyFromRecordset myRS Set myCmd = Nothing myRS.Close: Set myRS = Nothing myCon.Close: Set myCon = Nothing End Sub
- nag0720
- ベストアンサー率58% (1093/1860)
"WHERE(((流通システム.入金日)>=#" & orderDate & "#) AND ((流通システム.入金日)<=#" & shipDate & "#)) AND ((流通システム.協力者 =""" & TextBox1 & """)) ;" としてみてください。