2016-04-07 2 views
1

Ich versuche, eine Abfrage einer verknüpften Tabelle durchzuführen. Nachdem ich die Ergebnisse erhalten habe, muss ich 1 von 2 Sachen machen. Entweder es ist bestanden oder nicht bestanden. Hier ist der Code, den ich geschrieben habe. Es gibt mir keine Fehler, noch läuft es richtig. Wenn ich ein SN eintrage, weiß ich, dass es keine Einträge hat, es führt nicht den zweiten Teil (den Fehlerteil).VBA-SQL-Abfrage mit verschiedenen Aktionen je nach Ergebnis

Private Sub SQL_Check() 
Dim rs As DAO.Recordset 
Dim sqlMax As String 
Dim result As String 

sqlMax = "Select count(1) FROM dbo_Event WHERE [AssemblyNo] = 'SYSCHATESTE' and [SerialNo] = '" & Me.txtUnitNo & "' and [ProcessTyp] = 'SF1';" 
Set rs = CurrentDb.OpenRecordset(sqlMax) 

If rs.Fields.Count = 1 Then 
     txtECCT.BackColor = vbGreen 
     txtECCT.ForeColor = vbBlack 
     txtECCT.Value = "Passed" 
     GoTo la 
     End If 
If rs.Fields.Count = 0 Then 
Set rs = Nothing 
Set db = CurrentDb 
Set rec = db.OpenRecordset("Select * from tblScannedParts") 
rec.AddNew 
rec("Inspector") = Me.txtUserId 
rec("PO Number") = Me.txtWorkOrderNo 
rec("Assembly") = Me.txtAssem 
rec("SERIAL Number") = Me.txtUnitNo 
rec("DateScanned") = CStr(Now()) 
rec("Result") = "Failed" 
rec("Defect Type") = "Missing ECCT" 
rec("Comments") = strFileContent 
rec("Qty") = "1" 
rec.Update 
txtStatus.BackColor = vbRed 
txtStatus.ForeColor = vbBlack 
txtStatus.Value = "Failed" 
MsgBox "Please take unit to NCM Cart for review.", vbCritical, "Unit Not Ready for DOF QA" 
txtAssem.SetFocus 
End If 

la: 
Set rs = Nothing 
End Sub 
+1

Die Datensatz 'rs' auf einem' SELECT' basiert, die ein Feld zurückgibt, so dass Ihre 'If' Zustand,' rs.Fields.Count = 1 ', wird immer wahr sein. – HansUp

+0

Danke. Ich habe eine Variable hinzugefügt. Wenn rs.Fields.Count = 1 Dann result = rs.Fields (0) Ende Wenn und hatte die Überprüfung basierend darauf durchgeführt. Scheint jetzt zu arbeiten. –

Antwort

1

Das Problem ist, dass das Re-Cord rs auf einem SELECT basiert, die ein Feld zurückgibt, so dass Ihre If Zustand, rs.Fields.Count = 1, immer wahr sein wird.

Umgekehrt könnte der Code innerhalb des If rs.Fields.Count = 0 Then Blocks nie laufen, weil Fields.Count niemals Null wäre. Und tatsächlich evaluiert Access diese Bedingung nicht einmal, weil Sie GoTo la in dem vorherigen If Block eingefügt haben, der die Prozedur schnell beendet. Seien Sie wachsam von GoTo

Wenn Sie die Aktion auf eine Anzahl von übereinstimmenden Datensätzen basieren, denke ich, dass die Logik mit DCount() einfacher sein sollte.

Dim strCriteria As String 
Dim lngMatchCount As Long 

strCriteria = "[AssemblyNo] = 'SYSCHATESTE' AND [SerialNo] = '" & Me!txtUnitNo.Value & "' AND [ProcessTyp] = 'SF1'" 
Debug.Print strCriteria '<- inspect this in Immediate window; Ctrl+g will take you there 
lngMatchCount = DCount("*", "dbo_Event", strCriteria) 

If lngMatchCount > 0 Then 
    ' do the 'Passed' thing 
Else 
    ' do the 'Failed' thing 
End If 
Verwandte Themen