• ベストアンサー

iniファイルとの比較(iniファイル操作)

 初めまして私はVB6.0の初心者でVB6.0について勉強しています。現在以下のようなiniファイル操作について分からないことがあります。 ・プログラム内容 テキストボックスにログインID(例えばenshu)を入力しOKボタンを押して、iniファイル(例えばrenshu.ini)にある情報と照合してもしiniファイルに無かったら「ログインできません」というメッセージボックスを出すプログラム。 条件 ・ フォームにテキストボックス(Text1.Text)とコマンドボタン(OKボタン)がある ・ Iniファイルの形式(renshu.ini) IDNO(セクション名) OK_ID(キー名)1 = “enshu”(ログインID) OK_ID(キー名)2 = “ren”(ログインID) OK_ID(キー名)3 = “shu”(ログインID) 上のような形式が不特定多数ある ・ Iniファイルの保存場所 c:\work\renshu.ini 私の場合以下のように書きました。 Private Sub OK_Click() 'OKボタンがクリックされたら If  Text1.Text <> GetIniString("IDNO", "OK_ID", "c:\work\renshu.ini") Then '入力したログインIDがiniファイルに無い場合 'メッセージ表示 MsgBox "ログインできません" End If End Sub としましたがメッセージボックスが表示されません。なぜなのでしょうか。教えてください。宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.7

もし、何人だろうが挙げられている方法で処理するなら、例えば… Dim i as Integer 'カウンタ Dim tmpID as String 'IDテンポラリ Dim idExists as Boolean 'ID存在フラグ idExist = False 'ID未発見状態に i = 0 'カウンタ初期化 Do  i = i + 1  tmpID = GetIniString("IDNO", "OK_ID" & CStr(i), "c:\work\renshu.ini")  'Iniにキー値が存在しなかった場合はGetIniStringの戻りが""になるとして、  'その場合は処理終了とする  If tmpID = "" Then Exit Do  '入力がIniのIDにヒットしたらフラグを立ててループから抜ける  If Text1.Text = tmpID Then   idExists = True   Exit Do  End If Loop 'ループ後にIDが未発見ならメッセージ出力 If Not idExists Then  MsgBox "ログインできません" End If …こんな感じので どうでしょ? テストはしてませんが… これの前提条件として、OK_IDn の n は、必ず1から連番で存在しなければいけません。 (抜け番号は存在してはならない) また、必ずログインIDは1文字以上登録されていなければいけません。 (抹消とかの対応のために、IDとして使用不可な文字を決めておいて、  その文字を抜け番の判定に使う、なんて方法も考えられますが) あと、上のソースではインデントに全角Space使ってますので変換してください。 でも…あまり多くなるようでしたら、やっぱりDBの使用をお勧めしますね。 管理大変ですし。

paramia
質問者

お礼

 K-Sogacchiさん、ご回答ありがとうございます。 あと確認の意味で、質問があります。宜しくお願いします。 >Dim i as Integer 'カウンタ このカウンタとはOK_IDn のnをさしているのでしょうか。 >Dim tmpID as String 'IDテンポラリ このIDテンポラリとはどういうことでしょうか。テキストボックスに入力したIDが一時的に保存状態になっているということでしょうか。 >idExist = False 'ID未発見状態に これは、入力したIDがiniファイルに無かった場合という考え方で合っているでしょうか。 初歩的な質問ですみません。

その他の回答 (12)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

GetIniStringはDeclare宣言した関数なのでしょうか? VB6の標準装備の関数ではないと思いますが ・・・ GetIniStringの中身の詳細を投稿しましょう もし WinAPIの GetPrivateProfileStringを使っているなら キー名は OK_ID1 などの完全名が必要だろうと思いますよ 本当にGetIniStringで取得したデータと Text1.Textが同一なのかどうかを簡単にチェックするなら Dim ss as String ss = GetIniString("IDNO", "OK_ID", "c:\work\renshu.ini") if Text1.Text <> ss then といったん変数に代入しておいて比較してみましょう

paramia
質問者

お礼

続けざまで申し訳ございません。 >本当にGetIniStringで取得したデータと Text1.Textが同一なのかどうかを簡単にチェックするなら Dim ss as String ss = GetIniString("IDNO", "OK_ID", "c:\work\renshu.ini") if Text1.Text <> ss then といったん変数に代入しておいて比較してみましょう  試しに上記のようにやってみたら、GetIniStringで取得したデータと Text1.Textは同一ではありませんでした。一体何が原因なのでしょうか。

paramia
質問者

補足

ご回答ありがとうございます。 以下のような感じでよろしいでしょうか。 >GetIniStringの中身の詳細を投稿しましょう Public Function GetIniString( _ ByVal garSection As String, _ ByVal garKey As String, _ ByVal garFileName As String _ ) As String Dim llngRet As Long Dim lstrValue As String * 255 llngRet = GetPrivateProfileString(garSection, garKey, "not found", lstrValue, 255, garFileName) GetIniString = Left$(lstrValue, InStr(lstrValue, vbNullChar) - 1) End Function

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

(1)iniファイルの中身 セクション名は[]で囲みます。質問では裸で記述されているようです。 (2)パラグラフの指定 iniファイルではOK_ID1、OK_ID2、…なのでは? プログラムからは"OK_ID"としか指定していません。1や2はどうなった?

paramia
質問者

お礼

ご回答ありがとうございます。 [IDNO](セクション名) >iniファイルではOK_ID1、OK_ID2、…なのでは? はいそうです。 OK_ID1(キー名) = “enshu”(ログインID) OK_ID2(キー名) = “ren”(ログインID) OK_ID3(キー名) = “shu”(ログインID) 上記のように書きたかったんです。 >1や2はどうなった? これはOK_ID1とOK_ID2のことを言っているのでしょうか?

関連するQ&A