• ベストアンサー

【VB】コンボボックスにデータベースから取り出した値を入れたい

VB2005です。 表題の通りですがやり方がよくわかりません。 データベースに接続し、 SQLで重複しない値を取り出すところまではできています。 SQL=SELECT DISTINCT FieldName FROM TableName VB6の時はこんなソースでした Do Until rs.EOF    Combo1.AddItem.Fields("FieldName")    rs.MoveNext Loop VB2005ではどう書くのでしょう? よろしくご教授ください。

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

  • ベストアンサー
  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.2

DataReaderを使用したサンプルです ※DBMSが記述されていないので、接続文字列はアクセスの場合です ※テキスト書きなので試験していません ※DataSetを使用する方法もありますが、コンボボックスに表示する程度ならDataReaderで大丈夫でしょう ※VB2005ならば、TableAdapterという便利なクラスがあるそうです ※VisualStudio2005 まださわってません orz   Dim dbFilePath As String = "C:\testdb.mdb"   Dim connectionString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}", dbFilePath)   Dim sql As String = "SELECT DISTINCT FieldName FROM TableName"   Dim conn As New OleDbConnection(connectionString)   Dim query As New OleDbCommand(sql, conn)   Try     conn.Open()     Dim reader As OleDbDataReader = query.ExecuteReader()     While (reader.Read())       Me.ComboBox1.Items.Add(reader.Item("FieldName"))     End While     reader.Close()   Catch ex As Exception     MessageBox.Show(ex.Message)   Finally     conn.Close()   End Try

sineminna
質問者

お礼

以下のソースでいけました。ほとんどAlexSunsさんのと一緒です。 Dim connectionstring As String = String.Format("provider=microsoft.jet.oledb.4.0;data source=" & My.Application.Info.DirectoryPath & "\test.mdb") Dim SQL As String = "SELECT DISTINCT aa FROM test" Dim conn As New OleDb.OleDbConnection(connectionstring) Dim query As New OleDb.OleDbCommand(sql, conn) conn.Open() Dim reader As OleDb.OleDbDataReader = query.ExecuteReader() While (reader.Read()) Me.ComboBox1.Items.Add(reader.Item("aa")) End While reader.Close() conn.Close() End Sub まじで勉強になりました。本当に感謝しています。 TableAdapterというのも試してみます。 ありがとうございました。

sineminna
質問者

補足

ご親切にありがとうございます。 早速試してみます。 VS2005は書籍が全くないので悪戦苦闘しています。(VB6.0からの乗り換えです) また改めてお礼させていただきます。

その他の回答 (2)

noname#187541
noname#187541
回答No.3

こんにちは。 値を取り出すところまでできているということなので SQLに値が格納されているのなら ComboBox1.Items.AddRange(SQL) というような感じでできないでしょうか。 実際に試していないのでこれから試してみます。 VB2005はまだまだヘルプが頼りです。私もかなり苦戦しています。ExcelVBAの経験しかないので。

sineminna
質問者

お礼

やはりヘルプが頼りですか。 (ヘルプ嫌いなんですが) ありがとうございました。

  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.1

VB2003です。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Cn As ADODB.Connection Dim rs As ADODB.Recordset Cn = New ADODB.Connection rs = New ADODB.Recordset Cn.ConnectionString = "DSN=MySQL;UID=Name;PWD=pass;" Cn.Open() rs.Open("select field from test", Cn) Do Until rs.EOF ComboBox1.Items.Add(rs.Fields("field").Value) rs.MoveNext() Loop rs.Close() Cn.Close() MsgBox("終了しました。") End Sub

sineminna
質問者

お礼

参考になりました。 どうもありがとうございます。

sineminna
質問者

補足

早速のご回答ありがとうございます。 このソースでいけそうな気がします。 また改めてお礼いたします。

