none
讀取資料庫的方法 RRS feed

  • 問題

  • 剛剛看到了一篇有關Checkbox直接取用資料庫資料欄的文章,寫好蠻符合我正要找的類形,不過我是想我在資料庫的文字出現在ComboBox下拉式選單中,我把下面這段程式碼複製下來後再修改了一下,雖然執行時沒有出現錯誤,但ComboBox沒有出現我在資料庫中的文字資料,請各位程式設計專家幫我看看我那裡需要改進。

     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim oledbl As New OleDbConnection
            Dim dt As New DataTable
            oledbl.ConnectionString = "provider = microsoft.jet.oledb.4.0; data source=c:\125.mdb"
            oledbl.Open()
            If ConnectionState.Open Then
                Dim cmdl As New OleDbCommand
                cmdl.Connection = oledbl
                cmdl.CommandText = " SELECT [學校名] FROM 資料表 "
                Dim adapter As OleDbDataAdapter = New OleDbDataAdapter("SELECT [學校名] FROM 資料表名稱", oledbl)
                adapter.Fill(dt)
                oledbl.Close()
            End If

            ' 假設您從資料庫撈出資料,並且放到 DataTable (變數 dt) 中
            ' 並將資料放到 CheckBox1.Text 到 CheckBox5.Text 中
            If dt.Rows.Count >= 5 Then  ' 確認有 5 筆資料
                For i = 1 To 5
                    If Me.Controls.Find("CheckBox" & i.ToString(), True).Length > 0 Then
                        Me.Controls("CheckBox" & i.ToString()).Text = dt.Rows(i - 1)("學校名").ToString()
                    End If
                Next
            End If
        End Sub



    *******************************************************************************
    下面是我用天真的方法去修改的..
    Dim oledbl As New OleDbConnection
            Dim dt As New DataTable
            oledbl.ConnectionString = "provider = microsoft.jet.oledb.4.0; data source=\\192.168.0.13\sys\user.mdb"
            oledbl.Open()
            If ConnectionState.Open Then
                Dim cmdl As New OleDbCommand
                cmdl.Connection = oledbl
                cmdl.CommandText = " SELECT [學號] FROM 資料表 "
                Dim adapter As OleDbDataAdapter = New OleDbDataAdapter("SELECT [人員] FROM 學號", oledbl)
                adapter.Fill(dt)
                oledbl.Close()
            End If
            If dt.Rows.Count >= 12 Then
            End If
            For i = 1 To 12
                If Me.Controls.Find("ComboBox" & i.ToString(), True).Length > 0 Then
                    Me.Controls.Find("ComboBox" & i.ToString(), True)(0).Text = dt.Rows(i - 1)("人員").ToString()
                End If


    2010年3月11日 上午 08:26

解答

  • 我試過妳所po上來的code,可以執行combobox功能的或許是妳那搞錯了......妳可能是以為要寫在combobox裡吧.....
    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
            Dim oledbl As New OleDbConnection
            oledbl.ConnectionString = "provider = microsoft.jet.oledb.4.0; data source=E:\acc.mdb"
            oledbl.Open()
            Dim cmd As New OleDbCommand
            cmd.Connection = oledbl
            cmd.CommandText = "select 版本 from 作業系統"
            Dim table As New DataTable
            Dim adapter As New OleDbDataAdapter(cmd)
            adapter.Fill(table)
            ComboBox1.DisplayMember = "版本"
            ComboBox1.ValueMember = "版本"
            ComboBox1.Text = vbNullString
            ComboBox1.DataSource = table
            oledbl.Close()
        End Sub
    這樣好像是不行的妳要寫在FORM裡,這樣combobox好像才會有做用的。

     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
           Dim oledbl As New OleDbConnection
            oledbl.ConnectionString = "provider = microsoft.jet.oledb.4.0; data source=E:\acc.mdb"
            oledbl.Open()
            Dim cmd As New OleDbCommand
            cmd.Connection = oledbl
            cmd.CommandText = "select 版本 from 作業系統"
            Dim table As New DataTable
            Dim adapter As New OleDbDataAdapter(cmd)
            adapter.Fill(table)
            ComboBox1.DisplayMember = "版本"
            ComboBox1.ValueMember = "版本"
            ComboBox1.Text = vbNullString
            ComboBox1.DataSource = table
            oledbl.Close()
            End Sub
       
    參考看看吧,希望對妳有幫助

    1:ComboBox.DataSource
         資料的來源,可能是 DataSet、DataTable 或者泛型集合,只要可以提供資料者皆可!

    2:ComboBox.DisplayMember
         就字面上解釋,顯示的成員,就是你要放在下拉選單中讓使用者選擇的項目,當然!必須包含在 DataSource 中,不然就會找不到。

    3:ComboBox .ValueMember
         英翻中,變數成員,今天有的下拉的選項之後,可能是帶變數的字串,這個就是用來指定各成員的代表變數,例:下拉選單有產品的類別:五金類、家庭類、油漆類…,不過寫入資料庫的值是各分類的代表數字,這個時候就可以來使用 ValueMember。

    4:ComboBox .SelectedIndex
         當你使用了 ValueMember 之後,ValueMember 就會把選擇的值丟到 SelectedIndex 裡,我們再透過 SelectedIndex 來取出所選擇的值,例:lbl1.Text = ComboBox .SelectedIndex.ToString ,這時候控制項 lbl1 就會出現我們在 ComboBox 所選的代表變數。

    • 已標示為解答 張秀婷 2010年3月12日 上午 07:20
    2010年3月12日 上午 02:19

