2017-07-21 3 views
0

Dieser Code funktioniert zum Ändern eines Textfeldes, wenn eine Variable vorhanden ist IntVer hat einen Wert drin. IntVer ist die Variable, die die Textboxversion enthält. Wenn der Benutzer den Befehl zum Hinzufügen aus einem leeren Textfeld auslöst, wird jedoch ein Typenkonfliktfehler angezeigt. Das ist tatsächlich ein SQL-Fehler, weil es die Zeichenfolge nicht übereinstimmen kann, da IntVer nicht vorhanden ist, so dass es zu einem Fehler führt, da es den Datensatz nicht finden kann.SQL, wenn das Recordset nicht mit der Fehlerbedingung übereinstimmt, Access

Wie kann ich dies verhindern? Ich dachte, das Hinzufügen der recordcount <>0 würde es tun, aber der SQL-Befehl wird vor dem Datensatz ausgeführt.

Also macht der Fehler Sinn für mich, ich weiß nur nicht, wie es zu beheben ist.

Vielen Dank für Ihre Hilfe,

Maxine

Private Sub cmdMod_Click() 
    Dim strSelSQL As String 

    strSelSQL = "SELECT EmpSWDetails.AssetID, EmpSWDetails.[" & SOFT & "] FROM EmpSWDetails " _ 
       & "WHERE (((EmpSWDetails.AssetID)='" & Asset & "') AND ((EmpSWDetails.[" & SOFT & "])='" & IntVer & "'));" 

    Dim con As ADODB.Connection 
    Set con = Application.CurrentProject.Connection 

    Dim rs As ADODB.Recordset 
    Set rs = New ADODB.Recordset 

    rs.Open strSelSQL, con, adOpenDynamic, adLockPessimistic 

    If rs.RecordCount <> 0 Then 
     rs.Fields(SOFT) = SELVER 'update version to new version 
    Else 
     rs!AssetID = Asset 
     rs.Fields(SOFT) = SELVER 
    End If 

    rs.Update 
    rs.Close 
End Sub 
+0

Versuchen Sie 'NZ' mit einem Wert, der keine Datensätze zurückgibt:' & Nz (IntVer, "bogus") & '. – Parfait

+0

Oder verwenden Sie "If Not IsNull (IntVer) Then", damit Code nicht einmal versucht, Recordset zu öffnen, wenn kein Wert für die Arbeit vorhanden ist. Sie können den Benutzer sogar mit einer Meldung bestrafen, dass er keine Daten bereitstellen konnte. – June7

Antwort

1

Nz() ist wahrscheinlich die beste Wahl, wenn Sie es nur diese spezifischen Fehler fangen wollen (mit Nz behandelt „beide Objekt = Null und Objekt = „“ zur gleichen Zeit machen die if-Anweisung kürzer, effizienter und besser lesbar).

Private Sub cmdMod_Click() 
    Dim strSelSQL As String 

    If Nz(intVer,"")="" then 
    msgbox "Please enter data.", vbOkOnly, "Required" 
    Else  
     strSelSQL = "SELECT EmpSWDetails.AssetID, EmpSWDetails.[" & SOFT & "] FROM EmpSWDetails " _ 
       & "WHERE (((EmpSWDetails.AssetID)='" & Asset & "') AND ((EmpSWDetails.[" & SOFT & "])='" & IntVer & "'));" 

     <the rest of your code> 
    End If 
End Sub 

wenn Sie es wünschen, alle Fehler fangen können Sie einen Fehlerhandler implementieren. Etwas li ke folgende

Private Sub cmdMod_Click() 
    Dim strSelSQL As String 
    On Error GoTo Error_Handler 

    <code> 

    Exit_Error_Handler: 
     Exit Sub 

    Error_Handler: 
     Msgbox "Error: " & Err.Number & vbCrLf & "Description: " & Err.Description 
     'You can also put code to handle specific errors 
     'For Example: If Err.Number = 13 Then Msgbox "Data required in Textbox", vbOkOnly, "Required" End If 
      GoTo Exit_Error_Handler 
    End Sub 

Fehlerbehandlung in Access ist das das einzige, was ich denken kann, wo ich würde jemals die Verwendung einer GoTo-Anweisung billigen.

+0

Vielen Dank das ist großartig! –

+0

Leider hat es nicht funktioniert. Der Knopf simple hat nichts gemacht, obwohl ich es wirklich einfach gehalten habe wie dein Beispiel und es so eingestellt, dass es eine msgbox anzeigt. @billyhoes –

Verwandte Themen