访问db到vb.net组合框

时间:2017-03-20 19:02:27

标签: database vb.net combobox access

我今天在不同的论坛上巡游,并观看了一些关于这个主题的视频,并继续遇到问题,所以我在这里问。如果已经回答,我道歉,但这不是因为我缺乏看法。我是数据库和编程主题的新手,所以我对这个问题的措辞或措辞可能对我没有帮助。

无论如何,我正在vb.net中构建一个设备大小计算器,数据存放在Access中。当我来到每个新表格时,我将有一个新的设备我正在调整。我在每个表单中设置了一个数据网格视图,以及几个用于查询数据网格视图的组合框。这工作正常,我连接到数据库很好,但我无法从我的数据库中获取值填充到过滤组合框中。我会发布一些代码,尽管我尝试了多种不同的参数和方法。

目前的情况如下:

Access.ExecQuery("Select Distinct [RegModel] from [tblRegulators]")

If Not String IsNullOrEmpty(Access.Exception) Then
MsgBox(Access.Exception) : Exit Sub
End If

cmbRegulators.Items.Add(Access.dbdt)

Access是对我处理数据库连接,声明数据适配器和数据表以及其他一些事情的新类的调用,所以这一切都在访问命令中处理(右项?)。

现在我对此的看法与我今天看到的很多例子有点不同,但似乎比其中一些好一些。当我填充datagridview时,我使用类似的逻辑,除了查询不同,而不是     cmbregulators.items.add(Access.dbdt) 它是     dgvRegulators.datasource = access.dbdt

现在,当我使用组合框时,我得到了systemdata.data.rowviews或组合框中填充的那些东西,组合框中没有任何东西,除了斜杠,并且有一行代码我得到了监管机构上市,但重复。现在在这种情况下,所有行都是不同的,所以我不明白它是如何重复它们的。我甚至尝试浏览组合框的属性并将数据源指向我想要的特定数据列,我仍然从上面得到了systemdata.data.rowviews。

到目前为止,我想我已经尝试过:

cmbregulators.items.add(access.dbdt)
cmbregulators.itesm.addrange(access.dbdt)
cmbregulators.items.add(access.dbdt.tostring)
cmbregulators.datasource = access.dbdt
cmbregulators.datasource = access.dbdt.tostring
cmbregulators.items.add(access.dbdt.rows.tostring)

也许还有一些。我也尝试为数据库连接声明一个不同的变量,并且基本上从头开始转储数据,使用

 cmbregulators.datasource = access.dbdt
 cmbregulators.displaymember = "RegModel"
 cmbregulators.valuemember = "RegModel"

这也没有用。我相信即使在查询中使用distinct子句,也能让我获得已经唯一的数据集的重复值。

有人能指出我正确的方向还是看到问题?

Public Class dbControl
'create db connection
Private dbconnection As New       OleDbConnection("Provider=Microsoft.ACE.oledb.12.0;" &
                                            "Data Source=Station Designer.accdb;")

' Prepare DB Command
Private dbcmd As OleDbCommand

'db Data
Public dbDA As OleDbDataAdapter
Public dbDT As DataTable

' Query Parameters
Public params As New List(Of OleDbParameter)

' Query Statistics
Public RecordCount As Integer
Public Exception As String


 Public Sub ExecQuery(Query As String)
    'reset query statistics
    RecordCount = 0
    Exception = ""


    Try
        ' Open a connection 
        dbconnection.Open()

        ' Create db command
        dbcmd = New OleDbCommand(Query, dbconnection)

        ' load parameters into db command
        params.ForEach(Sub(p) dbcmd.Parameters.Add(p))

        ' clear params list
        params.Clear()

        ' execute command & fill datatable
        dbDT = New DataTable
        dbDA = New OleDbDataAdapter(dbcmd)
        RecordCount = dbDA.Fill(dbDT)
    Catch ex As Exception
        Exception = ex.Message

    End Try

    ' Close Database
    If dbconnection.State = ConnectionState.Open Then dbconnection.Close()

End Sub

这两个子程序在我创建的类下面,名为" dbcontrol"访问调用该类。请参阅下一个代码段中的第一行。

这两个是最初声明连接适配器和数据表的地方,然后是表格" s" show" event是datagrid视图提取数据的地方,它的代码如下:

  Private access As New dbControl
Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
    ' run query
    access.ExecQuery("Select * from tblInventory")
    If Not String.IsNullOrEmpty(access.Exception) Then MsgBox(access.Exception) : Exit Sub

    'fill datagridview
    dgvInventory.DataSource = access.dbDT

1 个答案:

答案 0 :(得分:0)

您可以尝试使用这样的实际连接吗?

Using conn As New OleDbConnection(Yourconnectionstring)
    conn.Open()
    Dim strQuery As String = "Select Distinct [RegModel] from [tblRegulators]"
    Dim adapter As New OleDbDataAdapter(New OleDbCommand(strQuery , conn))
    Dim ds As New DataSet()
    adapter.Fill(ds)
    cmbregulators.DataSource = ds.Tables(0)
    cmbregulators.DisplayMember = "RegModel"
    cmbregulators.ValueMember = "RegModel"
End Using