- PR -

空文字列不許可のフィールドにデータをNull値にして保存したい

投稿者投稿内容
goo〜glen
会議室デビュー日: 2007/02/04
投稿数: 14
投稿日時: 2007-02-08 22:47
こんばんは。お世話になっています。
いつもこちらを参考にさせていただいています。

現行のAccessシステムから、Access+VB2005への移行を試行しています。
Accessの「空文字列(長さ 0 の文字列)の許可 = いいえ」のフィールドから読込んだデータテーブルに
連結されたTextBox・ComboBox・DataGridViewTextBoxColumn等の値をクリアし、Accessに再保存しようと
すると、「フィールド 'xxx' には、長さ 0 の文字列を格納できません。」とのエラーとなってしまいます。

エラーメッセージの意味・原因は理解しているつもりですが、Accessのフィールドプロパティを現行の
ままで、クリアしたデータをNull値としてAccessに再保存するにはどうしたらよいのでしょうか?

なお、ComboBoxは、DropDownStyleをDropDownListにしているため、このコントロールのKeyDownイベントで
「ComboBox.SelectedIndex = -1」や「ComboBox.SelectedValue = DBNull.Value」をしてました。

よろしくお願い致します。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-02-08 22:55
NULL を許可すればいい。

ってことじゃないの?
_________________
saki1208
ベテラン
会議室デビュー日: 2006/08/22
投稿数: 86
投稿日時: 2007-02-08 23:00
saki1208です。

データベース上の制約の問題ですから、プログラムで無理矢理ってのは不可能では...

ちなみに、Accessのデータベース上でフィールドのプロパティ「値要求」をいいえ
にすればできるはずです。
・主キーの場合はダメです。

ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2007-02-08 23:02
Access なら「値要求」に「いいえ」
goo〜glen
会議室デビュー日: 2007/02/04
投稿数: 14
投稿日時: 2007-02-08 23:34
Jittaさん、saki1208さん、ちゃっぴさん、早速のご返事ありがとうございます。

Accessヘルプでは、
Required/値要求:フィールドに値が必要かどうかを示します。・・・こちらがNull値に関係します。
AllowZeroLength/空文字列の許可:テーブルのフィールドで長さ 0 の文字列 ("") を入力してもよいかどうかを示します。
となっており、

問題のフィールドは、どちらも「いいえ」を選択しているフィールドです。(主キーでもありません。)
Accessフォームの場合は、データをBackSpaceなりDeleteでクリアすれば、問題なく保存できます。
(Null値と見なして保存してくれるのかな?  全く不明です。)
同様の事をWindowsFormでもできないものか? あるいは、保存直前やレコード(Row?)のValidating
イベントあたりで、空文字列だったらDBNull.Value?を代入とかできないものか? と質問させて
いただいた訳です。
(AccessならTextBox = NullがOKなんですが、TextBox.Text = DBNull.Valueは、エラーです。)

Accessが特殊ってことなんでしょうね?
もう一度、最小単位でテストしてみます。
saki1208
ベテラン
会議室デビュー日: 2006/08/22
投稿数: 86
投稿日時: 2007-02-08 23:41
saki1208です。

引用:

goo〜glenさんの書き込み (2007-02-08 23:34) より:
(AccessならTextBox = NullがOKなんですが、TextBox.Text = DBNull.Valueは、エラーです。)



確認はしてませんが...
連結フィールドなのでは?
(フォームのレコードソース、コントロールのコントロールソースを
指定していませんか)

非連結のテキストボックスでは、Nullの代入はエラーになるはずです。
>Access上での話です。

TextBoxのTextプロパティは文字列なのでNullはNGなのでは?



[ メッセージ編集済み 編集者: saki1208 編集日時 2007-02-08 23:43 ]
かあどきゃぷたー
ベテラン
会議室デビュー日: 2006/06/27
投稿数: 62
お住まい・勤務地: 東京都、ちょっとお隣がすぐ千葉県のところ
投稿日時: 2007-02-08 23:46
よく分からないですが、
当然、string.empty
はだめですよねぇ…
_________________
元 dbMagic使い
石油系会社で101NEO(Java簡易言語)
鉄道系システムではテスト仕様書作成でかんづめ
某大手ソフトウェア会社でシステム障害対応
今はTVCMで結構有名な会社で、
なぜか派遣なのにシステム管理者とネットワーク管理者を兼任
(別名
goo〜glen
会議室デビュー日: 2007/02/04
投稿数: 14
投稿日時: 2007-02-09 00:12
saki1208さん、かあどきゃぷたーさん、ご返事ありがとうございます。

saki1208さん
> 確認はしてませんが...
> 連結フィールドなのでは?
> (フォームのレコードソース、コントロールのコントロールソースを
> 指定していませんか)

> 非連結のテキストボックスでは、Nullの代入はエラーになるはずです。
> >Access上での話です。
こちらは、Accessフォームの話と理解して良いでしょうか
Accessの場合は、連結でも非連結でもNullの代入はOKです。
ちなみにAccessの場合、TextBox = Nullは、TextBox.Value = Nullと同じです。
(Textプロパティはないです。)

> TextBoxのTextプロパティは文字列なのでNullはNGなのでは?
その通りの、エラーになります。


かあどきゃぷたーさん
string.empty もダメでした。
「フィールド 'xxx' には、長さ 0 の文字列を格納できません。」とのエラーとなってしまいます

ちなみに、最小単位の保存直前に代入してみました。
Me.Fldテスト2TextBox.Text = String.Empty

Me.Validate()
Me.TblテストBindingSource.EndEdit()
Me.TblテストTableAdapter.Update(Me.TestDataSet.tblテスト)

スキルアップ/キャリアアップ(JOB@IT)