お世話になってます。
VB5 ACCESS2000を使っています。
TXT形式のファイルをMDBのテーブルに読み込む操作をしていて、
MDBへ読み込みはできるのですが最後に
「ファイルにこれ以上データはありません」(エラーナンバー = 62)
がでます。
コードは
Dim db As Database
Dim rs As Recordset
Dim strID As String
Dim strShimei As String
Dim strKana As String
Dim strJuusyo As String
Dim strTel As String
Dim fileNM As String
Dim TextLine
Dim Check As String
fileNM = File1.List(File1.ListIndex)
Set db = OpenDatabase("顧客契約2.mdb") 'データベースオープン
Set rs = db.OpenRecordset("顧客TBL", dbOpenTable) 'レコードセットオープン
If Option1.Value = True And Option3.Value = True And _
File1.ListIndex > -1 Then
Check = MsgBox(fileNM & "をインポートしますか?", vbYesNo, "確認")
If Check = vbYes Then
Open fileNM For Input As #1 ' ファイルを開きます。
Line Input #1, TextLine
Debug.Print TextLine
'ファイルがMDBに読み込むのに適切なファイルかどうか確認
If Mid(TextLine, 2, 4) = "顧客ID" And _
Mid(TextLine, 9, 4) = "顧客氏名" Then
Do Until EOF(1) ' ファイルの終端までループを繰り返します
ここでエラー → Input #1, strID, strShimei, strKana, strJuusyo, strTel ' 行を変数に読み込みます。
Debug.Print strID, strShimei, strKana, strJuusyo, strTel ' デバッグ ウィンドウに表示します。
rs.AddNew 'レコードセットに1レコード追加
rs.Fields("顧客ID").Value = Val(strID) '変数の内容を各フィールドへ格納
rs.Fields("顧客氏名").Value = strShimei
rs.Fields("顧客かな").Value = strKana
rs.Fields("住所").Value = strJuusyo
rs.Fields("電話番号").Value = strTel
rs.Update 'レコードセットを更新
Loop
Close #1 'CSVファイルをクローズ
Else
MsgBox "ファイルが適切ではありません"
End If
End If
End If
End Sub
読み込むデータがなくなれば ”インポート完了”とメッセージボックスで表示させたいのです。
よい方法があれば教えてください。
テキストファイルの最後の行はどうなってますか?
このエラーは、1行5項目として読もうとしているのに
3項目とか1項目しかない場合に出るエラーです。
例えば最後の行が、リターンコードだけ入っているとか…
違っていたらすみません。
テキストファイルをみましたが、
"顧客ID","顧客氏名","顧客かな","住所","電話番号"
1,"武本","たけもと","大阪府","111-111-111"
2,"佐々木","ささき","広島県","222-222-222"
3,"中村","なかむら","京都府","333-333-333"
4,"浜田","はまだ","大阪府","444-444-444"
こんな感じで5項目入っていますし、最後の行もなにもありません。
このテキストファイルはもともとあるACCESSのデータからTXT形式のファイルに出力したものです。
それを逆にTXT形式のファイルからACCESSのデータに読み込もうとしているのですが、このことは関係あるのでしょうか?。。
こんにちは。
提示された、コードとデータを試してみましたが・・・
特にエラーは発生しませんね・・・
> Debug.Print strID, strShimei, strKana, strJuusyo, strTel
の結果は、ちゃんと表示されてますか?
ずれていたりしませんか?
また、
> Input #1, strID, strShimei, strKana, strJuusyo, strTel
> Debug.Print strID, strShimei, strKana, strJuusyo, strTel
をばらして、
Input #1, strID
Debug.Print strID, ;
Input #1, strShimei
Debug.Print strShimei, ;
Input #1, strKana
Debug.Print strKana, ;
Input #1, strJuusyo
Debug.Print strJuusyo, ;
Input #1, strTel
Debug.Print strTel
とかに、すると、どこで(データのどの行のどの項目で)エラーになります?
ちょっと訂正。
Input #1, strID
Debug.Print strID, ;
Input #1, strShimei
Debug.Print strShimei, ;
Input #1, strKana
Debug.Print strKana, ;
Input #1, strJuusyo
Debug.Print strJuusyo, ;
Input #1, strTel
Debug.Print strTel
は
Debug.Print "[", ;
Input #1, strID
Debug.Print strID, ;
Input #1, strShimei
Debug.Print strShimei, ;
Input #1, strKana
Debug.Print strKana, ;
Input #1, strJuusyo
Debug.Print strJuusyo, ;
Input #1, strTel
Debug.Print strTel,;
Debug.Print "]"
とか、しておいた方が分かりやすいかも・・・
> このテキストファイルはもともとあるACCESSのデータからTXT形式のファイルに出力したものです。
元データ中に、 " や , や 改行 あるいは vbNullChar な文字などの
特殊なデータが含まれている可能性はありませんか?
<<大吉末吉さん
> Debug.Print strID, ;
最後のセミコロンは不要なのでは。(最後にカンマがあるので)
<<以下、蛇足情報
Print メソッドや Print #ステートメントでの出力の場合、カンマで区切って
指定すると、データ量によって区切り位置が変動してしまいますよね。
そこで、各データの最大長が分かっている場合には、
Debug.Print Tab(1) strID;
Debug.Print Tab(20) strShimei;
Debug.Print Tab(50) strKana;
のように、Tab関数を併用すると、桁が揃って読みやすくなりますよ。
# 桁位置を記述しなければいけないので、指定が面倒ですけれどね。(^^;
みなさんほんとにありがとうございます。
大吉末吉様
ばらしてDebugPrint したところエラーはでませんでしたので、
もう一度ACCESSのデータを入力しなおして、MDB→TXT ファイルに出力してから
今度TXT→MDBに読みこんだところ、エラーがでませんでした。。
どうやらもともとにあったACCESSのデータに問題があったようです。
ありがとうございました!!
魔界の仮面弁士 様
>元データ中に、 " や , や 改行 あるいは vbNullChar な文字などの
>特殊なデータが含まれている可能性はありませんか?
どうやら元データの中に問題があったようです。
すべて書き換えて最初からやり直したらエラーがでなくなりました。
ありがとうございました!
蛇足情報も今後役立ちそうです!!
ほんとにありがとうございました。
解決しました
ツイート | ![]() |