はじめまして。VBを始めてまだ間もない50才の超ビギナーです。どうしても自己解決できないので、お知恵を拝借したく、書き込みました。長文で読みづらいかもしれませんがよろしくお願いします。
data.mdbの中の個人情報テーブルから複数の条件(氏名、住所、電話番号)で検索してレコードセットを取得しようとしています。が、下記のコードで実行すると、テーブルにある全てのデータがデータグリッドに表示されてしまい、必要とするデータだけを抽出することが出来ません。 「メニュー / デバッグ」の「カーソルの直前までを実行」 を実施して変数に入っている文字を調べてみると
strsql = "select * from 個人情報 where '" & criteria & "'" の部分が,検索条件が氏名と電話番号の場合を例にとると、
strsql = "select * from 個人情報 where '氏名 = 山田 太郎 and 電話番号 = 0123456789'" という様になっています。前後の ' を何とかはずそうとしましたが、うまく出来ません。
データは全てテキストです。VB6を使用しています。よろしくお願いします。
Private cn As ADODB.Connection
Private rs As ADODB.Recordset
Dim strsql As String
Dim tt As String
Dim tn As String
Dim ta As String
Dim rc As String
Dim key(1 To 3) As String
Dim i As Integer
Dim crlen As String
Dim criteria As String
----------------------------------------------------------------
Private Sub Form_Load()
Set cn = New ADODB.Connection
cn.ConnectionString = "provider=microsoft.jet.OLEDB.4.0;" _
& "data source=c:\data.mdb"
cn.Open
End Sub
---------------------------------------------------------------
Private Sub cmd1_Click()
tt = Text1.Text
tn = Text2.Text
ta = Text3.Text
If tt = "" Then
key(1) = ""
Else
key(1) = "電話番号=" & tt
End If
If tn = "" Then
key(2) = ""
Else
key(2) = "氏名=" & tn
End If
If ta = "" Then
key(3) = ""
Else
key(3) = "住所 =" & ta
End If
criteria = ""
For i = 1 To 3
If key(i) = "" Then
'
Else
criteria = criteria & key(i) & " and "
End If
Next i
If criteria = "" Then
Exit Sub
End If
crlen = Len(criteria)
criteria = Left(criteria, crlen - 5) ’最終の" and "を取り除く
strsql = "select * from 個人情報 where '" & criteria & "'"
Set rs = New ADODB.Recordset
rs.ActiveConnection = cn
rs.Source = strsql
rs.CursorType = adOpenStatic
rs.LockType = adLockReadOnly
rs.Properties("irowsetidentity") = True
rs.Open
Set dg1.DataSource = rs
rc = rs.RecordCount
End Sub
50才ならまだこの発想はできるはず…1個1個付ければ良いんです。
頭を柔らかくしましょう。まず初心者は効率より1手順ずつ自分の力量で
できる範囲で実現させることです。(まぁ、効率はずっと意識しておくべき
項目ではありますが…)
[VB6.0]
'---------------------------------------------------------------
Private Sub cmd1_Click()
Dim rs As ADODB.Recordset
Dim tt As String
Dim tn As String
Dim ta As String
Dim criteria As String
Dim strsql As String
Dim Key(3) As String
Dim crlen As Integer
Dim i As Integer
Dim rc As Integer
tt = Text1.Text
tn = Text2.Text
ta = Text3.Text
If tt = "" Then
Key(1) = ""
Else
' Key(1) = "電話番号=" & tt
Key(1) = "電話番号='" & tt & "'"
End If
If tn = "" Then
Key(2) = ""
Else
' Key(2) = "氏名=" & tn
Key(2) = "氏名='" & tn & "'"
End If
If ta = "" Then
Key(3) = ""
Else
' Key(3) = "住所 =" & ta
Key(3) = "住所 ='" & ta & "'"
End If
criteria = ""
For i = 1 To 3
If Key(i) = "" Then
'
Else
criteria = criteria & Key(i) & " and "
End If
Next i
If criteria = "" Then
Exit Sub
End If
crlen = Len(criteria)
criteria = Left(criteria, crlen - 5) '最終の" and "を取り除く
' strsql = "select * from 個人情報 where '" & criteria & "'"
strsql = "select * from 個人情報 where " & criteria
Set rs = New ADODB.Recordset
rs.ActiveConnection = cn
rs.Source = strsql
rs.CursorType = adOpenStatic
rs.LockType = adLockReadOnly
rs.Properties("irowsetidentity") = True
rs.Open
Set dg1.DataSource = rs
rc = rs.RecordCount
End Sub
お昼ご飯食べてて思ったんですが…
例えばいつも注文してるA定食がお休みだった場合、
ごはんとスープとサラダと今日のお勧めの一品…
を注文すれば良いわけです。
たぶん誰でもふつうにやっちゃう事です。
SQL文にまとめて1箇所でクォーテーションを
付けれなかったら…それぞれの場所で付ける…。
別に『プログラムだから難しい』とは限らないんですよね。
そしてむしろこーゆー発想は年齢を重ねて経験を
積んだ方が出やすい…。
いままでこの世に存在しなかった新しい発想は
偏見に囚われない若い人の方が出るかもしれないけど…
(それさえも訓練次第と聞きますが…)年齢書かれても
…だからどうという事は無いかもしれません。
…でも同年代の励みにはなりますね(^^)。
返事が遅くなりました。m(_ _)m 特攻隊長まるるう さん、ありがとうございました。無事解決しました。とてもうれしいです。(^_^) 定食での例え話、分かりやすく勉強になりました。本当にお世話をおかけしました。また、何かあったときはよろしくお願いします。
編集 削除