none
vb.net问题 RRS feed

  • 问题

  • Imports System.Data.OleDb

    Public Class Form1
        Dim objComm As New OleDbCommand()
        Dim adapter As New OleDbDataAdapter(objComm)
        Dim tbl As New DataTable
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim objCon As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb;")

            Dim objComm As New OleDbCommand()
            objComm.CommandText = "SELECT * FROM serial" ' 這是一個QUERY STRING 來選取資料的 
            objComm.Connection = objCon
            Dim adapter As New OleDbDataAdapter(objComm) '選取資料後可以用OleDbDataAdapter 把資料存到DATATABLE 裡 
            Dim tbl As New DataTable ' 用來存資料, 等一會可以顯示到DATAGRIDVIEW中 

            Try
                objCon.Open() ' 開啟 ACCESS CONNECTION 
                adapter.Fill(tbl) ' 把資料存到DATATABLE 裡 
                DataGridView1.DataSource = tbl '之後 ASSIGN DATAGRIDVIEW 的DATA SOURCE E.G. 用剛剛取來的DATA TABLE 


            Catch ex As Exception
                MsgBox(ex.Message) '有問題ERROR 時 POP UP ERROR MESSAGE BOX 
            Finally
                adapter = Nothing '清理 data adapter object 
                objComm = Nothing '清理 command object 
                objCon.Close()  '關掉連線 
                objCon = Nothing '清理 connection object 
            End Try
            loaddata()
        End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim objCon As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb;")

            Dim objComm As New OleDbCommand()
            objComm.CommandText = "INSERT INTO serial (Application_Name) VALUES('" & Trim(TextBox1.Text) & "')"

            '用 QUERY 來 加入資料 這次加入了 FIELD1 = 1 和 FIELD2 =2
            objComm.Connection = objCon


            Try
                objCon.Open()
                objComm.ExecuteNonQuery() '這次用 ExecuteNonQuery() 來執行這個QUERY 得動作 
                DataGridView1.DataSource = tbl
                LoadData() '          '' DATAGRIDVIEW 绑定数据库
                MsgBox("Adding data successful.", MsgBoxStyle.Information, "Add Data")


            Catch ex As Exception
                MsgBox(ex.Message)
            Finally

                objComm = Nothing
                objCon.Close()
                objCon = Nothing

            End Try
           
        End Sub

     Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            Dim conn As New OleDbConnection _
               ("provider=microsoft.jet.oledb.4.0;data source=db1.mdb")
            Dim mydataset As New DataSet()
            Dim myadapter As New OleDbDataAdapter("select * from serial", conn)
            conn.Close()
            myadapter.Fill(mydataset, "serial")
            ComboBox2.DataSource = mydataset
            ComboBox2.DisplayMember = "serial.Application_Name"
            conn.Close()

        End Sub

        
        

        Private Sub LoadData() ' DATAGRIDVIEW 绑定数据库
            Dim objCon As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb;")

            Dim objComm As New OleDbCommand()
            objComm.CommandText = "SELECT * FROM serial" ' 這是一個QUERY STRING 來選取資料的 
            objComm.Connection = objCon
            Dim adapter As New OleDbDataAdapter(objComm) '選取資料後可以用OleDbDataAdapter 把資料存到DATATABLE 裡 
            Dim tbl As New DataTable ' 用來存資料, 等一會可以顯示到DATAGRIDVIEW中 

            Try
                objCon.Open() ' 開啟 ACCESS CONNECTION 
                adapter.Fill(tbl) ' 把資料存到DATATABLE 裡 
                DataGridView1.DataSource = tbl '之後 ASSIGN DATAGRIDVIEW 的DATA SOURCE E.G. 用剛剛取來的DATA TABLE 


            Catch ex As Exception
                MsgBox(ex.Message) '有問題ERROR 時 POP UP ERROR MESSAGE BOX 
            Finally
                adapter = Nothing '清理 data adapter object 
                objComm = Nothing '清理 command object 
                objCon.Close()  '關掉連線 
                objCon = Nothing '清理 connection object 
            End Try
        End Sub

        Private Sub ComboBox2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox2.Click
            Label1.Text = ComboBox2.SelectedValue("Serial1")
        End Sub
       
    End Class

    感谢chiyau回答我的问题。但是还是无法完全解决我的问题。所以我把我的代码写出来,希望大大你能把我解决。感激不尽。。。。

    1.数据库绑定问题,我已经增加loaddata。第一次按下button1就增加数据,但却没有立刻显示出来。
    2.为什么我按下combo2,然后选着数据。却没有立刻显示数据?需要再按一次才可以显示?我有两个fields在数据库(Application_Name,Serial1),combobox2会显示Application_Name的数据,然后根据Application_Name的数据名字,在Serial1寻找,然后label1显示出Serial1的数据。
    2010年8月9日 6:54

