VB初心者でソフト開発をやり始めたのですが行き詰まって困っています。
助けてください。よろしくお願いします。
・ACCESSのmdb形式のデータは下記の構成になっています。
1列: ID integer サイズ指定無し 自動設定
2列: 名前 string サイズ指定無し
3列: 性別 string サイズ指定無し
4列: 電話番号 string サイズ指定無し
テーブル名:sampleTable
フォームにテキストボックスを項目数配置してIDを設定してボタンを押すと各テキストボックスに
検索されたデータが帰ってきて表示されるものです。
・下記のようなプログラムで「ID」を指定して検索が出来るのは確認済みです。
これを「名前」を指定して検索出来るように改造したいのですがどのようにすれば
良いのかお教え頂きたくお願いいたします。
たぶん ”strSelectSql =・・・・・の部分かと思うのですがよろしくお願い致します。
(色々試しましたがうまくいきません・・・。)
Public Class Form1
Dim MjstrPath As String
Dim MjstrID As String 'ID
Dim MjstrSimei As String '名前
Dim MjstrSexnam As String '性別
Dim MjstrTel As String '電話番号
'-----------------------------
'データを検索する
'-----------------------------
Function MDB_SELECT(ByVal PistrMakPath As String) As Boolean
MDB_SELECT = False
Dim strDatbasePara As String 'データベースパラメータ
Dim ObjCnn As New ADODB.Connection
Dim ObjRst As New ADODB.Recordset
Dim strSelectSql As String
MjstrSimei= TextBox4
strDatbasePara = "Provider=Microsoft.Jet.OLEDB.4.0;" + _
"Data Source=" + PistrMakPath + ";" + _
"Jet OLEDB:Engine Type=5;"
Try
ObjCnn.Open(strDatbasePara)
' strSelectSql = "Select * from sampleTable" _
' + " where ID = " + MjstrID
strSelectSql = "Select * from sampleTable" _
+ " where ID = " + MjstrID '<--- 問題か? ---
’where 名前= "+ MjstrSimei ではだめでした
ObjRst.Open(strSelectSql, ObjCnn, _
ADODB.CursorTypeEnum.adOpenKeyset, _
ADODB.LockTypeEnum.adLockOptimistic)
If ObjRst.EOF Then
MjstrSimei = ""
MjstrSexnam = ""
MjstrTel = ""
Else
MjstrID = ObjRst.Fields("ID").Value
MjstrSimei = ObjRst.Fields("名前").Value
MjstrSexnam = ObjRst.Fields("性別").Value
MjstrTel = ObjRst.Fields("電話番号").Value
MDB_SELECT = True
End If
ObjRst.Update()
ObjRst.Close()
Catch ex As Exception
End Try
ObjCnn = Nothing
ObjRst = Nothing
End Function
'-------------------------------------------------------------
'データを検索する
'-------------------------------------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
Dim strMdbpath As String
Dim intRecQuery As Integer
strMdbpath = TextBox1.Text + "\" + TextBox2.Text
MjstrID = TextBox3.Text
If MDB_SELECT(strMdbpath) Then
MsgBox("検索該当しました")
Else
MsgBox("該当ありません")
End If
TextBox4.Text = MjstrSimei
TextBox5.Text = MjstrSexnam
TextBox6.Text = MjstrTel
End Sub
End Class
No.3ベストアンサー
- 回答日時:
> where 名前= "+ MjstrSimei ではだめなのでしょうか?
SQL実行前に、メッセージボックス等でSQLを表示するようにしてみてください。
その書き方では、望むSQLが発行されていないことがわかります。
"where 名前= " + MjstrSimei
→ where 名前= 太郎
"where 名前= '" + MstrSimei + "'"
→ where 名前= '太郎'
出来ました!、本当にありがとうございました。
信じられない! 3日間調べ回ったのに解決策を探せ出せなかったことが・・・・。
この結果を基に文字列と数値の扱いをきっちり整理して認識を高めたいと思います。
簡潔明瞭な回答ほんとにありがとうございました。
No.2
- 回答日時:
フィールドのデータ型が理解できていないようです。
「ID」フィールドは数値型、「名前」「性別」「電話番号」フィールドは文字列型です。
SQL文で文字列型の条件を記述する場合は、シングルコーテーションで囲む必要があります。
以下の手順で、必要なSQL文の検索条件部分を構築出来ます。
条件を入力するテキストボックスの名称を「ID条件」「名前条件」「性別条件」「電話条件」とする。
Where条件の文字列を、strWhere とする。
・strWhere を空にする。
・もしID条件が空でなければ
・□□strWhereの追加前処理()
・□□strWhereに、"(ID="+ID条件+")"を追加する。
・もし名前条件が空でなければ
・□□strWhereの追加前処理()
・□□strWhereに、"(名前='"+名前条件+"')"を追加する。
・もし性別条件が空でなければ
・□□strWhereの追加前処理()
・□□strWhereに、"(性別='"+性別条件+"')"を追加する。
・もし電話条件が空でなければ
・□□strWhereの追加前処理()
・□□strWhereに、"(電話番号='"+電話条件+"')"を追加する。
・もしstrWhereが空でなければ
・□□SQL文に、" WHERE "+strWhere を追加する。
ここで、strWhereの追加前処理()とは、2つ目以降の条件を追加する場合の前処理です。
・もしstrWhereが空でなければ、strWhereに" AND "を追加する。
3人目の方の短刀直入・単純明快な回答でやっと出来ました。その上で、貴殿の内容が初めて理解でき情報の豊富さに感動、ありがとうございました。頂いた情報は多いので今後の開発に役立てたいと思います。今後ともよろしくお願い致します。
No.1
- 回答日時:
いきなりプログラムで考えるのではなく、「どういったSQLを生成したいか」をまず考えましょう。
IDが「1」のレコードを検索する場合は
Select * from sampleTable
where ID = 1
です。
では、名前が「太郎」のレコードを検索する場合はどうなるでしょうか?
Select * from sampleTable
where 名前 = 太郎
ではなく、
Select * from sampleTable
where 名前 = '太郎'
とすべきなのは理解しておられますか?
この回答への補足
おっしゃることは理解しているつもりです。
”ID”、”名前”共に MDB の項目名です。
"ID" も "名前" もフォームのTEXTBOXから参照してデータを入れる構造にしています。
’where 名前= "+ MjstrSimei ではだめなのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
男の名前で ゆうや ゆうた ゆう...
-
複雑なシフト表から1日ごとの...
-
名前を呼ばずに「すみません」...
-
名前を呼ばれる方と、名前を呼...
-
DNAの化学名って何ですか?
-
電話をかけてきて、社名だけで...
-
彼氏が良く、「◯◯(私の名前)」...
-
ジャージのズボンで裾を絞って...
-
彼氏が「君」っていいます
-
今LINEの名前をフルネームで登...
-
Hの最中に違う女の名前を言わ...
-
マイページとは?どこにありま...
-
人名にあまりふさわしくない名...
-
急に名前を呼ばれなくなった 職...
-
「失礼ですが・・・」と名前を...
-
名前の表札がないマンションの...
-
エクセルで外部データの取り込...
-
私が「なんて呼んだらいい?」と...
-
AV女優の名前教えて
-
やたら名前を呼ぶ?心理とは
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複雑なシフト表から1日ごとの...
-
名前を呼ばずに「すみません」...
-
彼氏が「君」っていいます
-
電話をかけてきて、社名だけで...
-
「失礼ですが・・・」と名前を...
-
名前の表札がないマンションの...
-
Hの最中に違う女の名前を言わ...
-
彼氏が良く、「◯◯(私の名前)」...
-
マイページとは?どこにありま...
-
境界性人格障害者のターゲット...
-
今LINEの名前をフルネームで登...
-
日本人の何人に1人ぐらいが、 ...
-
みなさん、恋人のLINEの名前は...
-
名前を呼ばれる方と、名前を呼...
-
女子に聞きたい。 異性に名前は...
-
メールで彼女の名前を打ち間違えた
-
人名にあまりふさわしくない名...
-
パソコン名をどうしていますか?
-
私が「なんて呼んだらいい?」と...
-
AV女優の名前教えて
おすすめ情報