我以前在访问数据库中有一个外部链接表。代码工作正常。
但我认为最好使用代码来定义链接。
所以现在我已经为每个表分隔了sql以填充每个数据集。
如何使用外键加入两个数据集来创建新的组合数据集表?
下面我复制了以前的SQL并尝试创建新的组合数据集。但我不知道该怎么做......请你能帮忙吗?
这是原始代码
' Querying data from database
Using oConn As New OleDbConnection(strConnOrders)
oConn.Open()
' First Select the supplier details best on the specified Preferred Supplier Foreign Key in tblOrderDetails.
Dim sSQL As String
sSQL = "SELECT O.fldBarcode, O.fldProductCode, O.fldProductName, O.fldPackSize, O.fldOrderQty, " & vbCrLf & _
"O.fldOrderFK, O.fldPrefSupplierFK, S.fldID,IIF(O.fldPrefSupplierFK IS NULL OR O.fldPrefSupplierFK = 0 " & vbCrLf & _
"OR O.fldPrefSupplierFK = 34 OR O.fldPrefSupplierFK = 1, 'Unspecified Supplier',S.fldSupplierName) AS fldSupplierName, S.fldSupplierAddress, " & vbCrLf & _
"S.fldSupplierPostCode, S.fldSupplierPhone, S.fldSupplierFax, S.fldSupplierEmail, S.fldSupplierWeb, S.fldContactName, " & vbCrLf & _
"IIF(S.fldAccountNo IS NULL, 'NA', S.fldAccountNo) AS fldAccountNo " & vbCrLf & _
"FROM tblOrderDetails O LEFT OUTER JOIN tblSuppliers S ON O.fldPrefSupplierFK = S.fldID " & vbCrLf & _
"WHERE (O.fldSelect = True);"
Using da As New OleDbDataAdapter(sSQL, oConn)
da.Fill(ds, "Report1Data")
End Using
End Using
这是新的测试代码
' THE DATASETS ARE FILLED SEPERATELY THIS TIME
Dim dsSuppliersTable As New DataSet
Dim dsOrdersTable As New DataSet
Dim dsCombinedTable As New DataSet
Dim dsReportData As New DataSet
Dim strSqlSupplierFields As String = "SELECT S.fldID, fldSupplierName, S.fldSupplierAddress, S.fldSupplierPostCode, " & _
"S.fldSupplierPhone, S.fldSupplierFax, S.fldSupplierEmail, S.fldSupplierWeb, " & _
"S.fldContactName FROM tblSuppliers;"
dsSuppliersTable = getDatasetTable(strConnSuppliers, strSqlSupplierFields, "tblSuppliers")
Dim strSqlOrderFields As String = "SELECT O.fldBarcode, O.fldProductCode, O.fldProductName, O.fldPackSize, O.fldOrderQty, " & _
"IIF(O.fldPrefSupplierFK IS NULL OR O.fldPrefSupplierFK = 0, S.fldID, " & _
"OR O.fldPrefSupplierFK = 1, 'Unspecified Supplier', S.fldSupplierName) AS fldSupplierName, " & _
"O.fldOrderFK, O.fldPrefSupplierFK FROM tblOrderDetails WHERE (O.fldSelect = True);"
dsOrdersTable = getDatasetTable(strConnOrders, strSqlOrderFields, "tblOrders")
If dsOrdersTable.Tables(0).Rows.Count > 0 Then
' MERGE THE DATA FROM dsOrdersTable and dsSuppliersTable
' LINK THEM TOGETHER USING THE FOREIGN KEY
dsCombinedTable.Tables("Report1Data") ' I'M NOT SURE WHAT TO DO HERE TO JOIN THE DATASETS TOGETHER
' ALSO THE IIF STATEMENT IN strSqlOrderFields IS WRONG NOW, BECAUSE IT USED TO LINK TO THE SUPPLIERS TABLE
' HOW CAN I SOLVE THIS?
' THEN SAVE THE NEW COMBINED DATASET INTO dsReportData,
dsReportData.Tables.Add(dsCombinedTable.Tables("Report1Data"))
End If
' THIS IS THE END OF NEW TEST CODE *****************************************************************************
答案 0 :(得分:1)
在大多数情况下思考
最好使用代码来定义链接。
......会错的。数据库经过优化,可以通过多种方式完成此类操作。你只需要编写代码来自己创建第三个数据集,我敢打赌你编写的代码不会像数据库那样高效。
使用加入。它们就是数据库的用途。