我需要做的是:
.mdb
文件DataGrid
的{{1}} 2个字段和Table1
我被困在第2点,我无法加入这两张桌子,我一直在使用table2
和INNER JOIN
。
我的LEFT JOIN
数据库有2个表,每个表都有.mdb
,Field1
和Field2
。
我想显示Field3
,Table1.Field1
,Table1.Field2
。
我的代码(在Table2.Field3
事件上)是:
button_click
使用此代码,仅显示表1中的字段1和。
但如果我改变了这个:
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()
对此:
Dim Sql As String = "SELECT Tabla1.Campo1, Tabla1.Campo2, Tabla2.Campo3"
Sql += " FROM Tabla1 LEFT JOIN Tabla2 ON Tabla1.Campo3 = Tabla2.Campo3"
它会起作用!
但为什么?
如果真正的MDB有更多的表格和字段,我应该如何在我的新桌子上重新安排我的字段?
由于
答案 0 :(得分:0)
尝试使用da.SelectCommand = cmd
代替da = New OleDbDataAdapter(cmd)
并看看是否有效。这是我唯一能想到的事情。你的代码看起来不错。
答案 1 :(得分:0)
我找到了解决方案。 我的问题是我不知道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"
谢谢