エラーについて

解決


ピッコロ  2005-09-27 23:37:30  No: 125751

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


特攻隊長まるるう  2005-09-27 23:54:12  No: 125752

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

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


ピッコロ  2005-09-28 00:36:25  No: 125753

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

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-28 03:51:05  No: 125754

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

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


ピッコロ  2005-09-28 18:41:51  No: 125755

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


もげ  2005-09-28 19:20:03  No: 125756

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


ピッコロ  2005-09-28 19:35:56  No: 125757

今。編集してみました。

        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 20:51:36  No: 125758

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


LESIA  2005-09-28 21:04:10  No: 125759

> 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 21:56:49  No: 125760

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


774  2005-09-28 22:20:20  No: 125761

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加