お久しぶりに書き込みをさせていただきます。
最近はこの掲示板等を利用してうまくやってきたのですが、
今、どうしても解決できない問題に遭遇してしまい、ここで
質問をさせていただくことにしました。
ただ、今回の問題はちょっと分かりにくいかもしれませんが、
よろしくお願いします。
以下はスタートとなるモジュールです。(プロジェクトの一部です。)
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 の中にオープンするファイルのディレクトリがプレーンテキストで記述されています。
今回の質問は本当に把握しにくいものだとは思いますが、よろしくお願いします。
あれから、プログラムの実行手順をすべて細かくリストにして洗い出していると、1つだけ、ファイルのオープンを行っても、問題が起こらない場合があることに気がつきました。
それは、VB を再起動して、プログラムの1回目の実行時にはファイルオープンのウィンドウはそのプログラムが存在する場所を開いていました。それで、オープンするファイルをそこから選んだ時だけは、そのままプログラムを終了しても、すぐにそのままもう一度同じプログラムを立ち上げてもエラーが起こりませんでした。
それで、結局、
最初のテキストファイル(setting.dat)を開くときに、相対パスを利用していたのが問題ではないかと疑い、
Open App.Path & "\setting.dat" For Input As #fNum
にすることによって無事解決することができました。
一人芝居のような形になって、皆さんにご迷惑をおかけして
申し訳ございませんでした。
ツイート | ![]() |