Date型の変数について

解決


みき  2003-08-06 15:39:11  No: 107983  IP: [192.*.*.*]

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

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

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

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

編集 削除
lll  2003-08-06 16:06:12  No: 107984  IP: [192.*.*.*]

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

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

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

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

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

当然ですね。

編集 削除
みき  2003-08-06 16:41:16  No: 107985  IP: [192.*.*.*]

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

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

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

編集 削除
lll  2003-08-06 16:57:54  No: 107986  IP: [192.*.*.*]

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

insert into TABLE1 (FIELD_DATE) values (null)

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

編集 削除
みき  2003-08-06 17:19:07  No: 107987  IP: [192.*.*.*]

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

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

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

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

編集 削除
魔界の仮面弁士  2003-08-06 17:31:41  No: 107988  IP: [192.*.*.*]

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

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

編集 削除
だっちゃん  2003-08-06 17:35:11  No: 107989  IP: [192.*.*.*]

こんにちは。

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

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

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

ではなくて

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

が正しい書き方です。

編集 削除
みき  2003-08-06 17:51:27  No: 107990  IP: [192.*.*.*]

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

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

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

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

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

編集 削除
nanashi  2003-08-06 18:15:50  No: 107991  IP: [192.*.*.*]

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

編集 削除
魔界の仮面弁士  2003-08-07 02:10:20  No: 107992  IP: [192.*.*.*]

> 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-08 17:50:03  No: 107993  IP: [192.*.*.*]

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

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

編集 削除