0
我以前在我的訪問數據庫中有一個外部鏈接表。代碼工作正常。如何使用外鍵連接兩個數據集來創建新的數據集?
但我認爲最好是用代碼來定義鏈接。
所以,現在我已經分離了每個表的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 *****************************************************************************
但我同意,鏈接被刪除的原因是爲了維護目的。如果數據庫移動到另一個位置,只要在應用程序配置中指定了新的連接字符串,它就不會中斷鏈接。但是,如果我繼續使用訪問中的鏈接,支持技術人員需要在訪問數據庫中定義新路徑以及應用程序配置文件。更可能的是,他們會忘記這麼做,這會導致更多的問題。因此我的推理。我知道這種表現會減少。但必須在這種情況下完成。謝謝。 – nimblebit