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