エクセルVBAでアクセスデータベースを抽出して読み込む方法
アクセスで見積の提出情報のデータベースを作成しています。
このデータベースをエクセルのフォームで日付指定し抽出したいと考えております。
データベースの全てを読み込む事には成功したのですが、
いざフォームを作成し日付を入力。
実行したのですが、日付の構文エラーとなってしまいました。
抽出条件を表すSQLステートメントがおかしいのかもしれません。
どこを訂正したらよいのでしょうか?
Private Sub CommandButton1_Click()
Dim rcs As ADODB.Recordset
Dim cnStr As String, sqlStr As String
Dim sday As Date
sday = TextBox1.Text
'一覧のクリア、始点へ移動
Range("A5:N300").Select
Selection.ClearContents
Range("A5").Select
'データベースの保存場所
cnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Accexl\見積予定.mdb"
'検索条件
sqlStr = " SELECT * FROM 予定表 WHERE 作成日 = # sday #"
'データベースの読込、コピー、閉じる
Set rcs = New ADODB.Recordset
rcs.Open Source:=sqlStr, ActiveConnection:=cnStr, CursorType:=adOpenStatic
ActiveCell.CopyFromRecordset rcs
rcs.Close
Set rcs = Nothing
Range("C:C,E:E").Select
Selection.NumberFormatLocal = "h:mm;@"
Range("B:B,D:D").Select
Selection.NumberFormatLocal = "m/d;@"
Range("A3").Activate
End Sub
フォームの中にテキストボックス(日付を入力)、コマンドボタン(検索実行)を配置しています。
テキストボックスには日付表示するようにしています。
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim ret As Long
ret = 0
If KeyCode = vbKeyReturn Or KeyCode = vbKeyTab Then
With TextBox1
.Text = Replace(.Text, "/", "")
If IsNumeric(.Text) Then
If IsDate(Format(.Text, "0000""/""00""/""00")) Then
.Text = Format(.Text, "0000""/""00""/""00")
Else
ret = 1
End If
Else
ret = 1
End If
If ret = 1 Then
MsgBox "日付指定です"
KeyCode = 0
End If
End With
End If
End Sub
No.1
- 回答日時:
> 作成日 = # sday #
Accessのクエリーの中ではこれでもOKですが、これは方言なので、他の言語から実行するなら、エラーになりますね。
とりあえず動くようにするなら
Dim sday As String 'Date にしない
sday = TextBox1.Text
(中略)
'フォームの日付の文字列をSQL側の関数で日付変換する
sqlStr = " SELECT * FROM 予定表 WHERE 作成日 = cDate('" & strday & "')"
(以下略)
SQLインジェクションを回避する上では、上記の方法ではなくパラメータバインドを使用する方がベターですが、フォーム側で必ず暦日チェックがされているなら、まあOKでしょう。
(久しく書いていないのでADOでの記述を忘れましたw)
早速のご返事ありがとうございます。
作成日 = # sday # は方言
なるほど勉強になります。
今仕事で使っているソフトがDOSなのです。
不便なので新しいソフトを探してはいるのですが、
なかなか難しいです。
そこで、何とか自分で作れないものだろうかと、いろいろなサイトを見て勉強中です。
まずは簡単なものから挑戦しています。
また解らない事があったら教えてください。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「24日の0時」って・・・
-
「時間」、「期日」、「日付」...
-
日付の大小の表現
-
差し込み印刷に当日の日付が入...
-
回覧板の日付について質問です...
-
エクセル マクロ 名前を付けて...
-
履歴書の日付間違いで落ちますか。
-
エクセルで6ヵ月後を自動入力で...
-
エクセルで日付別にシートを分...
-
日付の最大値を求めるには
-
アクセスvba 複数のイベントを...
-
子機から親機に日付と時刻が転...
-
EXCELで日付を****年上期、****...
-
2つの日付の中間の日付 エク...
-
ピボットテーブルの日付フィル...
-
Accessでの時間別集計について
-
本日の日付を知る方法は、何が...
-
日付以外のデータを抽出したい...
-
ACCESS 今日の日付のデータ抽出...
-
エクセルで日付け表示で、明治...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「24日の0時」って・・・
-
日付の大小の表現
-
「時間」、「期日」、「日付」...
-
回覧板の日付について質問です...
-
差し込み印刷に当日の日付が入...
-
履歴書の日付間違いで落ちますか。
-
エクセル マクロ 名前を付けて...
-
Excelについて
-
パソコンで購入したデーターが...
-
2つの日付の中間の日付 エク...
-
Excelでヘッダに前日の日付を表...
-
エクセルで日付け表示で、明治...
-
エクセルで日付別にシートを分...
-
Excelで1週間毎の集計(今週と...
-
エクセルで6ヵ月後を自動入力で...
-
マクロボタンを押すと、ファイ...
-
差込印刷 縦書きで和暦(漢数...
-
日付以外のデータを抽出したい...
-
EXCELで日付を****年上期、****...
-
Facebookで投稿日時を変更できない
おすすめ情報