所有回覆

  • CType(Me.Controls.Find("ComboBox" & i.ToString(), True)(0), ComboBox).Items.Add(dt.Rows(i - 1)("人員").ToString())

    你的碼怪怪的..........畫面上有12個ComboBox嗎?
    2010年3月11日 上午 08:32
  • Hi!

    1. 參考先前的發問 怎麼將資料庫資料用ComboBox顯示

    ComboBox1.DataSource = dt
    ComboBox1.DisplayMember = "你要顯示出來的欄位名稱"
    ComboBox1.ValueMember = "你要作為值的欄位名稱"

    2. 或者將 DataTable 資料一個個讀出來,透過 Combobox1.Items.Add 將資料加入 Combobox1

     





    小歐ou是個菜鳥工程師,回答不好請不要標我的回覆為解答,有網友熱心回覆也請發問者儘快回應,謝謝
    歡迎參觀我的Blog.NET菜鳥自救會
    2010年3月11日 上午 08:34
    版主
  • 這是參考小歐高手所提供的參考資料後,所修改而成的程式碼,但執行後我的combox依然沒有下拉式文字,請問各位高手我那裡弄錯了,謝謝。


    Dim conn As OleDbConnection
            Dim mydatatable As DataTable
            Dim myadapter As OleDbDataAdapter
            Dim mydataset As DataSet = New DataSet()
            Dim connstr As String = "provider = microsoft.jet.oledb.4.0; data source=\\192.168.0.13\sys\user.mdb"
            Dim selectcmd As String = "select 學號 from 資料表"


            conn = New OleDb.OleDbConnection(connstr)
            conn.Open()
            Try
                myadapter = New OleDbDataAdapter(selectcmd, conn)
                myadapter.Fill(mydataset, "no")
                ComboBox2.DataSource = mydataset.Tables("no").Rows(0)("人員")
                ComboBox2.DisplayMember = "人員"
                ComboBox2.ValueMember = "人員"
                ComboBox2.Text = vbNullString
            Catch a As Exception
                MsgBox(a.Message)
            End Try
            mydatatable = mydataset.Tables("no")

        End Sub

    2010年3月11日 上午 09:12
  • Hi!

    你這幾行蠻奇怪的

    1.
          Dim selectcmd As String = "select 學號 from 資料表"
    表示您從[資料表]中撈出[學號]欄位資料,所以照理說應該只會有 [學號] 欄位

    2. 但是您以下的設定,欄位名稱卻是 [人員] ?

                ComboBox2.DisplayMember = "人員"
                ComboBox2.ValueMember = "人員"
                ComboBox2.Text = vbNullString

    小歐ou是個菜鳥工程師,回答不好請不要標我的回覆為解答,有網友熱心回覆也請發問者儘快回應,謝謝
    歡迎參觀我的Blog.NET菜鳥自救會
    2010年3月11日 上午 09:18
    版主
  •    ComboBox2.DataSource = mydataset.Tables("no").Rows(0)("人員") --> ComboBox2.DataSource = mydataset.Tables("no")
    請詳閱以下文件, 不要只顧著抄程式碼
    ComboBox. DataSource 屬性
    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年3月11日 上午 09:19
    版主
  • 各位高手幫我看看我把程式碼改成這樣那裡錯了,請教教我謝謝
     Dim oledbl As New OleDbConnection
            oledbl.ConnectionString = "provider = microsoft.jet.oledb.4.0; data source=\\192.168.0.13\sys\user.mdb"
            oledbl.Open()
            Dim cmd As New OleDbCommand
            cmd.Connection = oledbl
            cmd.CommandText = "select 學號 from 資料表 "
            Dim table As New DataTable
            Dim adapter As New OleDbDataAdapter(cmd)
            adapter.Fill(table)
            ComboBox2.DisplayMember = "學號 "
            ComboBox2.ValueMember = "學號"
            ComboBox2.Text = vbNullString
            ComboBox2.DataSource = table
            oledbl.Close()
        End Sub
    • 已編輯 張秀婷 2010年3月11日 上午 10:56
    2010年3月11日 上午 10:34
  • 1. 資料表的名稱真的叫  資料表 嗎 ?
    2.  ComboBox2.DisplayMember = " 學號 " <--多了空格
    3. 看一下MSDN的免費教學
    ADO.NET 開發高手線上教學課程

    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年3月11日 上午 10:53
    版主
  • 錯的,資料表名稱我已改過來了," 學號"多空格的地方我也發現了,這些我都改過了,可是我的combobox還是沒有下拉式文字出來....
    2010年3月11日 上午 11:06
  •  Dim adapter As New OleDbDataAdapter(cmd) ->  Dim adapter As New OleDbDataAdapter(cmd, oledbl)
     把 olednl.open拿掉

     MSDN有一個把ADO.NET解釋的很清楚的東西, 寫程式也要練習看文件, 我認為你根本就不看文件一直想抄code而已


    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年3月11日 上午 11:18
    版主
  • 下拉式的問題還是沒有決解,我會好好研究ADO.NET文件的,但我並沒有只想抄code..

    2010年3月11日 上午 11:40
  • 下拉式的問題還是沒有決解,我會好好研究ADO.NET文件的,但我並沒有只想抄code..


    Hi!

    試著

                             adapter.Fill(table)
    設定中斷點  --> ComboBox2.DisplayMember = "學號"

    然後去看 table 是否有資料


    小歐ou是個菜鳥工程師,回答不好請不要標我的回覆為解答,有網友熱心回覆也請發問者儘快回應,謝謝
    歡迎參觀我的Blog.NET菜鳥自救會
    2010年3月11日 上午 11:55
    版主
  • 我試過妳所po上來的code,可以執行combobox功能的或許是妳那搞錯了......妳可能是以為要寫在combobox裡吧.....
    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
            Dim oledbl As New OleDbConnection
            oledbl.ConnectionString = "provider = microsoft.jet.oledb.4.0; data source=E:\acc.mdb"
            oledbl.Open()
            Dim cmd As New OleDbCommand
            cmd.Connection = oledbl
            cmd.CommandText = "select 版本 from 作業系統"
            Dim table As New DataTable
            Dim adapter As New OleDbDataAdapter(cmd)
            adapter.Fill(table)
            ComboBox1.DisplayMember = "版本"
            ComboBox1.ValueMember = "版本"
            ComboBox1.Text = vbNullString
            ComboBox1.DataSource = table
            oledbl.Close()
        End Sub
    這樣好像是不行的妳要寫在FORM裡,這樣combobox好像才會有做用的。

     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
           Dim oledbl As New OleDbConnection
            oledbl.ConnectionString = "provider = microsoft.jet.oledb.4.0; data source=E:\acc.mdb"
            oledbl.Open()
            Dim cmd As New OleDbCommand
            cmd.Connection = oledbl
            cmd.CommandText = "select 版本 from 作業系統"
            Dim table As New DataTable
            Dim adapter As New OleDbDataAdapter(cmd)
            adapter.Fill(table)
            ComboBox1.DisplayMember = "版本"
            ComboBox1.ValueMember = "版本"
            ComboBox1.Text = vbNullString
            ComboBox1.DataSource = table
            oledbl.Close()
            End Sub
       
    參考看看吧,希望對妳有幫助

    1:ComboBox.DataSource
         資料的來源,可能是 DataSet、DataTable 或者泛型集合,只要可以提供資料者皆可!

    2:ComboBox.DisplayMember
         就字面上解釋,顯示的成員,就是你要放在下拉選單中讓使用者選擇的項目,當然!必須包含在 DataSource 中,不然就會找不到。

    3:ComboBox .ValueMember
         英翻中,變數成員,今天有的下拉的選項之後,可能是帶變數的字串,這個就是用來指定各成員的代表變數,例:下拉選單有產品的類別:五金類、家庭類、油漆類…,不過寫入資料庫的值是各分類的代表數字,這個時候就可以來使用 ValueMember。

    4:ComboBox .SelectedIndex
         當你使用了 ValueMember 之後,ValueMember 就會把選擇的值丟到 SelectedIndex 裡,我們再透過 SelectedIndex 來取出所選擇的值,例:lbl1.Text = ComboBox .SelectedIndex.ToString ,這時候控制項 lbl1 就會出現我們在 ComboBox 所選的代表變數。

    • 已標示為解答 張秀婷 2010年3月12日 上午 07:20
    2010年3月12日 上午 02:19
  • 先指定 combobox2.datasource
    再指定 combobox2.displaymember 跟 combobox2.valuemember
    2010年3月12日 上午 02:25