2016-07-04 13 views
0

Ich arbeite in einem Formularentwurf, in dem ich möchte, dass die Benutzer Kaufartikel aus Kombinationsfeldern auswählen und den Einheitspreis und die Kaufmenge eingeben. Alle vom Benutzer ausgewählten und eingegebenen Informationen werden zu einer anderen Tabelle hinzugefügt. Hier verwende ich Do Until Loop, um Kaufdatensätze einzeln hinzuzufügen. Ich habe die Do Until Loop ausprobiert. Es läuft gut. Als ich jedoch diese Schleife mit Insert Into-Anweisung abgeschlossen habe, erhielt ich einen Syntaxfehler. Bitte helfen Sie mir zu überprüfen, wo das Problem liegt. Vielen Dank.Syntaxfehler der SQL-Insert-Anweisung im Zugriff

Mein Code:

Private Sub Command133_Click() 
Dim i As Integer 
i = 1 
Do Until IsNull(Me.Controls("cboPurchaseItem" & i)) 
    Dim StrSql As String 
    StrSql = "Insert Into test2 (PurchaseID, 
           PurchaseDate, 
           ExpectedDeliveryDate, 
           Supplier, 
           PurchaseItem, 
           Unit, 
           PurchaseQuantity, 
           UnitCost, 
           OrderStatus,)" & _ 
      " VALUES('" & Me!txtOrderID & "', 
        #" & Format(Me!txtOrderDate, "yyyy/mm/dd") & "#, 
        #" & Format(Me!txtDeliveryDate, "yyyy/mm/dd") & "#, 
        '" & Me!cboSupplierCompany & "', 
        '" & Me.Controls("cboPurchaseItem" & i) & "', 
        '" & Me.Controls("txtUnit" & i) & "', 
        " & CStr(Me.Controls("TxtQty" & i)) & ", 
        " & CStr(Me.Controls("TxtPrice" & i)) & ", 
        'Ordered')" 
    CurrentDb.Execute (StrSql) 
MsgBox " You have successfully added " & i & " records to the PurchaseOrderDetail table." 
i = i + 1 
Loop 
End Sub 
+0

Ich habe einen Fehler gefunden. ein zusätzliches Komma "," wurde nach OrderStatus falsch eingegeben. Das ist die Fehlermeldung. Zu meiner Überraschung können Daten in Me! CboSupplierCompany und Me.Controls ("cboPurchaseItem" & i) nicht zu der Tabelle hinzufügen, in der sie leer angezeigt wird. –

Antwort

0

Betrachten Sie eine parametrisierte SQL-Abfrage (eine bewährte Methode in der modernen Programmierung) unter Verwendung eines QueryDef-Objekt, das die Notwendigkeit für Zitate oder Ziffern vermeidet Werte einzuschließen. Fügen Sie einfach die PARAMETERS-Klausel am Anfang der Zeichenfolgenanweisung hinzu und binden Sie die Werte dann iterativ in die Schleife.

Wie bei den Kombinationsfeldern, die fehlschlagen, wenn sie leer sind, liegt das möglicherweise an dem VBA-Nullstring, der in der Abfrage nicht als Zeichenfolgenliteral übergeben werden kann. Versuchen Sie, die Nz()-Funktion zu lösen, um einen Nulllängen-Zeichenfolge-Wert zurückzugeben, wenn Kombinationsfelder leer sind.

Dim qdef As Querydef 
Dim i As Integer: i = 1 
Dim StrSql As String 

' PREPARE SQL STATEMENT ' 
StrSql = "PARAMETERS [PIDParam] Integer, [PDateParam] Datetime," _ 
      & " [EDDateParam] Datetime, [SupplierParam] Text(255)," _ 
      & " [PItemParam] Text(255), [UnitParam] Text(255), [PQtyParam] Long," _ 
      & " [UnitCostParam] Double, [OrderStatusParam] Text(255);" _ 
      & " INSERT INTO test2 (PurchaseID, PurchaseDate," _ 
      & "     ExpectedDeliveryDate, Supplier, PurchaseItem, Unit," _ 
      & "     PurchaseQuantity, UnitCost, OrderStatus)" _ 
      & " VALUES ([PIDParam], [PDateParam], [EDDateParam]," _ 
      & "   [SupplierParam], [PItemParam], [UnitParam], [PQtyParam]," _ 
      & "   [UnitCostParam], [OrderStatus]);" 

Do Until IsNull(Me.Controls("cboPurchaseItem" & i)) 
    ' INITIALIZE QDEF ' 
    Set qdef = CurrentDb.CreateQyerydef("", StrSqL) 

    ' BIND PARAMETERS TO STATEMENT ' 
    qdef!PIDParam = Me!txtOrderID 
    qdef!PDateParam = Me!txtOrderDate 
    qdef!EDDatePram = Me!txtDeliveryDate 
    qdef!SuppierPram = Nz(Me!cboSupplierCompany) 
    qdef!PItemParam = Nz(Me.Controls("cboPurchaseItem" & i)) 
    qdef!UnitParam = Me.Controls("txtUnit" & i) 
    qdef!PQtyParam = CStr(Me.Controls("TxtQty" & i)) 
    qdef!UnitCostParam = CStr(Me.Controls("TxtPrice" & i)) 
    qdef!OrderStatusParam = "Ordered" 

    ' EXECUTE APPEND QUERY ' 
    qdef!Execute dbFailOnError 
    i = i + 1 
Loop 

MsgBox "You have successfully added " & i _ 
     & " records to the PurchaseOrderDetail table.", vbInformation, "APPEND SUCCESS" 

Set qdef = Nothing