VB6+Access2000でデータベースの操作を学習しています。
次のソースで日付による抽出(検索)をしたいのですが
全然うまくいきません。
ネットやら本で参考になる情報を探してますが、もう
3日になります。
どなたかご教授よろしくお願いします。
抽出結果は DBGrid への出力です
Private Sub Command1_Click()
Dim sDate As String 'テキストボックスからの入力(形式yyyy/mm/dd)
Dim ssDate As Date '日付型格納用
Dim search As String 'SQL検索用
sDate = Text1.Text
ssDate = CDate(MyDate)
sarchi = "select * From 従業員情報テーブル Where 生年月日 = ssDate"
Data1.RecordSource = search
Data1.Refresh
End Sub
VBではなく、単純にSQLの話になりますが、
sarchi = "select * From 従業員情報テーブル Where 生年月日 = ssDate"
生年月日のフォーマットも(YYYY/MM/DD)形式に変換してから比較してください。
ORACLEの書き方で申し訳ないですが、
WHERE TO_CHAR(生年月日,"YYYY/MM/DD") とすべきでは?
> Dim sDate As String 'テキストボックスからの入力(形式yyyy/mm/dd)
Jet SQL における日付書式は、
2005/02/18
ではなく、
#2/18/2005#
という形式が正式な構文となります。
〈Microsoft JET SQL リファレンスからの引用〉
| 日付リテラルを指定する場合は、日本語版の Microsoft Jet
| データベース エンジンであっても米国形式で指定する必要が
| あります。たとえば、1996 年 5月 10日を指定する場合は、
| 5/10/96 のように米国形式で表します。日付は、必ず次の
| 例のように数値記号 (#) で囲んでください。
|
| たとえば、1996 年 5月 10日付けのレコードを米国語の
| データベースの中で検索する場合は、次のような SQL
| ステートメントを使用します。
|
| SELECT *
| FROM 注文
| WHERE 出荷日 = #5/10/96#;
> Dim search As String 'SQL検索用
> sarchi = "select * From 従業員情報テーブル Where 生年月日 = ssDate"
変数名が違いますけど……。
とりあえず、
search = "SELECT * FROM 従業員情報テーブル WHERE 生年月日=#" & Format(ssDate, "MM\/dd\/yyyy") & "#"
のようにしてみてください。(/ではなく\/を使う必要がある事に注意)
なおJetの日付型は、(VBの日付型と同様に)時刻情報まで保持しています。
もし、生年月日フィールドに、(00:00:00 以外の)時刻情報が含まれて
いるのであれば、SQLの比較条件に手を加える必要があります。
ありがとうございます!勉強になりました!!これからもよろしくお願いします!!!
http://www.bcap.co.jp/hanafusa/vbbbs/wforum.cgi?mode=allread&no=2192&page=0
ツイート | ![]() |