我需要做的是:
.mdb
文件DataGrid
2个字段Table1
和1个字段上显示table2
我陷入第2点,我无法使用两个表,我一直在使用INNER JOIN
和LEFT JOIN
。
我的.mdb
数据库有2个表,每个有Field1
,Field2
和Field3
。我想显示Table1.Field1
,Table1.Field2
,Table2.Field3
。
我的代码(关于button_click
事件)是:
Dim openFile As New OpenFileDialog()
openFile.FileName = ""
openFile.Filter = "Microsoft Access Application (*.mdb)|*.mdb"
Dim res As System.Windows.Forms.DialogResult = openFile.ShowDialog()
If res = System.Windows.Forms.DialogResult.Cancel Then
Return
End If
Dim CONNECT_STRING As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + openFile.FileName
Dim cnn As New OleDbConnection(CONNECT_STRING)
cnn.Open()
'PROBLEM HERE
Dim Sql As String = "SELECT Tabla1.Campo1, Tabla1.Campo2, Tabla2.Campo3"
Sql += " FROM Tabla1 LEFT JOIN Tabla2 ON Tabla1.Campo3 = Tabla2.Campo3"
Dim cmd As New OleDbCommand(Sql, cnn)
Dim da As New OleDb.OleDbDataAdapter(cmd)
Dim ds As New DataSet
da = New OleDbDataAdapter(cmd)
da.Fill(ds, "joined")
dGrid.DataSource = ds.Tables("joined")
cnn.Close()
使用此代码,仅显示表1中的字段1和2。
但是如果我改变这个:
Dim Sql As String = "SELECT Tabla1.Campo1, Tabla1.Campo2, Tabla2.Campo3"
Sql += " FROM Tabla1 LEFT JOIN Tabla2 ON Tabla1.Campo3 = Tabla2.Campo3"
对此:
Dim Sql As String = "SELECT Tabla1.Campo1, Tabla1.Campo2,Tabla2.Campo3"
Sql += " FROM Tabla1 LEFT JOIN Tabla2 ON Tabla1.ID = Tabla2.ID"
会工作的!
但为什么?
如果我的真实MDB有更多的表和字段,应该如何在新表上重新排列字段?
谢谢
我找到了解决方案。我的问题是我不知道INNER JOIN应该如何工作。如果有人遇到与我相同的问题,我将进行解释。要使用INNER JOIN,要联接的表必须有1个共同的字段,通常这是ID,但是在我的情况下,我的数据库没有一个。
因此,在解决我的问题时,我需要使用以下代码创建一个ID字段:
Dim oQuery As String = "ALTER TABLE FloatTable ADD COLUMN ID Identity(1,1)"
Dim oComm = New OleDbCommand(oQuery, cnn)
oComm.ExecuteNonQuery()
之后,我可以毫无问题地使用INNER JOIN了:
Dim Sql As String = "SELECT FloatTable.DateAndTime, FloatTable.Millitm, FloatTable.TagIndex, FloatTable.Val, StringTable.TagIndex"
Sql += " FROM FloatTable INNER JOIN StringTable ON FloatTable.ID = StringTable.ID"
谢谢
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句