DOBON.NET DOBON.NETプログラミング掲示板過去ログ

データベースの特定のフィールドを Null にしたい(Access)

分類:[.NET]

お世話になります。
クエリー文の問題という気もするのですが、こちらに投稿させてください。
Access 2000 のデータベースで、レコードの特定のフィールドの値を DBNull にするには、
どのように記述すればよろしいのでしょうか?

UPDATE T_MAIN SET F_FIELD1 = 'TEXT1', F_FIELD2 = '' WHERE F_NO = 62
という具合に書くと、 '' と連続しているのでエラーになってしまいます...。

「当たり前だ!」と怒られてしまいそうですが...。
困っています。
初歩的な質問で恐縮なのですが、何卒よろしくお願いいたします。
あわせて、長さ0の文字列をフィールドに入れる方法もおしえていただけるとうれしいです。
フィールドはテキスト形式になっています。

何卒よろしくお願いいたします。
■No1690に返信(Ken-Koさんの記事)

> Access 2000 のデータベースで、レコードの特定のフィールドの値を DBNull にするには、
> どのように記述すればよろしいのでしょうか?
> UPDATE T_MAIN SET F_FIELD1 = 'TEXT1', F_FIELD2 = '' WHERE F_NO = 62

UPDATE T_MAIN SET F_FIELD1 = 'TEXT1', F_FIELD2 = NULL WHERE F_NO = 62
で大丈夫かと思います。
これに失敗するようなら、F_FIELD2の「値要求」が「はい」になってるとか。

> という具合に書くと、 '' と連続しているのでエラーになってしまいます...。

的はずれ覚悟で・・・
・ '(シングルクォート)2つのつもりが "(ダブルクォート)になってる
・F_FIELD2 の「空文字列の許可」が「いいえ」になってる
・NO(オー)のつもりがN0(ゼロ)になってる

私が以前やらかしたミスですが、どんなもんでしょう?
ケメさん、ありがとうございます。

とりあえず、 Null について解決いたしました♪
長さ 0 の文字列は NO と書くのですか...。
こちらはまだ試していないのですが。

とにかくお礼です。
大変ありがとうございました。
また何かありましたら、どうかよろしくお願いいたします。
解決済み!
> とりあえず、 Null について解決いたしました♪
> 長さ 0 の文字列は NO と書くのですか...。
> こちらはまだ試していないのですが。

えっ!

> WHERE F_NO = 62
「ナンバー」フィールドを指定したつもりが
「エヌゼロ」フィールドを指定してたせいでエラーになって
半日近くも悩んだことがあるという話でして。

長さゼロの文字列は ''(シングルクォート2つ)でいいはずですよ。
解決済み!
ケメさん、引き続きお世話になります。
= Null で当面の問題は解決していたので、その後この部分が後回しになっていました。

> 長さゼロの文字列は ''(シングルクォート2つ)でいいはずですよ。

これだと、' を文字列フィールドに格納したいときの代用とみなされてしまうと思うのですが...。

---

C:\test.mdb にあるテーブル T_MAIN に F_NO, F_TXT1, F_TXT2 という3つのフィールドがあったとして。

Dim oleCnMain As OleDb.OleDbConnection = New OleDb.OleDbConnection
Dim oleCmdMain As OleDb.OleDbCommand ' OleDbCommand

Dim strSQL As String
Dim strTest1(1) As String
Dim strTest2(1) As String

strTest1(0) = "文字列1"
strTest2(0) = "文字列2"
strTest1(1) = ""
strTest2(1) = ""

Dim i As Integer
oleCnMain.ConnectionString = _
"Provider= Microsoft.Jet.OLEDB.4.0 ;" & _
"Data Source= C:\test.mdb ;" & _
"Persist Security Info=False" ' 接続文字列を作成して接続を開始する
oleCnMain.Open()
For i = 1 To 2
strSQL = "UPDATE T_MAIN SET F_TXT1 = '" & strTest1(i - 1) & "', F_TXT2 = '" & strTest2(i - 1) & "' WHERE F_NO = " & i
Debug.WriteLine(i & " _ " & strSQL)
oleCmdMain = New OleDb.OleDbCommand(strSQL, oleCnMain)
oleCmdMain.ExecuteNonQuery()
Try
Catch ex As Exception
Debug.WriteLine(ex.ToString())
End Try
Next
oleCnMain.Close()

これですと、2回目で実行時エラーが生じてしまいます。


---

1 _ UPDATE T_MAIN SET F_TXT1 = '文字列1', F_TXT2 = '文字列2' WHERE F_NO = 1
2 _ UPDATE T_MAIN SET F_TXT1 = '', F_TXT2 = '' WHERE F_NO = 2

"''" を "'" を入力すると解釈されたせいだとおもうのですが...。
どう修正したらよいのでしょうか?

DOBON.NET | プログラミング道 | プログラミング掲示板