VBでデータベースのデータをテキストボックスに接続した際に、データベースにないデータをテキストボックスに入れた時に、メッセージボックスにより、「一致する名前がありません」と作りたいのですが、どうもうまくいきません。アドバイスお願いします。
>VBでデータベースのデータをテキストボックスに接続した際に、
テキストボックスに表示する…なら想像もできるんですが、接続
という事は何か特別な設定をしているという事でしょうか?
特別な設定はもっと具体的なサンプルコードなどを提示して
いただかないと、こちらで想像するには無理があります。
>データベースにないデータをテキストボックスに入れた時に、メッセージボックス
テキストボックスのデータでデータベースを検索した結果の
レコード数が 0 であればメッセージを表示すれば良いのでは?
すいません。今作っているのが
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
なんですが・・・主にどこをなおしたいいのですか?
最初にSQLでcountをとって0だったらメッセージを表示して
終了みたいな感じとかどうですかね:)
現状を利用するなら「フィールドがNull値なら」とかで
KGさん!!すいません!!
もしNull値を使うならどこに記述するのがベストなんでしょうか?
.Open
のあとに、
.BOF と.EOFのどちらかがTrueなら、レコードが存在しないでしょう。
あとはCursorLocationとCursorTypeに依存しますが、
RecordCountプロパティが使用できるケースがありますね。
今。編集してみました。
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
このようにしてみたのですが、一致する名前がなければ、メッセージボックスは表示したのですが、なぜかその後にエラーになってしまいます。
なぜでしょうか・・・?
どの行で何のエラーがでるかくらいは書くべきじゃないか?
> 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は括弧はいりません。
できました!!
本当にありがとうございました!!また、何かあれば
よろしく、おねがいします。
だから、何をどうしたら出来たのかを書かなくては、知識の共有が出来ないではないですか。
コメントを見る限りでは、LESIAさんの提示された修正を行っただけなのだろうけどさ・・・
それだけでは分からない人もいるだろうから、後進の為にも簡単でいいから解決方法を書くべきではないかな?(誰々さんの方法で解決しました。とかさ)
よく見たらVBのヴァージョンも開発環境も書いてないし・・・
ピッコロさんだけに限らず、最近多いよね〜こういう人。
ツイート | ![]() |