|
▼cocoa さん:
こんにちは。
> 毎回1〜7行を削除して実行していたのですが、
> 実際のデータ部分(8行目)
1行目を飛ばす処理がプログラムに入っているので
実際に削ったのは2〜7行目でしょうか。
多少変更を加えて下記の様にしてみました。
Private Sub EventLogAccess_Click()
Dim txtData As String
Dim FNo As Long
Dim arrData As Variant
Dim i As Integer
Dim Con As New ADODB.Connection
Dim Rec As New ADODB.Recordset
Dim strFilePath As String
Dim returnValue As Long
'[ファイルを開く]ダイアログボックスを表示
WizHook.Key = 51488399
returnValue = WizHook.GetFileName( _
0, "", "", "", strFilePath, "", _
"CSVファイル (*.csv)|*.csv", _
0, 0, 0, True _
)
WizHook.Key = 0
'[キャンセル]がクリックされた場合は即終了
If returnValue <> 0 Then
Exit Sub
End If
Set Con = CurrentProject.Connection
Con.Execute "Delete From INPUTDATA"
Rec.Open "INPUTDATA", Con, adOpenDynamic, adLockOptimistic
FNo = FreeFile
Open strFilePath For Input As #FNo
'先頭〜7行目までを読み飛ばす
For i = 1 To 7
Line Input #FNo, txtData
Next i
On Error GoTo ErrHndl
'エラーが発生した場合にデータのインポートをなかったこと(ロールバック)
'にするためにトランザクション処理として実行
Con.BeginTrans
'実際のデータ部分(8行目)から
'EOF(End Of File)までループ
Do Until EOF(FNo)
Line Input #FNo, txtData
arrData = Split(txtData, ",")
'先頭に半角スペースがあった場合はループを抜ける
If arrData(0) = " " Then
Exit Do
Else
Rec.AddNew
Rec("xxDate") = Split(arrData(2), " ")(0)
Rec("xxTime") = Split(arrData(2), " ")(1)
Rec("ComputerName") = arrData(4)
Rec("Description1") = Split(arrData(7), " ")(0)
Rec("Description2") = Split(arrData(7), " ")(1)
Rec.Update
End If
Loop
Close #FNo
Rec.Close
Set Rec = Nothing
Con.CommitTrans
Con.Close
Set Con = Nothing
DoCmd.OpenForm "TimeForm", acPreview
Exit Sub
ErrHndl:
Close #FNo
Con.RollbackTrans
Con.Close
Set Con = Nothing
MsgBox "以下のエラーが発生したためロールバックしました。" & vbCrLf & _
Err.Description, vbCritical
End Sub
> Rec("Date") = Split(arrData(2), " ")(0)
> Rec("Time") = Split(arrData(2), " ")(1)
INPUTDATA テーブルの「Date」「Time」という列名は予約語です。
h tp://support.microsoft.com/default.aspx?scid=kb;ja;286335
予約語を列名にすると
予期しない箇所でエラーが出る事がありますので、
列名の変更をした方が無難ですね。
> DoCmd.RunSQL "Delete From INPUTDATA"
DoCmd は非同期の処理なので
DELETE が全部終わらない内に
次の処理が始まる可能性があります。
今回はファイルダイアログを出す処理を挟むので
特に問題はないと思われますが、
ADO.Connection の Excute メソッドにて同期処理が取れるので
変更を加えてあります。
|
|