VBでSQLを使い検索をする方法

このQ&Aのポイント
  • VBでSQLを使い検索をする方法を教えてください。
  • SELECT文の使い方がわかりません。番号、氏名、電話番号をテキストボックス1、テキストボックス2、テキストボックス3に入れたいです。
  • SELECT文を1行で複数の結果を受け取る方法を教えてください。
回答を見る
  • ベストアンサー

VBでSQLを使い検索をしたいのですが。

VBでSQLを使い検索をしたいのですが、SELECT文の使い方が分かりません。 下記の記述で、番号、氏名、電話番号をそれぞれのTEXTBOX1,TEXTBOX2,TEXTBOX3の ように各容器にいれたいのでが分かりません。 文をその文増やせばいいのでしょうか、SELECT文1行で複数の結果を受け取る方法を教えて下さい。 宜しくお願い致します。 Dim Adapter As New OleDbDataAdapter(SQLCm) Dim Table As New DataTable Dim name As String Dim selcomd As String Dim Value As String name = TextBox11.Text selcomd = "SELECT 番号,氏名,電話番号  FROM meishi WHERE 氏名 like '" & name & "' " SQLCm.CommandText = selcomd

質問者が選んだベストアンサー

  • ベストアンサー
  • uto_oha
  • ベストアンサー率100% (2/2)
回答No.2

ひとつひとつの検索になりますが、駄目でしょうか。 私は今のところこの方法しかわかりません。 VB側での受け取り方に何か配列変数のようなもので受け取れれば良いのですが、わかりません。 ごめんなさいね。 selcomd = "SELECT 番号 FROM meishi WHERE 氏名 like '" & name & "' " SQLCm.CommandText = selcomd Cn.Open() Value = SQLCm.ExecuteScalar Cn.Close() TextBox1.Text = Value selcomd = "SELECT 氏名 FROM meishi WHERE 氏名 like '" & name & "' " SQLCm.CommandText = selcomd Cn.Open() Value = SQLCm.ExecuteScalar Cn.Close() TextBox2.Text = Value selcomd = "SELECT 電話番号 FROM meishi WHERE 氏名 like '" & name & "' " SQLCm.CommandText = selcomd Cn.Open() Value = SQLCm.ExecuteScalar Cn.Close() TextBox3.Text = Value 'もしくは、GridViewに1レコード表示です。 selcomd = "SELECT * FROM meishi WHERE 氏名 like '" & name & "' " SQLCm.CommandText = selcomd Adapter.Fill(Table) '▼値の表示 DataGridView1.DataSource = Table Table.Dispose() Cn.Open() Value = SQLCm.ExecuteScalar Cn.Close() 以上試して見て下さい。

robotanmarch
質問者

お礼

早速のご回答有り難うございました。 そうですよね。 この二つの方法しか見当たりませんか。 私ももう少し調べて勉強してみます。 この度はどうも有り難うございました。 又宜しくお願い致します。

その他の回答 (2)

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.3

http://homepage1.nifty.com/rucio/main/VBdotNet/Database/Database4.htm このページの中ほど ■リスト2:・・・ の例を参照してください。 >引用 >'先頭の値を表示 >Value = Table.Rows(0)("説明") >MsgBox(Value) "説明"のところを"番号"や"氏名"等の項目名に変えて取得します。

robotanmarch
質問者

お礼

ご回答有り難うございます。 そうですね。 なんとか使えないかと私も考えていたのですが、Value = Table.Rows(0)("説明") Rows(n)のnは、ID番号ではなくて、行番号でしょう。 それがちょっと難しいなーと思い悩んでおります。 今回はどうも有り難うございました。 又勉強して頑張ります。 本当に有り難うございました。

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

SQL の文法はデータベース用の完全に別言語なので カテゴリ違いです。 [技術者向] コンピューター > データベース > データベースの種類 また、データベースの種類により方言がありますので、 質問するのにデータベースの種類を書いていないのでは 話になりません。 VB の勉強とは別に、SQL については専門の勉強をしてください。 『SQL 入門』といったキーワードで WEB 検索すれば、そのような サイトはごろごろあります。 > 文をその文増やせばいいのでしょうか 同時に複数の条件を満たす必要がある場合、 基本文法としては、条件句(WHERE句)に OR(もしくは AND)で 条件を追加していく事になります。 条件が複雑になってきた場合は、サブクエリを使って対象 レコードを絞った中から再検索することをSELECT文 1文で書けます。

