|
>▼小僧様
Option Compare Database
Option Explicit
Private Sub EventLogAccess_Click()
Dim txtData As Variant, FNo As Long, arrData, i As Integer
Dim Con As New ADODB.Connection, Rec As New ADODB.Recordset
Dim strFilePath As String, returnValue
DoCmd.RunSQL "Delete From INPUTDATA"
'[ファイルを開く]ダイアログボックスを表示
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
Rec.Open "INPUTDATA", Con, adOpenDynamic, adLockOptimistic
FNo = FreeFile
Open strFilePath For Input As #FNo
'ファイルの1行目の項目名部分を読み込む(何も処理しない)
For i = 1 To 8
Line Input #FNo, txtData
Next i
On Error GoTo ErrHndl
'エラーが発生した場合にデータのインポートをなかったこと(ロールバック)
'にするためにトランザクション処理として実行
Con.BeginTrans
'実際のデータ部分(2行目)からの処理
Do While Not EOF(FNo)
Line Input #FNo, txtData
arrData = Split(txtData, ",")
If arrData(0) = " " Then
Exit Do
End If
Rec.AddNew
'引用符を削除してからフィールドに値を代入する
Rec("日付") = Split(arrData(2), " ")(0)
Rec("時間") = Split(arrData(2), " ")(1)
Rec("ComputerName") = arrData(4)
Rec("Description1") = Split(arrData(7), " ")(0)
Rec("Description2") = Split(arrData(7), " ")(1)
Rec.Update
Loop
Con.CommitTrans
Close #FNo
DoCmd.OpenForm "TimeForm", acPreview
Exit Sub
ErrHndl:
Close #FNo
Con.RollbackTrans
MsgBox "以下のエラーが発生したためロールバックしました。" & vbCrLf & _
Err.Description, vbCritical
End Sub
上記のようにしたところ、yyyymmdd.csvのデータを編集しなくても、INPUTDATAテーブルへインポートされました。
しかしインポートされたデータが""で囲まれてしまったのです。
例:フィールド1 フィールド2 フィールド3・・・
"2009/12/10 12:00:00" "ComputerName"
のような感じで、Split関数で分離させたものは、片方ずつに"が付き。
Split関数を使用していないものは両端が""で囲まれておりました。
そのため、正常に時間を取得させることができなくなったのです。
Line Input #FNo, txtData←この時に全てのデータが""で囲まれていました。
For i = 1 To 8
Line Input #FNo, txtData
Next i
↑この文を入れると、そうなるのでしょうか?
ちなみに小僧様より戴いた、サンプルではFor文の箇所を
1 to 8にしてもなぜか、インデックスが有効範囲にありませんと
エラーが出ます。
Do while not
Do Until の部分が違うからでしょうか?
一から勉強していては今回の業務には間に合いそうにもありませんので、
どうかご協力をお願い致します。
もちろん小僧様のお時間が許すときで結構ですので、ご返信の程
お願い致します。
|
|