関連するQ&A

  • 【VB】コンボボックスにデータベースから取り出した値を入れたい

    VB6です。 表題の通りですがやり方がよくわかりません。 ADOを使ってSQLで重複しない値を取り出すところまではできています。 SELECT DISTINCT FieldName FROM TableName; 取り出した値をコンボボックスで選択できるようにしたいのです。 よろしくご教授ください。

  • リストボックス

    Do While Not rs.EOF   'データがある場合 Form2.List1.AddItem rs.Fields("顧客番号") & " " & rs.Fields("得意先名") rs.MoveNext Loop こうしたら、いちらんには 顧客番号  得意先名 111111111111   ああああ 11111111111   いいい と入っていて、得意先名をきちんと”ああああ”にそれえたいのですけどできるでしょうか? 桁数の指定とかできるでしょうか?

  • コンボボックス

    VB6.0で開発しています。 ACCESSのm_名前というテーブルから取ってきています。 rst.Source = "m_名前" コンボボックスでなのですが2列表示したいのです。 今は Combo1.AddItem rs.Fields("番号") で 1列だけ表示しているのですが これを 番号  名前 1    あいう 2    かきく 3    さしす としたいのですが どうすればいいでしょうか。

  • VB6.0で データベースの値をコンボボックスに取り込む方法

    VB6.0で データベースの値をコンボボックスに取り込む方法ですが、 普通にCombobox.additem = rs.fields(列名).value だったかな? これで、セットした場合 レコードが5件あったら最初の1件しか取得できませんよね?whileでまわして取得すればいいのでしょうか?←どう記述すればいいのか・・。 また、他にいい方法ないでしょうか?一気にセットできる方法など。 よろしくお願いします。

  • VB6.0DataGridでのUpdate文で疑問?

    ADOの勉強したばっかりで、あまり詳しくありませんのでよろしくお願いします。 DataGridを使ってある条件で抽出しています。その抽出したものを更新したいのですが、 Do rs!分類ID = text1 rs.Update rs.MoveNext Loop Until rs.EOF という命令を書くと、いいような気がするのですが、なぜか抽出したデータが一個おきに書き換わります。 でも、 Do rs!分類ID = text1 rs.Update rs.MoveNext  if rs.EOF then rs.Previous END IF Loop Until rs.EOF と命令するとすべてのデータが書き換わります。 なぜなんでしょうか?疑問です。 VB6.0、ACCESS2000です。

  • コンボボックスの値取得について

    テーブルはAccess2003で作成 VBは6を使用しています。 Access2003で作成したテーブル(t_KEN)の県名をコンボボックス(cmbKen)に表示させ、選択したひとつの県名とその県コードを テキストボックス(txtKENMEI.text、txtKenCode.text)に格納したいと思います。 以下の様にコンボボックスに県名を表示する所までは できたのですが、そこから選択した県名と県コードをそれぞれの テキストボックスに格納する所がわかりません。 初歩的過ぎるのかもしれませんが、初心者であり何卒ご教授頂けます様 お願いいたします。 テーブル(t_KEN) KENCODE KENMEI 1 北海道 2 青森県 3 岩手県 4 秋田県 ・  ・ ・  ・ ・  ・ Private Sub cmbKen_GotFocus() Dim DB As Database Dim RS As Recordset Set DB = OpenDatabase("c:\TEST\jdb.mdb") Set RS = DB.OpenRecordset("t_KEN") Do Until RS.EOF Me.cmbKen.AddItem RS.Fields("KENMEI") RS.MoveNext Loop 'ここ以降の記述が困ってます。 txtKENMEI.Text=・・・ txtKenCode.Text=・・・ RS.Close Set RS = Nothing DB.Close Set DB = Nothing End Sub

  • access vbでループ処理

    レコードセットでテーブルの内容をフォームのテキストボックスに表示 させたいのですが、vbの知識が無く困ってます。以下の処理をループ処理で 簡単に出来ないでしょうか。 ' PASU1 = rs!PASU ' rs.MoveNext ' PASU2 = rs!PASU ' rs.MoveNext ' PASU3 = rs!PASU ' rs.MoveNext ' PASU4 = rs!PASU ' rs.MoveNext ' PASU5 = rs!PASU ' rs.MoveNext ' PASU6 = rs!PASU レコードセットは, Do Until rs.EOF   loop を用いれば繰り返し出来ると解っているのですがフォームの, PASU[1,2,3,,,]の数字の部分を指定することが出来ずにいます。 変数など駆使すれば出来ると思うのですが良くわかりません。 どなたか教えてください。

  • データベースをEOFまでループさせたい

    データベースをEOFまでループさせたい 今までVB6.0上で下記のようなコーディングをしておりましたが 初VB.NET上コーディングで、参照にしたプログラムもがらっと変わり 四苦八苦しています><; 今まで ********* Do Until rs.EOF    aaa=rs("Log_Time")    rs.MoveNext Loop ********* これを Do~Loop でなく、For Each で書きたいと思うのですが 下記コーディングでエラーとなります。 エラー「型'System.Data.Datarow'の値を'integer'に変換できません」 For Each row As DataRow In rs.Tables(dataTableName).Rows    aaa = Me._rs.Tables(dataTableName).Rows(row)("Log_Time") Next やりたいことは単純にEOFまでループし、値を取得したいということなのですが・・・ うまくいきません。 EOFという概念もない様子?! どなたかヨロシクお願いします!

  • リストボックス

    例えば 例 データベースには    顧客名   旧姓    木村    工藤    朝比奈   遠藤    李     福井 っていう風にデータ”3件”が入っていまして、 Dim A As String * 10, B As String * 10 Do While Not rs.EOF .List1.FontName = "FixedSys" .List1.FontSize = "9" LSet A = rs.Fields!顧客名   LSet B = rs.Fields!旧姓 .List1.AddItem A & B rs.MoveNext Loop これを実行したらリストボックスには、 木村   工藤 朝比奈   遠藤 李   福井 っていうふうに、見た目的にも悪いので、旧姓側をきちんと頭をそろえたいのですがどうすれば解決しますでしょうか? LSETを使わないほうがいいのでしょうか?

  • 重複チェック

    いま、重複チェックをしているのですが、MoveFirstで データをある分だけ調べていて、データが重複してなかったら、データを更新したいのですが、はじめにMoveFirst で、データを調べたので、カレント行が最終行にあると思うので、それを例えば、3行目のデータだったり、5行目のデータを変更したいのですが、よろしくお願いします。 重複チェック rs.MoveFirst   Do While Not rs.EOF    If Text2(0).Text <> rs.Fields(1) Then rs.MoveNext End If Loop rs.Fields(1) = Text2(0).Text

専門家に質問してみよう