2016-09-28 49 views
0

我是一名資深的Excel VBA編碼人員,他已被拋入此表單的深層目錄中。Access數據庫項目。我正在製作表單的一部分,用戶(員工)將選擇網站位置(總共84個,但不是全部將基於他們所在的團隊顯示),然後選擇該網站內的部門。總共有2,189個部門,因此部門名單隻能顯示那些網站的名單。Visual Studio VB - 從數據表中查詢而不是數據庫

我們查詢並更新的數據庫位於非常慢的服務器上,因此我想在開始時將整個查找表(限制在團隊工作的範圍內)放入數據表中,然後填充第一個在該數據表中包含獨特站點的組合框,然後用該站點中的所有部門填充第二個組合框。

數據表或多或少只是| ID |網站|部門|。我可以很好地填充該數據表,並讓它坐在緩存中。我可以通過數據表循環來填充組合框,但這比它慢。

那麼有沒有辦法可以從該數據表查詢直接填充組合框,或填充一個輔助數據表,然後到組合框?對於第一個盒子,它發現唯一的網站是挑戰。然後,第二個部分是網站等於第一個框中選擇的部門。

謝謝!

+1

你可能會尋找[LINQ到數據集(https://msdn.microsoft .COM/EN-US /庫/ bb386977(v = vs.110)的.aspx)。 –

回答

0

您可以使用LINQ由「安德魯莫頓」提到SQL,我已經爲你的爲例:

Dim da As SqlDataAdapter = New SqlDataAdapter("select * from YourDatatable, con) 
Dim dt As New Data.DataTable() 
da.Fill(dt) 
     'You can change here your condition as you need 
Dim query = (From d1In dt.AsEnumerable() _ 
        Where d1.Field(Of Integer)("ID") = 1 And d1.Field(Of Integer) 
        Select d1!ID, order!Site , d1!Department , 
       If query.Count > 0 Then 
       comboBox1 .Items .Add (query(0).Site) 'Fill your Combobox1 
       end if  

Dim query2 = (From d2 In dt.AsEnumerable() _ 
        Where d2.Field(Of Integer)("ID") = 2 And d2.Field(Of Integer) 
      Select d2!ID, order!Site , d2!Department , 
       If query2.Count > 0 Then 
        comboBox2 .Items .Add (query2(0).Department) 'Fill your Combobox2 
       end if 
+0

謝謝!我將深入學習Linq語法。這似乎就是我所需要的。你是傳說! – dya

+0

對不起,後續問題:如何在特定子結束後保持數據表打開?或者我應該將它分配給一個列表以保存在緩存中?我希望用戶能夠在各個站點之間切換,並且仍然可以查找部門。 – dya

相關問題