tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルINIの書込み
記事No11352
投稿日: 2008/02/08(Fri) 11:40
投稿者マジック
よろしくお願いします。

テキストボックスの値をINIファイルに書き込んでいるのですが、テキストボックスの値が
無い時に、どうやらINIファイルのキーごと消えるみたいです。

自分で考えたのは、テキストボックスの値が無い時に、IF文で書込みのステートメントを
飛ばすというものですが、他に良い方法はないでしょうか。

[ツリー表示へ]
タイトルRe: INIの書込み
記事No11353
投稿日: 2008/02/08(Fri) 12:37
投稿者花ちゃん
> テキストボックスの値をINIファイルに書き込んでいるのですが、テキストボックスの値が
> 無い時に、どうやらINIファイルのキーごと消えるみたいです。

それが仕様です、それで何か不都合がでているのでしょうか?
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpsysinf/html/_win32_writeprivateprofilestring.asp

[ツリー表示へ]
タイトルRe: INIの書込み
記事No11354
投稿日: 2008/02/08(Fri) 12:37
投稿者魔界の仮面弁士
> テキストボックスの値をINIファイルに書き込んでいるのですが、テキストボックスの値が
> 無い時に、どうやらINIファイルのキーごと消えるみたいです。

恐らく、現在のコードは、
 strNewValue = Text1.Text
 Call WritePrivateProfileString(strSection, strKey, strNewValue, strFile)
となっているかと思いますが、それを
 strNewValue = Text1.Text & vbNullChar
 Call WritePrivateProfileString(strSection, strKey, strNewValue, strFile)
に変更してみてください。


TextBox の内容が空だった場合に、Text プロパティが返す値が、
"" ではなく vbNullString である点に注意してください。

[ツリー表示へ]
タイトルRe^2: INIの書込み
記事No11356
投稿日: 2008/02/08(Fri) 13:05
投稿者花ちゃん
strNewValue = Text1.Text では、削除されるが
strNewValue = Text1.Text & "" なら 削除されないってのも何か変な気が。

[ツリー表示へ]
タイトルRe^3: INIの書込み
記事No11358
投稿日: 2008/02/08(Fri) 14:14
投稿者魔界の仮面弁士
> strNewValue = Text1.Text では、削除されるが
> strNewValue = Text1.Text & "" なら 削除されないってのも何か変な気が。

それが仕様です、それで何か不都合がでているのでしょうか? という返しは冗談として。


RDO 1.0 では、列に vbNullString を渡すと致命的なエラーになる事があったので、
 'rs("ID").Value = Text1.Text       'これは使用しない
 rs("ID").Value = Text1.Text & ""   'こちらを推奨
のように記述していた時期(VB4 当時)がありました、当方では。(^^;

[ツリー表示へ]
タイトルRe^4: INIの書込み
記事No11361
投稿日: 2008/02/08(Fri) 15:29
投稿者よねKEN
> > strNewValue = Text1.Text では、削除されるが
> > strNewValue = Text1.Text & "" なら 削除されないってのも何か変な気が。
>
> それが仕様です、それで何か不都合がでているのでしょうか? という返しは冗談として。

TextプロパティがvbNullStringを返すというのは初めて知りました。驚きですね。
Windows APIの文字列引数にvbNullStringを渡した場合、NULLポインタを渡したことになるので、

WritePrivateProfileString
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpsysinf/html/_win32_writeprivateprofilestring.asp

の以下の記述にある理由で、キーが削除されますね。

>lpString
>   ファイルに書き込むべき、NULL で終わる文字列へのポインタを指定します。NULL を指定す
>   ると、この関数は、lpKeyName パラメータで指定されたキーを削除します。

vbNullStringがNULLポインタとして扱われる話は以下に記載があります。

Windows API に Visual Basic から NULL 文字列を渡す方法
http://support.microsoft.com/kb/162622/ja
#機械翻訳のため変な日本語ですが、

[ツリー表示へ]
タイトルRe^5: INIの書込み
記事No11362
投稿日: 2008/02/08(Fri) 16:04
投稿者マジック
ご解答有難うございます。

話が盛り上がってるみたいですね。

strNewValue = Text1.Text & vbNullCharこの様にして、解決しました。
有難うございます。

[ツリー表示へ]