「ファイルにこれ以上データがありません」のエラー対処の方法

解決


KAKO  2007-03-01 02:55:54  No: 135575

お世話になってます。
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    

読み込むデータがなくなれば  ”インポート完了”とメッセージボックスで表示させたいのです。
よい方法があれば教えてください。


Kuborin  2007-03-01 03:10:13  No: 135576

テキストファイルの最後の行はどうなってますか?
このエラーは、1行5項目として読もうとしているのに
3項目とか1項目しかない場合に出るエラーです。
例えば最後の行が、リターンコードだけ入っているとか…

違っていたらすみません。


KAKO  2007-03-01 20:16:48  No: 135577

テキストファイルをみましたが、

"顧客ID","顧客氏名","顧客かな","住所","電話番号"
1,"武本","たけもと","大阪府","111-111-111"
2,"佐々木","ささき","広島県","222-222-222"
3,"中村","なかむら","京都府","333-333-333"
4,"浜田","はまだ","大阪府","444-444-444"

こんな感じで5項目入っていますし、最後の行もなにもありません。

このテキストファイルはもともとあるACCESSのデータからTXT形式のファイルに出力したものです。
それを逆にTXT形式のファイルからACCESSのデータに読み込もうとしているのですが、このことは関係あるのでしょうか?。。


大吉末吉  2007-03-01 21:02:04  No: 135578

こんにちは。

提示された、コードとデータを試してみましたが・・・
特にエラーは発生しませんね・・・

> 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
とかに、すると、どこで(データのどの行のどの項目で)エラーになります?


大吉末吉  2007-03-01 21:05:28  No: 135579

ちょっと訂正。
    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 "]"
とか、しておいた方が分かりやすいかも・・・


魔界の仮面弁士  2007-03-01 21:36:14  No: 135580

> このテキストファイルはもともとあるACCESSのデータからTXT形式のファイルに出力したものです。
元データ中に、 " や , や 改行 あるいは vbNullChar な文字などの
特殊なデータが含まれている可能性はありませんか?

<<大吉末吉さん
> Debug.Print strID, ;
最後のセミコロンは不要なのでは。(最後にカンマがあるので)

<<以下、蛇足情報

Print メソッドや Print #ステートメントでの出力の場合、カンマで区切って
指定すると、データ量によって区切り位置が変動してしまいますよね。
そこで、各データの最大長が分かっている場合には、
    Debug.Print Tab(1) strID;
    Debug.Print Tab(20) strShimei;
    Debug.Print Tab(50) strKana;
のように、Tab関数を併用すると、桁が揃って読みやすくなりますよ。

# 桁位置を記述しなければいけないので、指定が面倒ですけれどね。(^^;


KAKO  2007-03-02 03:05:42  No: 135581

みなさんほんとにありがとうございます。
大吉末吉様
ばらしてDebugPrint したところエラーはでませんでしたので、
もう一度ACCESSのデータを入力しなおして、MDB→TXT ファイルに出力してから
今度TXT→MDBに読みこんだところ、エラーがでませんでした。。
どうやらもともとにあったACCESSのデータに問題があったようです。
ありがとうございました!!

魔界の仮面弁士 様

>元データ中に、 " や , や 改行 あるいは vbNullChar な文字などの
>特殊なデータが含まれている可能性はありませんか?

どうやら元データの中に問題があったようです。
すべて書き換えて最初からやり直したらエラーがでなくなりました。
ありがとうございました!
蛇足情報も今後役立ちそうです!!

ほんとにありがとうございました。


KAKO  2007-03-02 03:06:58  No: 135582

解決しました


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加