2016-07-29 10 views
0

Ich versuche, eine Schleife durch eine Tabelle auszuführen, die relevante Informationen enthält, und fügt sie dann in eine VFP9-DBF-Tabelle ein. Ich bekomme jedoch immer einen Automatisierungsfehler ('-2147217913 (80040e07)'). Es scheint das erste Mal recht gut zu laufen, ein einziges Mal in eine Tabelle einzufügen, bevor es zu einem Fehler kommt. Ich habe es jedes Mal ausgedruckt, wenn der Ausführungsteil des Codes auskommentiert ist, aber das SQL sieht vollkommen gut aus. Was ist das Problem hier?Automatisierungsfehler bei Verwendung von SQL-Abfragen in einer Schleife

Dim conn As ADODB.Connection 
Dim rs As ADODB.Recordset 
Dim sConnString As String 

sConnString = "DSN=Visual FoxPro Tables;UID=;SourceDB=s:\accounting\db;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;" 

Set conn = New ADODB.Connection 
Set rs = New ADODB.Recordset 
conn.Open sConnString 

For i = 1 To [RawTable].Rows.Count 
     vStatement = "dong!" 
     vAccount = ActiveSheet.ListObjects("RawTable").DataBodyRange.Cells(i, ActiveSheet.ListObjects("RawTable").ListColumns("account").Index) 
     vCardUser = ActiveSheet.ListObjects("RawTable").DataBodyRange.Cells(i, ActiveSheet.ListObjects("RawTable").ListColumns("card member").Index) 
     vDate = ActiveSheet.ListObjects("RawTable").DataBodyRange.Cells(i, ActiveSheet.ListObjects("RawTable").ListColumns("date").Index) 
     vDesc = ActiveSheet.ListObjects("RawTable").DataBodyRange.Cells(i, ActiveSheet.ListObjects("RawTable").ListColumns("description").Index) 
     vAmount = ActiveSheet.ListObjects("RawTable").DataBodyRange.Cells(i, ActiveSheet.ListObjects("RawTable").ListColumns("amount").Index) 

     MsgBox "INSERT INTO amex_dist (Statement,Account,Card_user,Date,Desc,Amount) VALUES ('" & vStatement & "','" & vAccount & "','" & vCardUser & "','" & vDate & "','" & vDesc & "'," & vAmount & ")" 

     conn.Execute ("INSERT INTO amex_dist (Statement,Account,Card_user,Date,Desc,Amount) VALUES ('" & vStatement & "','" & vAccount & "','" & vCardUser & "','" & vDate & "','" & vDesc & "'," & vAmount & ")") 
Next i 
MsgBox "done :)", vbInformation 
If CBool(conn.State And adStateOpen) Then conn.Close 
Set conn = Nothing 

EDIT: Hier ist ein Beispiel dafür, wie die Tabelle aussehen wird.

date  receipt description card member account #   amount account 
07/01/2016   Purchase  Employee XXXX-XXXXXX-XXXXX 9.95 41000-000-00 
07/01/2016   Purchase  Employee XXXX-XXXXXX-XXXXX 33  41000-000-00 
06/29/2016   Purchase  Employee XXXX-XXXXXX-XXXXX 64  41000-000-00 
+0

eine 'ADO.Command' Verwenden Sie Ihre INSERT passieren, anstatt mit' .Execute' direkt auf die Verbindung. – Comintern

Antwort

0

SichtFoxpro nicht wie Datumsangaben als nur String Literale oder eine Reihe von Zahlen zu empfangen. Versuchen Sie es mit der Funktion CTOD (Characters to Date) und sehen Sie, ob das das Problem löst. Das sollte Execute Linie wie folgt aussehen:

conn.Execute ("INSERT INTO amex_dist (Statement,Account,Card_user,Date,Desc,Amount) VALUES ('" & vStatement & "','" & vAccount & "','" & vCardUser & "',CTOD('" & vDate & "'),'" & vDesc & "'," & vAmount & ")") 
Verwandte Themen