エラーについて

解決


ピッコロ  2005-09-27 14:37:30  No: 125751  IP: [192.*.*.*]

VBでデータベースのデータをテキストボックスに接続した際に、データベースにないデータをテキストボックスに入れた時に、メッセージボックスにより、「一致する名前がありません」と作りたいのですが、どうもうまくいきません。アドバイスお願いします。

編集 削除
特攻隊長まるるう  2005-09-27 14:54:12  No: 125752  IP: [192.*.*.*]

>VBでデータベースのデータをテキストボックスに接続した際に、
テキストボックスに表示する…なら想像もできるんですが、接続
という事は何か特別な設定をしているという事でしょうか?
特別な設定はもっと具体的なサンプルコードなどを提示して
いただかないと、こちらで想像するには無理があります。

>データベースにないデータをテキストボックスに入れた時に、メッセージボックス
テキストボックスのデータでデータベースを検索した結果の
レコード数が 0 であればメッセージを表示すれば良いのでは?

編集 削除
ピッコロ  2005-09-27 15:36:25  No: 125753  IP: [192.*.*.*]

すいません。今作っているのが

Public Sub Command1_Click()
   '**  レコードの検索、もし検索した名前がなければメッセージボックスにより
   '**  「一致する名前がありません」と出力
    
    Dim address As New ADODB.Connection
    Dim rs As New ADODB.Recordset 'データベースの内容を出力するレコードセット
    Dim SQL As String 'SQL文を保持
     
        'SQLを使い、データベースにあるデータを取りに行きます
        SQL = "SELECT * FROM address Where firstname = '"
        SQL = SQL & Text1.Text
        SQL = SQL & "'"
    
        Set address = New ADODB.Connection
        address.Open ("AddressBookConnection")
    
        Set rs = New ADODB.Recordset
        With rs
            .ActiveConnection = address
            .Source = SQL
            .CursorType = adOpenStatic
            .LockType = adLockOptimistic
            .Open
        End With
        Text1.Text = rs(1).Value
        Text2.Text = rs(3).Value
        Text3.Text = rs(4).Value
        Text4.Text = rs(5).Value
        
        On Error GoTo Error00
            rs.Close: Set rs = Nothing
            address.Close: Set address = Nothing
        Exit Sub
        
Error00:
    rs.Close: Set rs = Nothing
    address.Close: Set address = Nothing
    MsgBox(”一致するデータがありません”)
End Sub

なんですが・・・主にどこをなおしたいいのですか?

編集 削除
KG  2005-09-27 18:51:05  No: 125754  IP: [192.*.*.*]

最初にSQLでcountをとって0だったらメッセージを表示して
終了みたいな感じとかどうですかね:)

現状を利用するなら「フィールドがNull値なら」とかで

編集 削除
ピッコロ  2005-09-28 09:41:51  No: 125755  IP: [192.*.*.*]

KGさん!!すいません!!
もしNull値を使うならどこに記述するのがベストなんでしょうか?

編集 削除
もげ  2005-09-28 10:20:03  No: 125756  IP: [192.*.*.*]

.Open
のあとに、
.BOF と.EOFのどちらかがTrueなら、レコードが存在しないでしょう。
あとはCursorLocationとCursorTypeに依存しますが、
RecordCountプロパティが使用できるケースがありますね。

編集 削除
ピッコロ  2005-09-28 10:35:56  No: 125757  IP: [192.*.*.*]

今。編集してみました。

        Set rs = New ADODB.Recordset
        With rs
            .ActiveConnection = address
            .Source = SQL
            .CursorType = adOpenStatic
            .LockType = adLockOptimistic
            .Open
        End With
        
        If rs.BOF Then
            MsgBox ("一致する名前はありません")
        End If
        
        Text1.Text = rs(1).Value
        Text2.Text = rs(3).Value
        Text3.Text = rs(4).Value
        Text4.Text = rs(5).Value
        
        rs.Close: Set rs = Nothing
        address.Close: Set address = Nothing

End Sub

このようにしてみたのですが、一致する名前がなければ、メッセージボックスは表示したのですが、なぜかその後にエラーになってしまいます。
なぜでしょうか・・・?

編集 削除
名無し  2005-09-28 11:51:36  No: 125758  IP: [192.*.*.*]

どの行で何のエラーがでるかくらいは書くべきじゃないか?

編集 削除
LESIA  2005-09-28 12:04:10  No: 125759  IP: [192.*.*.*]

> Text1.Text = rs(1).Value
> Text2.Text = rs(3).Value
> Text3.Text = rs(4).Value
> Text4.Text = rs(5).Value
データがなければ、rs(1).Value等は存在しないので、エラーになります。

If rs.BOF Then
    'データなし
    MsgBox "一致する名前はありません"
Else
    'データあり
    Text1.Text = rs(1).Value
    Text2.Text = rs(3).Value
    Text3.Text = rs(4).Value
    Text4.Text = rs(5).Value
End If
と、しましょう。
また、MsgBoxは括弧はいりません。

編集 削除
ピッコロ  2005-09-28 12:56:49  No: 125760  IP: [192.*.*.*]

できました!!
本当にありがとうございました!!また、何かあれば
よろしく、おねがいします。

編集 削除
774  2005-09-28 13:20:20  No: 125761  IP: [192.*.*.*]

だから、何をどうしたら出来たのかを書かなくては、知識の共有が出来ないではないですか。
コメントを見る限りでは、LESIAさんの提示された修正を行っただけなのだろうけどさ・・・
それだけでは分からない人もいるだろうから、後進の為にも簡単でいいから解決方法を書くべきではないかな?(誰々さんの方法で解決しました。とかさ)
よく見たらVBのヴァージョンも開発環境も書いてないし・・・
ピッコロさんだけに限らず、最近多いよね〜こういう人。

編集 削除