関連するQ&A

  • Vb2010にアクセスのデータを出力

    前回、似たような質問をさせて頂いたのですが、私の説明が悪く、解決には至らなかったので、再度練った説明で質問させていただきます。 ・visual basic 2010 設置コントロール TextBox1、TextBox2、TextBox3 Button1 ・アクセスのテーブル  ID(数字)、氏名(テキスト)、性別(テキスト) TextBox1にアクセスのID入力し、その横に設置したButtomを押したら、そのIDのデータ(名前、性別)がTextBox2,TextBox3に出力される、というプログラムを書き方のヒントを教えていただけないでしょうか。 Imports System.Data.OleDb Public Class Form1 Private Sub Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Enter '▼データの取得 Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Database\Animals.mdb") Dim SQLCm As OleDbCommand = Cn.CreateCommand Dim Adapter As New OleDbDataAdapter(SQLCm) Dim Table As New DataTable SQLCm.CommandText = "SELECT * FROM T_akusesu" Adapter.Fill(Table) '▼データの連結 textbox.DataBindings.Add("Text", Table, "名前") textbox2.DataBindings.Add("Text", Table, "性別") Table.Dispose() Adapter.Dispose() SQLCm.Dispose() Cn.Dispose() End Sub End Class また、Buttonのイベントには何を書くべきなのでしょうか? 以上、よろしくお願い致します。

  • VBでSQL文のUPDATE構文を使った時のエラーについて

    こんにちは。全くのVB初心者ですが回答、ご指摘のほうよろしければお願いします。 Microsoft Visual Studio 2005でデータベース管理のアプリケーションを制作しているんですが、エラーが出て困っています。 本フォームの各Textboxの編集した値を、 利用者カルテフォーム(別フォーム)のDataGridViewとデータベースに反映させるというプログラミングにしようとしています。 以下のコードでデバッグしようとしても「UPDATE ステートメントの構文エラーです。」というエラーメッセージが出てきて実行できない状態です。 VB中学校というサイトのデータベース講座を参考にしました。 ------------------------------------------------------------ Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:xxxx.mdb") Dim SQLCm As OleDbCommand = Cn.CreateCommand Dim Table As DataTable = DirectCast(利用者カルテDataGridView1.DataSource, DataTable) Dim Row As DataRow Dim Adapter As New OleDbDataAdapter(SQLCm) Row = Table.NewRow Row("No") = NotextBox.Text Row("名前") = 名前TextBox.Text Row("フリガナ") = フリガナTextBox.Text Table.Rows.Add(Row) Dim SQL As String = "" SQL = "UPDATE 患者データ SET " SQL &= " No = " & Row("No") & "', " SQL &= " 名前 = '" & Row("名前") & "', " SQL &= " フリガナ= " & Row("フリガナ") & "', " SQL &= " WHERE " SQL &= " No = " & NotextBox.Text SQLCm.CommandText = SQL Cn.Open() ※SQLCm.ExecuteNonQuery() Cn.Close() 利用者カルテ.Show() Table.Dispose() Adapter.Dispose() SQLCm.Dispose() Cn.Dispose() End Sub ---------------------------------------------------------- 以上が実際にエラーがでる部分になります。 ※の部分で「UPDATE ステートメントの構文エラーです。」というエラーが指摘されています。 ちなみに他のフォームでINSERT文も使っているのですが、そちらは問題なく実行できる状態です。 初歩的な質問で申し訳ないですが、よければ回答のほうよろしくお願いします。

  • VBAをVBで焼き直ししたい

    access2003 VBAで下記のように、クエリー(qqq00)を作成し、 そのクエリー元に再処理をし、テーブル(tb0)にupdateしています。 このVBAを、VB2010に焼き直しをしたいのですが、 分かりませんので教えて頂けませんか。 (access2003のプログラム) sql00 = " SELECT xren.*" _ & " FROM xren ; " sql01 = " SELECT Avg(qqq00.kei04) AS avkei04," _ & " FROM qqq00 ; " Set qrdef_0 = db.CreateQueryDef("qqq00", sql00) Set tb = db.OpenRecordset("qqq00") Do nsu = nsu + 1 tb0.AddNew tb0!ren_no = tb!ren_no tb0!avkei04 = tb!avkei04 tb0.Update tb.MoveNext Loop Until tb.EOF DoCmd.DeleteObject acQuery, "qqq00" qrdef_0.Close: Set qrdef_0 = Nothing (VB2010のプログラム) Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load     Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Database\xxxxxs.mdb")     Dim SQLCm As OleDbCommand = Cn.CreateCommand     Dim Adapter As New OleDbDataAdapter(SQLCm)     Dim Table As New DataTable     SQLCm.CommandText = "SELECT * xren"     Adapter.Fill(Table) ここからが分かりません。      (1)クエリー(qqq00)名のつけ方      (2)qqq00の実行方法      (3)テーブル(tb0)へのupdate方法     Table.Dispose()     Adapter.Dispose()     SQLCm.Dispose()     Cn.Dispose() End Sub

  • VB2010とアクセスの接続方法

    textboxにID入力し、ENTERを押したらそのIDのデータがアクセスのデータベースから出力される、というプログラムを書き方のヒントを教えていただけないでしょうか。 Imports System.Data.OleDb Public Class Form1 Private Sub Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Enter '▼データの取得 Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Database\Animals.mdb") Dim SQLCm As OleDbCommand = Cn.CreateCommand Dim Adapter As New OleDbDataAdapter(SQLCm) Dim Table As New DataTable SQLCm.CommandText = "SELECT * FROM T_akusesu" Adapter.Fill(Table) '▼データの連結 textbox.DataBindings.Add("Text", Table, "名前") textbox2.DataBindings.Add("Text", Table, "フリガナ") Table.Dispose() Adapter.Dispose() SQLCm.Dispose() Cn.Dispose() End Sub End Class ・アクセスデータ  ID、名前、氏名 以上、よろしくお願い致します。

  • VB2008データベース

    非接続型データベースでUpdateをする文を書いていますがUpdateでエラーが出てしまいます。  OleDbCommandBuilder の参照をネットで確認等していますがエラーの内容がわかりません。 データベース参考書等にも下記と同じ文例でかいてあります。 どなたか教えてください。 *VB2008で開発しています。 Dim cn As OleDb.OleDbConnection Dim Buf As String Dim dAdp As OleDb.OleDbDataAdapter Dim dSet As DataSet Dim dTbl As DataTable Dim cBuild As OleDb.OleDbCommandBuilder Buf$ = DefCnSt$ & X_SystemFile$ & ";Jet OLEDB:Database Password=" & XdtPs$ cn = New OleDb.OleDbConnection(Buf$) dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM 物件", cn) dSet = New DataSet("物件") dAdp.Fill(dSet, "物件") dTbl = dSet.Tables("物件") dTbl.Rows(2)(1) = "ABC" cBuild = New OleDb.OleDbCommandBuilder(dAdp) dAdp.Update(dSet, "物件") <-ここでエラーが出ます。

  • VB.netでSQL 失敗する理由がわからないです

    こんばんは。閲覧ありがとうございます。 VB.net2010でSQLに挑戦しているのですが、Accessで実行するとうまくいくのに、VBに持って行ってやると必ず失敗する箇所があり、まったく解決策が浮かびません。 Dim DBConnect As New OleDb.OleDbConnection(OleDBString) Dim SQLCm As OleDb.OleDbCommand = DBConnect.CreateCommand Dim Adapter As New OleDb.OleDbDataAdapter(SQLCm) ... 't_omakaseに一次結果を保存 ←成功します。 SQLCm.CommandText = "SELECT t_object.ObjectId, t_object.ObjectSpecId, t_object.ObjectName INTO t_omakase FROM t_object WHERE (((t_object.ObjectId)>7 And (t_object.ObjectId)<39) AND ((t_object.ObjectSpecId)=6)) ORDER BY t_object.ObjectId; " Adapter.Fill(Table1st) 't_result作成 ←これが必ず失敗します。 SQLCm.CommandText = " SELECT t_omakase.ObjectName, t_object.ObjectName, t_object.[500] INTO t_result FROM t_object INNER JOIN (t_omakase INNER JOIN t_containment ON t_omakase.ObjectId = t_containment.ParentId) ON t_object.ObjectId = t_containment.ChildId WHERE (((t_object.[500]) Like ""C:\Users\ " & Username & " \Music\iTunes*"")) ORDER BY t_containment.ParentId, t_containment.Order; " Adapter.Fill(Table2nd) 変数とかはちゃんと宣言しております。 Accessで成功することがVBでできないのです。詳しい方ぜひ教えて下さい。

  • VB.netでJet.OLEDBを使いCSVを読み

    VB.netでOleDbConnectionを使ってCSVを読み込むと便利ですが、属性判定を勝手にされたくありません。 どうすればコントロールできますか? 個別に属性を決めるか、もしくは全部文字列として受け取りたいです。 何もしなければ、項目の属性が自動で決まりますが、その属性判断が甘く、属性に合わない値が消えます。 例えば、 日付項目っぽい値が入っている項目にたまに文字列がるとすると、 その項目が日付項目になって、日付項目に合わないデータは空白になってしまいます。 CSVの読み込みは一旦すべて文字列にして受け取り、その後の事はアプリでコントロールしたいです。 どうすればできますか? Dim OleDbConnection1 As New OleDb.OleDbConnection Dim OleDbCommand1 As New OleDb.OleDbCommand Dim OleDbDataAdapter1 As New OleDb.OleDbDataAdapter Dim FileInfo1 As New FileInfo(CSVファイルの名前をフルパスで) OleDbConnection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=" & FileInfo1.DirectoryName & "\;" _ & "Extended Properties=" & ControlChars.Quote & "Text;HDR=No;FMT=Delimited" & ControlChars.Quote OleDbConnection1.Open() OleDbCommand1.CommandText = "SELECT * FROM [" & FileInfo1.Name & "]" OleDbCommand1.Connection = OleDbConnection1 OleDbDataAdapter1.SelectCommand = OleDbCommand1 OleDbDataAdapter1.Fill(DataTable1) OleDbDataAdapter1.Dispose() OleDbCommand1.Dispose() OleDbConnection1.Dispose()

  • vb.net で ADO でアクセスのテーブル

    アクセスのテーブルのレコードの数を取得したいのですが コードがわからないので続きを教えていただけますか? Imports System.Data.OleDb Sub test() Dim oleConn As OleDbConnection Dim oleCmd As OleDbCommand Dim oleAdp As OleDbDataAdapter oleConn = New OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source=C:\Database1.accdb;") oleCmd = oleConn.CreateCommand() oleCmd.CommandText = "SELECT * FROM テーブル1" oleAdp = New OleDbDataAdapter(oleCmd) 'MsgBox oleCmd.??? End Sub までできたのですが、ここからどうすれば数を取得できますか?

  • vb .net Winアプリでコンボボックスに値を

    vb .net Winアプリでコンボボックスに値をセットする方法を教えて下さい。 table1 都道府県コード,都道府県名(カナ),都道府県名 01,ホッカイドウ,北海道 02,アオモリケン,青森県 03,イワテケン,岩手県 のテーブルがあり、既に読み込んでいます。 このデータをコンボボックスにセットしたいです。 Dim NpgsqlConnection1 As NpgsqlConnection Dim NpgsqlCommand1 As NpgsqlCommand Dim NpgsqlDataAdapter1 As NpgsqlDataAdapter Dim String1 As String Dim DataTable1 As DataTable NpgsqlConnection1 = New Npgsql.NpgsqlConnection NpgsqlConnection1.ConnectionString = gstrCnct NpgsqlConnection1.Open() String1 = "select * from table1;" NpgsqlCommand1 = New NpgsqlCommand NpgsqlCommand1.Connection = NpgsqlConnection1 NpgsqlCommand1.CommandText = String1 NpgsqlDataAdapter1 = New NpgsqlDataAdapter(String1, NpgsqlConnection1) DataTable1 = New System.Data.DataTable NpgsqlDataAdapter1.Fill(DataTable1) ' 一括の方法でもOK ' Me.ComboBox1.??? = ???? ' ぐるぐるしながらセットでもOK ' Me.ComboBox1.??? = Space(0) ' Me.ComboBox1.??? = "ミセンタク" ' Me.ComboBox1.??? = "未選択" For Each DataRow1 As DataRow In DataTable1.Rows ' Me.ComboBox1.??? = DataRow1("都道府県コード") ' Me.ComboBox1.??? = DataRow1("都道府県名(カナ)") ' Me.ComboBox1.??? = DataRow1("都道府県名") Next DataRow1 ■要件 メインの情報は都道府県名ですが、 めくった時に 都道府県コード,都道府県名(カナ),都道府県名 を見せる形で作りたいです。 都道府県コードは取り出す必要があります。 データ 1行目は空白,ミセンタク,未選択 2行目以降はtable1から取り出した値。 以上、よろしくお願いします。

  • vb2010でmdbデータの任意の項目で検索

    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

専門家に質問してみよう