ファイルの読み込みができないのですが

解決


TAKE  2003-09-19 12:36:56  No: 79494

お久しぶりに書き込みをさせていただきます。

最近はこの掲示板等を利用してうまくやってきたのですが、
今、どうしても解決できない問題に遭遇してしまい、ここで
質問をさせていただくことにしました。

ただ、今回の問題はちょっと分かりにくいかもしれませんが、
よろしくお願いします。

以下はスタートとなるモジュールです。(プロジェクトの一部です。)

Public db As ADODB.Connection
Public DB_DIR                       ' Database location

Sub Main()
    
    Dim fNum As Integer
    
    ' get information from data file
    fNum = FreeFile()
    Open "setting.dat" For Input As #fNum         '<=======
    Input #fNum, DB_DIR
    Close #fNum

    'Open Database
    Set db = New ADODB.Connection
    db.Open "Provider = MSDataShape;" & _
            "Data Provider = Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source = " & DB_DIR
    db.CursorLocation = adUseClient
    
    'Open main window
    Form1.Show
    
End Sub

もうひとつ、メインのフォームが以下になります。

Private Sub Command1_Click()
    
    CommonDialog1.CancelError = False
    CommonDialog1.Flags = cdlOFNFileMustExist + cdcdlOFNHideReadOnly
    CommonDialog1.Filter = "All Files (*.*)|*.*"
    
    CommonDialog1.ShowOpen
    
    Text1.Text = CommonDialog1.FileName
    

End Sub

フォームの方の CommonDialog でなにかのファイルを一度開いたあと、
プログラムを終了させ、その後もう一度プログラムを起動しようと
したら、2度目以降の起動時に

Run-time error '53' file not found

というエラーメッセージが出て、上記のソース内の "<=====" の部分で
とまってしまいます。

もし、CommonDialog のオープンファイルが表示されても、実際に
ファイルを開かずにキャンセル等で逃げた場合、まったくこの症状
は現れません。

そして、上記の2つのソースだけを切り出して実行してみても
問題は起こりません。

と、いうことで、プロジェクトの上記の部分以外で問題の原因が存在する
可能性はあるのですが、プロジェクト自体が比較的大きくなっており、
どこを疑うべきなのかがよく分かりません。

もし、どなたか、この問題で疑うべき部分が分かる方はご教授いただ
ければ幸いです。

環境
Windows 2000 Pro
Visual Studio 6.0
MS Access 2002
ADO 2.7
Jet 4.0

setting.dat の中にオープンするファイルのディレクトリがプレーンテキストで記述されています。

今回の質問は本当に把握しにくいものだとは思いますが、よろしくお願いします。


TAKE  2003-09-19 13:44:25  No: 79495

あれから、プログラムの実行手順をすべて細かくリストにして洗い出していると、1つだけ、ファイルのオープンを行っても、問題が起こらない場合があることに気がつきました。

それは、VB を再起動して、プログラムの1回目の実行時にはファイルオープンのウィンドウはそのプログラムが存在する場所を開いていました。それで、オープンするファイルをそこから選んだ時だけは、そのままプログラムを終了しても、すぐにそのままもう一度同じプログラムを立ち上げてもエラーが起こりませんでした。

それで、結局、

最初のテキストファイル(setting.dat)を開くときに、相対パスを利用していたのが問題ではないかと疑い、

Open App.Path & "\setting.dat" For Input As #fNum

にすることによって無事解決することができました。

一人芝居のような形になって、皆さんにご迷惑をおかけして
申し訳ございませんでした。


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

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






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