|
▼ichinose さん:
こんばんは。
早速のお返事ありがとうございます。
質問が不適切であった様ですみません。
>▼mon さん:
>こんばんは。
>
>
>>以下のようなプログラムをつくり、テキストファイルのデータを1行づつSQLServer上のテーブルにINSERTしようとしています。
>>仮に、テキストファイルのデータが40行だとすると、40件のデータをINSERTした後 41件目に空データをINSERT使用としてエラーになります。
>>エラーメッセージは
>>「文字列''が終了していません。」
>>となっています。
>>エラーになった際に発行したSQL文をクエリアナライザで実行するとテーブルにINSERTすることができます。
>>
>>一体どこがエラーになっているのか自分では分からなくてて・・・
>>
>>
>>ロジック等 どこがおかしいかお分かりでしたら教えてください。
>>お願いします。m(_ . _)m
>>
>>
>
>
>>------------------------------------------------------------------
>>
>>'SQLServerとの接続は既に確立された状態
>>con.BeginTrans
>>
>>Dim strDataFile as string
>>strDataFile = "D:\LOG.txt"
>>Dim pFileNo As Integer
>>pFileNo = FreeFile
>>'ファイルのオープン
>>Open strDataFile For Random As #pFileNo Len = 40
>'何故、テキストファイル(テキストファイルですよね?)を
>'ランダムモードでオープンしているのですか?
>'通常、テキストファイルには Cr+lfと言うコードが一行の最後に
>'入っています。これをも読み込むという計算の上でのことですか?
>'あるいは、Cr+lfが元々入っていないファイルなのですか?
CrLfは入っています。
読み込むテキストファイルは固定長で、一行が2000字以上になることもあります。
何故ランダムモードにしたのかはちょっと・・ 忘れました。(--;;)
(テキストファイルは読み込みだけで、書き込み処理はありません。)
>>Do While Not EOF(pFileNo)
>>
>> Get #pFileNo, , mKuni_kani
>' ↑この変数と
>'下のSQL文字列の相関はどうなっていますか?
ちょっと 省略してしまったのですが、読み込むテキストファイルが固定長なので
ユーザ定義関数を定義しました。
定義の中を表示させてみて、各値は正確にテキストファイルから読み込むことが出来ています。
ユーザ定義関数を使って読み込むデータを定義しています。
>> 'SQL文生成
>> Dim sql as string
>> sql = "INSERT INTO (テーブル名) VALUES ((テキストファイルからとったデータ),(テキストファイルからとったデータ),(テキストファイルからとったデータ))"
>実際のSQLは↑ではないですよね?
>これで40行目までは正しくデータが入っているのですか?
入れることができます。
トランザクションを一件づづコミットさせると、40件のデータが正しく、テーブルに格納されます。
>> On Error Resume Next
>> con.Execute sql
>> If (Err) Then
>> con.RollbackTrans
>>
>> MsgBox Err.Description & vbCrLf & sql
>> Err.Clear
>> Exit Do
>> End If
>>
>>Loop
>>Close #pFileNo
>>
>>If (Err.Number = 0) then
>> con.CommitTrans
>>End If
>>On Error GoTo 0
お手数おかけします。
よろしくお願いします。
|
|