2014-04-01 172 views
1

我有一個訪問數據庫,其中包含一個包含員工信息的表。我的問題是,我想循環訪問另一個表,以確定某個特定的特徵是真是假,然後以連續的形式顯示所有真實的記錄。它仍然填充所有記錄,而不僅僅是真實的記錄。請參閱下面的代碼。訪問VBA記錄集

Private Sub RunQuery_Click() 
Dim strSQL As String 
Dim dba As Database 
Dim tbl As Recordset 
Dim Code As String 
Dim status As String 

Set dba = CurrentDb 
strSQL = "SELECT DISTINCT EmployeeName,SSN,Location,SystemAssignedPersonID FROM dbo_tbl_Random " 
strSQL = strSQL & "WHERE MenuUsed = 'Random' ORDER BY Location,EmployeeName" 
Set tbl = dba.OpenRecordset(strSQL, dbOpenDynaset, dbSeeChanges) 
With tbl 
    .MoveFirst 
    If tbl.EOF Then 
    MsgBox "There are no employees on Random at this time.", , "Oops! Try Again" 
    Else 
    Do Until tbl.EOF 
     status = getEmpStatusID(tbl!SystemAssignedPersonID) 
     If status = "A" Then 
     Set Me.Recordset = tbl 
     .MoveNext 
     Else 
     .MoveNext 
     End If 
    Loop 
    End If 
End With 
Set tbl = Nothing 
Set dba = Nothing 
End Sub 

getEmpStatusID是一個單獨的函數,不給我麻煩。它查找員工ID以獲取信息並將其返回正常。

感謝您的幫助!

+0

這是否需要做爲循環?爲什麼不使用記錄集,只需通過SQL來完成? – Brad

+0

感謝您的回覆@Brad我不太熟悉VB中複雜的SQL語句。如果你能提供一些指導,將不勝感激。 – designspeaks

+0

這比操作記錄集要簡單得多。 getEmpStatusID是做什麼的? – Brad

回答

2

我認爲你已經是那裏的大部分了。根據什麼getEmpStatusID確實可以做這樣的事情

SELECT DISTINCT EmployeeName,SSN,Location,T.SystemAssignedPersonID 
FROM dbo_tbl_Random R 
Inner JOin Table_Where_Status_Is_Found as T 
    on T.SystemAssignedPersonID = R.SystemAssignedPersonID 
WHERE MenuUsed = 'Random' and T.SystemAssignedPersonID = 'A' 
ORDER BY Location,EmployeeName 

使用,作爲行來源爲表單並且不使用VBA。不過,您的表單不能更新,因爲您使用了distinct。這是必要的嗎?

+0

這是沒有必要的。非常感謝! – designspeaks

+1

我更新了查詢。您可以將這兩個表格一起加入您的公共專欄。如果在另一個稱爲「主鍵」('PK')的表中沒有重複的SystemAssignedPersonID。如果'dbo_tbl_Random'的'SystemAssignedPersonID'列中的數據僅限於第一個表的'SystemAssignedPersonID'列的值,那麼這一列就稱爲'外鍵'。 – Brad

+1

您可以在查詢設計器中做到這一點,但將這兩個表放入,然後在第一個表中單擊您的PK,然後拖放到另一個表中的FK。這會爲你創建連接。 – Brad