- ベストアンサー
AccessVBAでInputBoxの値をSQLに組み込むには
AccessVBA超初心者です。 テーブル上の項目の受付日時をInputBoxよりGetして、 フラグが1であるものに一律その値をセットしたいと思っているのですが、なかなか上手くいきません。 おそらくSQLの中に直接パラメタを入れられないのだと思いますが、どうしていいかわかりません。 すみませんが、よろしくお願いいたします。 ----------------------------------------------- Public Sub cmd_1_Click() Dim cmdReset As New ADODB.Command Dim cmdResult As New ADODB.Command Dim strDate As String cmdReset.ActiveConnection = CurrentProject.Connection cmdResult.ActiveConnection = CurrentProject.Connection cmdReset.CommandText = "UPDATE テーブル SET 受付日時='';" cmdReset.Execute strDate = InputBox(prompt:="処理日付を入力して下さい。(yyyy/mm/dd)", Title:="処理日の入力") cmdResult.CommandText = "UPDATE テーブル SET 受付日時 = strDate WHERE フラグ='1' " cmdResult.Execute MsgBox "終了" End Sub ------------------------------------------
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> '"&strDate&"'のシングルクォーテーションはどういった意味なのでしょうか? では最終的にどんなSQL文が出来上がるかを比べてみましょう。 なし:・・・ set 受付日時=2005/02/02 where ・・・ あり:・・・ set 受付日時='2005/02/02' where ・・・ 分かるだろうか。SQL文は、プログラム側から見ると「DBMSが解析して解釈して実行する文字列」なのだが、DBMSから見ると「受付日時」も「2005/02/02」も「'2005/02/02'」も意味が違うトークンだ。 ありていに言えば「2005/02/02」はAccess、SQL Server、Oracle、PostgreSQLのいずれでも「2005割る2割る2の結果の数値」となる。それが2005になるのか、501.25になるのかは分からんが、とにかく数値だ。 対して「'2005/02/02'」は「にいぜろぜろごすらっしゅぜろにすらっしゅぜろに」という文字列として解釈される。 このように、プログラム中での文字列とSQL文での文字列を強く意識していないと不具合が起きる場合があるね。 > 日付チェックはどのように・・・。 基本はIsDate関数を使えば良いだろう。ここで、入力内容が例えば「2/2」などのように、年が指定されていない時に現在の念を補完してやるなどの対応が必要になるかも知れないね。 > InputBoxでなく、テキストボックスから・・・同様の方法でよい・・・。 InputBoxの結果も、テキストボックスの内容もAccessVBA上で「文字列」なので同様の方法で良いよ。
その他の回答 (2)
- anmochi
- ベストアンサー率65% (1332/2045)
cmdResult.CommandText = "UPDATE テーブル SET 受付日時 = strDate WHERE フラグ='1' " この行が問題だ。書き直すとこうなる。 cmdResult.CommandText = "UPDATE テーブル SET 受付日='" & strDate & "' WHERE フラグ='1' " 割愛されているだけかも知れないが、isDate()などで日付の形になっているかどうかのチェックとともに、Format$(strDate, "yyyy/mm/dd")などとしてやるとなお良いかも知れない。
お礼
すみません、更新する欄を間違えてしまいました。 ---------------------------------------------- ありがとうございます。'"&strDate&"'のシングルクォーテーションはどういった意味なのでしょうか?これがないとどうもうまくいかないところをみると重要ですよね? また、大変恐縮ですが日付チェックはどのようにすればよいのでしょう。重ね重ね質問して申し訳ないのですが、InputBoxでなく、テキストボックスから入力させたい場合は同様の方法でよいのでしょうか。
補足
ありがとうございます。'"&strDate&"'のシングルクォーテーションはどういった意味なのでしょうか?これがないとどうもうまくいかないところをみると重要ですよね? また、大変恐縮ですが日付チェックはどのようにすればよいのでしょう。重ね重ね質問して申し訳ないのですが、InputBoxでなく、テキストボックスから入力させたい場合は同様の方法でよいのでしょうか。
- mataro
- ベストアンサー率32% (18/55)
こんにちは コマンドを作成する際に変数の内容をセットする際は、テキスト内に変数を入れるのではなく、 以下のようにテキストと変数をくっつけるような感じにします cmdResult.CommandText = "UPDATE テーブル SET 受付日時 = " & strDate & " WHERE フラグ='1' " で出来ると思います。
お礼
ありがとうございます。 できました!今後ともよろしくお願いいたします。
お礼
ありがとうございます。よくわかりました! 今後ともよろしくお願いいたします。