[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/11/27(Mon) 11:02
投稿者名:でぃあす
Eメール:
URL :
タイトル:
VBでSQL文の日付の書式について
現在、VB6.0とSQL SERVER2000を使用して開発をしています。
VB開発して2年目です(5年間のブランクがあります)

質問したいことは、Insert文(Update文)を用いるときに日付型のデータを登録しようとすると
画面で入力した日付と登録した日付が違ってしまっています。

strsql = "INSERT INTO テーブル名(ID, NameKanji, Address, BirthDay)"
strsql = strsql & VALUES('" & strID & "' , '" & strName & "' , '" & strAddress & "' , "  
strsql = strsql & datBirthDay

とInsert文を書いています。(例みたいなものですが)

DB上の型は以下の様になっています。

DB上の型
ID    (char) 10
NameKanji (varchar) 120
Address   (varchar) 120
BirthDay  (datetime)

画面入力
ID = 123467890
名前 = テスト 太郎
住所 = テスト3丁目
生年月日 = 1979/01/25

実行したときに生年月日が入力した日付と違う日付が登録されてしまいます。
実際に登録されている生年月日・・・1900/03/26
datBirthDayはDate型で宣言しています。

環境
OS:WinXP
VB6.0 SP6
SQL Server2000
ADO接続を使用しています。

以上ですが、よろしくお願いします。

投稿時間:2006/11/27(Mon) 11:41
投稿者名:neptune
Eメール:
URL :
タイトル:
Re: VBでSQL文の日付の書式について
こんにちは

原因は判りませんが、
>1979/01/25
が計算されて
1979/01/25=79.16
になっていますね。

文字列でデータを取り込んで、日付リテラルで囲んだらいかがですが?
これなら間違いないと思いますが?

投稿時間:2006/11/27(Mon) 13:06
投稿者名:でぃあす
Eメール:
URL :
タイトル:
Re^2: VBでSQL文の日付の書式について
1979/01/25を#1979/01/25#としてみました。

strsql = "INSERT INTO テーブル名(ID, NameKanji, Address, BirthDay)"
strsql = strsql & VALUES('" & strID & "' , '" & strName & "' , '" & strAddress & "' , "  
strsql = strsql & "#" strBirthDay & "#"

実行をしてみてOn Error Resume Nextでエラーに引っかかり、
『このコンテキストでは名前'#1979'は許可されません。定数、式または変数だけがここでは許されます。列名は許可されません。』
とのエラーメッセージが表示されてしまいます。

投稿時間:2006/11/27(Mon) 13:24
投稿者名:
Eメール:
URL :
タイトル:
Re^3: VBでSQL文の日付の書式について
そのエラーはこれのせいでは?

> strsql = strsql & "#" strBirthDay & "#"

文字列を結合する「&」が抜けてますよね?

投稿時間:2006/11/27(Mon) 13:30
投稿者名:大吉末吉
Eメール:
URL :
タイトル:
Re^3: VBでSQL文の日付の書式について
> 1979/01/25を#1979/01/25#としてみました。

SQLServerの「方言」では、日付型は「#〜#」で無く、「'〜'」で括るんだったような・・・

#うろ覚えです。確認しようとあちこち探しましたが、ちゃんとした資料が見つかりませんでした。
#間違っていたらごめんなさい。

投稿時間:2006/11/27(Mon) 13:39
投稿者名:でぃあす
Eメール:
URL :
タイトル:
Re^4: VBでSQL文の日付の書式について

> SQLServerの「方言」では、日付型は「#〜#」で無く、「'〜'」で括るんだったような・・・
『#〜#』ではなく『'〜'』で括りましたらうまくいきました。

大吉末吉さん、ありがとうございました。