Date型の変数について

解決


みき  2003-08-07 00:39:11  No: 107983

こんにちは、初めて投稿させていただきます。
どうぞよろしくお願いします。

VBにDate型の変数がありますが、初期値に"0:00:00"が
入っています。この変数になにも値が入らなかった場合は、
空文字(長さ 0 の文字列)の状態にしたいのですが、
そのようなことは可能でしょうか?

また、AccessとVBの連携もしているのですが、Accessの
日付時間型のフィールドに空文字をInsert
することはできるのでしょうか。
型が一致しません、というエラーが出てしまい困っております。(もしACCESSの質問は対象外ならすいません)

初歩的な質問で恐縮ですが、どうぞよろしくお願いいたします。


lll  2003-08-07 01:06:12  No: 107984

> VBにDate型の変数がありますが、初期値に"0:00:00"が
> 入っています。この変数になにも値が入らなかった場合は、
> 空文字(長さ 0 の文字列)の状態にしたいのですが、
> そのようなことは可能でしょうか?

無理です。
Date 型である以上、日時しか入れることはできません。

> また、AccessとVBの連携もしているのですが、Accessの
> 日付時間型のフィールドに空文字をInsertすることはできるのでしょうか。

無理です。
ただ、 Null を Insert できるようにすることは出来ます。

> 型が一致しません、というエラーが出てしまい困っております。

当然ですね。


みき  2003-08-07 01:41:16  No: 107985

lll様、回答ありがとうございます。

ためしにNULLをAccessの日付時間型のフィールドにInsertしてみたのですが、
やはりデータ型が一致しないというエラーが出てしまいます。
アクセスのフィールドデザインは
値要求  いいえ
インデックス  いいえ
としているのですが、NULL値を許可するような設定も見当たらなかったので
そのままにしております。

NULLについて勉強中ですが、もしご存知でしたらご教授のほどよろしく
お願いいたします。


lll  2003-08-07 01:57:54  No: 107986

> ためしにNULLをAccessの日付時間型のフィールドにInsertしてみたのですが、
> やはりデータ型が一致しないというエラーが出てしまいます。

insert into TABLE1 (FIELD_DATE) values (null)

という感じのクエリですよ。
もしかして、前後に ' をつけていませんか?


みき  2003-08-07 02:19:07  No: 107987

lllさん、ありがとうございます。

前後に’はつけていません。
SQL文の中身
insert into TABLE名(ID,S_DATE)VALUES(7,)
のようになっています。
しかし、INSERT  INTOのステートメント構文エラーと
でてしまいます。(すいません、エラーメッセージ
違っていました)

ちなみに、ACCESSへの接続はADOです
VBはVB6 SP6
ACCESSはACCESS2000を使用しております。

何度も恐縮ですが、もしおわかりになりましたら、どうぞ
よろしくお願いします。


魔界の仮面弁士  2003-08-07 02:31:41  No: 107988

『VALUES(7,)』では、文字通り、構文エラーになりますよね。

lllさんの回答にもあったように、『NULL』というキーワードを使って、
『VALUES(7,NULL)』という構文に変更してみてください。


だっちゃん  2003-08-07 02:35:11  No: 107989

こんにちは。

ただ単純なSQL文の間違いだと思いますよ。
NULLをINSERTしたいならきちんとNULLと宣言してあげないと駄目です。

なので、みきさんが書かれているSQL文

 insert into TABLE名(ID,S_DATE)VALUES(7,)

ではなくて

 insert into TABLE名(ID,S_DATE)VALUES(7,NULL)

が正しい書き方です。


みき  2003-08-07 02:51:27  No: 107990

lllさん、魔界の仮面弁士さん  ありがとうございます。
2つ前の私の文章は表現が適切ではありませんでした。

SQL文として投げていた内容は
strSql = "INSERT INTO TABLE名(ID,S_DATE)VALUES(" & intID & "," & Null & ")"
でした。
(ちなみにintIDはInteger型の変数です)
つまり、NULLも変数扱いをしてダブルコーテーションの外に
書いていました。

NULLをダブルコーテーションの中に書くことでエラーがなくなりました。

ありがとうございました。

あと、もしご存知でしたら、
NULLを変数のように、ダブルコーテーションの外に書く方法が
ありましたら、教えてください。
必ずしもNULLが入るとは限らないので、どのような値がはいっても
対応できるSQLが書きたいのです。
何度も申し訳ありませんが、よろしくお願いします。


nanashi  2003-08-07 03:15:50  No: 107991

SQL文自体は文字列なので、文字列変数の中に『NULL』と入れておけば良いんじゃないですか?


魔界の仮面弁士  2003-08-07 11:10:20  No: 107992

> strSql = "INSERT INTO TABLE名(ID,S_DATE)VALUES(" & intID & "," & Null & ")"
> でした。
> (ちなみにintIDはInteger型の変数です)

そういう場合は、Format関数が利用できるかも知れません。

例えば、Variant型変数 V があったとして、
  S = Format(V, "@;NULL")
といったコードを書けば、
  V = Null  の時は、S = "NULL"
  V = "TEST"の時は、S = "TEST"
  V = "123" の時は、S = "123"
  V = 123   の時は、S = "123"
  V = -345  の時は、S = "-345"
  V = 0     の時は、S = "0"
などと変換されます。


みき  2003-08-09 02:50:03  No: 107993

こんにちは、ご回答くださったnanashiさん、魔界の仮面弁士さん
ありがとうございました。お返事遅くなってしまい申し訳ありません。

文字列変数はDate型だったので、NULLを入れることが出来なかったのですが、
SQL文作成するのに、String型の文字列を条件分岐で後付けしていく方法をとり、
NULLも固定値として実装しました。
時間に余裕が出来ましたら、魔界の仮面弁士さんが紹介してくださった
Format関数を是非ためし、報告したいと思います。
どうもありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加