答案

  • 你好

    這是我的部份的程式碼

    ##########################################

    Imports System.Data.OleDb
    Public Class Form1

        Private ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\Learning\Sample.mdb;"
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Label1.Text = Form2.Label1.Text '這是用來回應你另個主題發問的問題的
            LoadData()

        End Sub

        '這個功能是用來方便自己取資料的
        '這可以被 DataGridView1.DataSource = RetrieveData()這一段CODE 取代
        Public Sub LoadData()
            Dim objCon As New OleDbConnection(ConStr)

            Dim objComm As New OleDbCommand()
            objComm.CommandText = "SELECT * FROM serial"
            objComm.Connection = objCon
            Dim adapter As New OleDbDataAdapter(objComm)
            Dim tbl As New DataTable

            Try
                objCon.Open()
                adapter.Fill(tbl)
                DataGridView1.DataSource = tbl


            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                adapter = Nothing
                objComm = Nothing
                objCon.Close()
            End Try

        End Sub

        '這個功能是用來方便自己取資料的
        Public Function RetrieveData()
            Dim objCon As New OleDbConnection(ConStr)

            Dim objComm As New OleDbCommand()
            objComm.CommandText = "SELECT * FROM serial"
            objComm.Connection = objCon
            Dim adapter As New OleDbDataAdapter(objComm)
            Dim tbl As New DataTable

            Try
                objCon.Open()
                adapter.Fill(tbl)
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                adapter = Nothing
                objComm = Nothing
                objCon.Close()
            End Try

            Return tbl

        End Function

        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            ComboBox2.DataSource = RetrieveData()
            ComboBox2.DisplayMember = "Application_Name"
            ComboBox2.ValueMember = "SerialNo" '用來綁定 VALUE MEMBER 的相對內容
        End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim objCon As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\Learning\Sample.mdb;")

            Dim objComm As New OleDbCommand()
            objComm.CommandText = "INSERT INTO serial (Application_Name) VALUES('" & Trim(TextBox1.Text) & "')"

            '用 QUERY 來 加入資料 這次加入了 FIELD1 = 1 和 FIELD2 =2
            objComm.Connection = objCon


            Try
                objCon.Open()
                objComm.ExecuteNonQuery() '這次用 ExecuteNonQuery() 來執行這個QUERY 得動作
                '          '' DATAGRIDVIEW 绑定数据库
                MsgBox("Adding data successful.", MsgBoxStyle.Information, "Add Data")


            Catch ex As Exception
                MsgBox(ex.Message)
            Finally

                objComm = Nothing
                objCon.Close()
                objCon = Nothing

            End Try
            LoadData() '我把這個功能放到最後.這可以肯定當用戶加完資料後, 更新DATAGRIDVIEW1 時會出現所有資料
        End Sub

        Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
            Try
                Label1.Text = ComboBox2.SelectedValue
            Catch ex As Exception
                '用 try and catch 是因為要避免 有錯誤發生, 因為在第一次绑定数据库 時可能會 TRIGGERED SelectedIndexChanged 事件的...
                '這可能會出現錯誤()
            End Try
        End Sub

    End Class



    ###########################

    你可以到這裡DOWNLOAD 全部程式碼

    我的電腦只有 VS2010  希望你能夠開到我的檔案
    VB project
    http://www.hongkongcu.net/isaac/MicrosoftExample/AccessAccessDatabaseExample.zip

    Access Database File
    http://www.hongkongcu.net/isaac/MicrosoftExample/Sample.mdb


    2.为什么我按下combo2,然后选着数据。却没有立刻显示数据?需要再按一次才可以显示?我有两个fields在数据库(Application_Name,Serial1),combobox2会显示Application_Name的数据,然后根据 Application_Name的数据名字,在Serial1寻找,然后label1显示出Serial1的数据。

    你的意思是你 有另一個表單... 當用戶使用你的APPLICATION 時, 按COMBOBOX2 時, 他有需要去查資料庫裡另一個表單 和這個APPLICATION_NAME 的數據相關的 資料嗎?
    如果是的話, 你便要寫多一個功能來做查詢了

    希望可以解決這個問題
    Please correct me if my concept is wrong
    Chi
    • 已标记为答案 ckjason 2010年8月11日 6:38
    2010年8月9日 21:40
    版主

