2016-07-29 16 views
0

関連情報を取得してVFP9の.dbfテーブルに挿入するテーブルを通してループを実行しようとしています。しかし、私は自動化エラー( '-2147217913(80040e07)')を得ています。それはエラーを出す前に一度テーブルに挿入するだけで、初めて正常に動作するようです。私は、コードの実行部分をコメントアウトして毎回文字列を出力するようにしましたが、SQLは完璧に見えます。ここの問題は何ですか?ループ内でSQLクエリを使用した自動化エラー

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 

編集:ここでは、テーブルがどのように見えるかの例です。

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

'ADO.Command'を使用すると、接続で' .Execute'を直接使用する代わりにINSERTを渡すことができます。 – Comintern

答えて

0

Visual FoxProはちょうどStringリテラルまたは一連の番号として日付を受けて好きではありません。 CTOD関数(Character to Date)を使用して問題が解決するかどうかを確認してください。 行は次のようになります:

conn.Execute ("INSERT INTO amex_dist (Statement,Account,Card_user,Date,Desc,Amount) VALUES ('" & vStatement & "','" & vAccount & "','" & vCardUser & "',CTOD('" & vDate & "'),'" & vDesc & "'," & vAmount & ")") 
関連する問題