2016-04-07 11 views
1

リンクテーブルのクエリを実行しようとしています。私は結果を得た後、私は2つの事の1つを行う必要があります。それが合格したか失敗したかのいずれか。ここに私が書いたコードがあります。それは私にエラーを与えないし、正しく実行されません。私がSNを入力するとき、それは2番目の部分(失敗部分)を実行しないエントリを持っていない知っている。結果に応じて異なるアクションのVBA SQLクエリ

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

レコードは 'rs'は、1つのフィールドを返す' SELECT'ので、あなたの 'If'条件、' rs.Fields.Count = 1 'に基づいており、常にTrueになります。 – HansUp

+0

ありがとうございます。私は変数を追加しました。 If rs.Fields.Count = 1 Then result = rs.Fields(0) End Ifそれに基づいてチェックが行われました。今働いているようだ。 –

答えて

1

問題は、レコードセットrsがあなたのIf条件、rs.Fields.Count = 1は、常にTrueになりますので、一つのフィールドを返しSELECTに基づいていることです。

逆に、Fields.Countが決してゼロにならないため、If rs.Fields.Count = 0 Thenブロック内のコードは実行できませんでした。そして、実際には、前のIfブロックにGoTo laを含めたため、Accessはその条件を評価しません。すぐにプロシージャを終了します。 GoTo

アクションを一致するレコードの数に基づいて設定する場合は、ロジックがDCount()でより簡単になるはずです。

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 
関連する問題