お世話になっています。Windows7、Delphi6Proを使って開発しています。ADOを使いAccessのデーターベースを利用しているのですがNull文字(空白文字)に悩まされtいます。例えば以下の様なプログラムを行うとNull文字(空白文字)が登録され以降空白が残り続けてしまいます。空白をクリアする方法はありませんでしょうか?
宜しくお願いします。
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
ADOQuery1.Edit;
ADOQuery1.FieldByName('FIELD1').AsString :='';
ADOQuery1.Post;
ADOQuery1.Next;
end;
ADOQuery1.Close;
以降空白が残り続けてしまいます
意味がよくわからないですね。いったんNullを指定すると、以降Editで文字が入力できなくなる?
それともnullを指定したのに、空白(スペース)埋められているということ?
プログラムではnullを保存したので正常な動作ではないかと。
かずさん、どうもです。データーは空白’ 'で埋められています。
通常、何もしないと''のままですが...
Accessデータベースは詳しく知りませんが、文字列はChar(固定長文字列)のようですね。
Varchar(可変長文字列)は指定できないのでしょうか?
SQLSeverであれは、上記のいづれかで文字列が指定できます。
余談ですが昔の汎用機やオフコンのデータベースは固定長文字列が当たり前でした。
RDBもこの仕様をいまだに使えます。PCの世界だと変な感じですが
Accessでは可変長文字列はありませんでした。あきらめるしかないですかね...
編集 削除よくある話だったような、nullとSpace(n字)を同一視するようなプログラムを書くことになりますね。
Space(n字)が" ”というような書き方だと、仕様が変わった時に不具合の原因になりやすいです。
ちょっと面倒(>_<)
COBOLだとSPACEと書くと、n個のSPACE文字でもよいので上記のようなことはありません。
固定長文字列自体がCOBOLの仕様に合わせたデータ形式です。
Accessのサイトを見ると一度でも編集をした文字には以降SPACE(1)文字が付加されるとの事です。これは編集があったかどうかを識別するものらしいですがDelphiのプログラム上ではTrim(文字フィールド)と書かなければならないので少し面倒です。それで質問したわけです。
編集 削除