2014-02-26 9 views
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 ***************************************************************************** 

回答

1

在大多數情況下,想

倒不如定義使用代碼,而不是鏈接。

......會是錯的。數據庫進行了優化,以許多方式完成這種事情。你只需編寫代碼來自己創建第三個數據集,並且我敢打賭,你編寫的代碼不會像數據庫那樣有效。

使用加入。它們是數據庫的用途。

+0

但我同意,鏈接被刪除的原因是爲了維護目的。如果數據庫移動到另一個位置,只要在應用程序配置中指定了新的連接字符串,它就不會中斷鏈接。但是,如果我繼續使用訪問中的鏈接,支持技術人員需要在訪問數據庫中定義新路徑以及應用程序配置文件。更可能的是,他們會忘記這麼做,這會導致更多的問題。因此我的推理。我知道這種表現會減少。但必須在這種情況下完成。謝謝。 – nimblebit

相關問題