全部回复

  • 你好

    對不起我的理解能力和解釋能力不好

    不知道會不會有幫助

    或者你可以改變以下的CODE
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      Dim objCon As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb;")

            Dim objComm As New OleDbCommand()
            objComm.CommandText = "INSERT INTO serial (Application_Name) VALUES('" & Trim(TextBox1.Text) & "')"

            '用 QUERY 來 加入資料 這次加入了 FIELD1 = 1 和 FIELD2 =2
            objComm.Connection = objCon


            Try
                objCon.Open()
                objComm.ExecuteNonQuery() '這次用 ExecuteNonQuery() 來執行這個QUERY 得動作
                DataGridView1.DataSource = tbl
       
    '把LOAD DATA 放到最後面先執行
    '待你的增加数据 的 資料庫完成才 用LOADDATA()

        '            LoadData() '          '' DATAGRIDVIEW 绑定数据库


                MsgBox("Adding data successful.", MsgBoxStyle.Information, "Add Data")


            Catch ex As Exception
                MsgBox(ex.Message)
            Finally

                objComm = Nothing
                objCon.Close()
                objCon = Nothing

            End Try
        '把LOADDATA() 放在這裡
        LoadData()

    End Sub


    如果還未能解決你的問題...或沒有其他高人回覆/解決這個問題的話
    待我放工回家後嘗試模擬你的 APPLICATION 之後發程式碼給你參考, 大家一起研究研究這個問題

    Please correct me if my concept is wrong
    Chi
    2010年8月9日 12:12
    版主
  • 你好

    這是我的部份的程式碼

    ##########################################

    Imports System.Data.OleDb
    Public Class Form1

        Private ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\Learning\Sample.mdb;"
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Label1.Text = Form2.Label1.Text '這是用來回應你另個主題發問的問題的
            LoadData()

        End Sub

        '這個功能是用來方便自己取資料的
        '這可以被 DataGridView1.DataSource = RetrieveData()這一段CODE 取代
        Public Sub LoadData()
            Dim objCon As New OleDbConnection(ConStr)

            Dim objComm As New OleDbCommand()
            objComm.CommandText = "SELECT * FROM serial"
            objComm.Connection = objCon
            Dim adapter As New OleDbDataAdapter(objComm)
            Dim tbl As New DataTable

            Try
                objCon.Open()
                adapter.Fill(tbl)
                DataGridView1.DataSource = tbl


            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                adapter = Nothing
                objComm = Nothing
                objCon.Close()
            End Try

        End Sub

        '這個功能是用來方便自己取資料的
        Public Function RetrieveData()
            Dim objCon As New OleDbConnection(ConStr)

            Dim objComm As New OleDbCommand()
            objComm.CommandText = "SELECT * FROM serial"
            objComm.Connection = objCon
            Dim adapter As New OleDbDataAdapter(objComm)
            Dim tbl As New DataTable

            Try
                objCon.Open()
                adapter.Fill(tbl)
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                adapter = Nothing
                objComm = Nothing
                objCon.Close()
            End Try

            Return tbl

        End Function

        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            ComboBox2.DataSource = RetrieveData()
            ComboBox2.DisplayMember = "Application_Name"
            ComboBox2.ValueMember = "SerialNo" '用來綁定 VALUE MEMBER 的相對內容
        End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim objCon As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\Learning\Sample.mdb;")

            Dim objComm As New OleDbCommand()
            objComm.CommandText = "INSERT INTO serial (Application_Name) VALUES('" & Trim(TextBox1.Text) & "')"

            '用 QUERY 來 加入資料 這次加入了 FIELD1 = 1 和 FIELD2 =2
            objComm.Connection = objCon


            Try
                objCon.Open()
                objComm.ExecuteNonQuery() '這次用 ExecuteNonQuery() 來執行這個QUERY 得動作
                '          '' DATAGRIDVIEW 绑定数据库
                MsgBox("Adding data successful.", MsgBoxStyle.Information, "Add Data")


            Catch ex As Exception
                MsgBox(ex.Message)
            Finally

                objComm = Nothing
                objCon.Close()
                objCon = Nothing

            End Try
            LoadData() '我把這個功能放到最後.這可以肯定當用戶加完資料後, 更新DATAGRIDVIEW1 時會出現所有資料
        End Sub

        Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
            Try
                Label1.Text = ComboBox2.SelectedValue
            Catch ex As Exception
                '用 try and catch 是因為要避免 有錯誤發生, 因為在第一次绑定数据库 時可能會 TRIGGERED SelectedIndexChanged 事件的...
                '這可能會出現錯誤()
            End Try
        End Sub

    End Class



    ###########################

    你可以到這裡DOWNLOAD 全部程式碼

    我的電腦只有 VS2010  希望你能夠開到我的檔案
    VB project
    http://www.hongkongcu.net/isaac/MicrosoftExample/AccessAccessDatabaseExample.zip

    Access Database File
    http://www.hongkongcu.net/isaac/MicrosoftExample/Sample.mdb


    2.为什么我按下combo2,然后选着数据。却没有立刻显示数据?需要再按一次才可以显示?我有两个fields在数据库(Application_Name,Serial1),combobox2会显示Application_Name的数据,然后根据 Application_Name的数据名字,在Serial1寻找,然后label1显示出Serial1的数据。

    你的意思是你 有另一個表單... 當用戶使用你的APPLICATION 時, 按COMBOBOX2 時, 他有需要去查資料庫裡另一個表單 和這個APPLICATION_NAME 的數據相關的 資料嗎?
    如果是的話, 你便要寫多一個功能來做查詢了

    希望可以解決這個問題
    Please correct me if my concept is wrong
    Chi
    • 已标记为答案 ckjason 2010年8月11日 6:38
    2010年8月9日 21:40
    版主