1

Jet を使用して 2 つの「拡張子」(「f​​ilename.tst.csv」) を持つファイルを開こうとすると、エラー 3011 がスローされるという問題があります。

実行時エラー「3011」

Microsoft Jet データベース エンジンは、オブジェクト 'filename.tst.csv' を見つけることができませんでした。オブジェクトが存在すること、およびその名前とパス名のつづりが正しいことを確認してください。

コードは次のようになります。

Dim db as Database, rs as Recordset
Set db = OpenDatabase("SELECT TOP 1 * FROM [" & fileName & "];")
Set rs = db.OpenRecordset("SELECT TOP 1 * FROM [" & fileName & "];")

2 番目の拡張子 (または見かけの拡張子) ".tst" であるという問題を突き止めましたが、エラーが発生している理由がわかりません。また、Google またはここで回答を見つけることができませんでした。誰かが制限について何らかの洞察を持っているかもしれないと思います。

これはVB6でDAO 3.6を使用しています。

4

6 に答える 6

2

少しハッキーですが、ファイルを開く前にプログラムでファイルの名前を変更して、より使いやすい拡張子にすることができます。作業が終わったら元に戻せるように、古い拡張機能をそのままにしておいてください。

于 2009-09-16T14:47:08.797 に答える
1

代わりに短いファイル名を使用しないのはなぜですか?複数のピリオドは含まれません。Karl E Petersonの優れたサイトからこのオファリングからCFileInfoクラスをドロップするだけです( GetShortPathName API呼び出しのラッパーメソッドがあります)。

ボリュームは短いファイル名をサポートしていない可能性があると思います(これはオプションです)。

于 2009-09-16T19:02:31.123 に答える
1

これはまさにあなたが話している状況ではありませんが、これを読むと、原因セクションで、長いファイル名をサポートしていない一部のドライバーに関する情報が当てはまるように見えます。これは 8.3 形式ではないためです。

http://social.technet.microsoft.com/Search/en-US?query=3011&ac=8

そのため、ファイルの名前を変更するか、別の方法を使用してデータをロードする必要があります (StreamReader を使用するなど)。個人的には、ファイルの名前を変更します。それははるかに簡単でしょう。

于 2009-09-16T14:52:58.663 に答える
0

インポート ファイルの schema.ini ファイルを作成するか、拡張子を HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text\Format レジストリ キーに追加して、ADO がファイルの解析方法を認識できるようにする必要があります。http://msdn.microsoft.com/en-us/library/ms974559.aspxに詳細な説明があります。

于 2009-09-16T17:22:16.037 に答える
0

VB6で廃止されて以来、DAOをあまり使用していないため、これについては確信が持てません。Jet のルールは、OLE DB プロバイダー、ODBC ドライバー、および DAO の間で非常に異なる可能性があることを知っています。

「。」を置き換えてみましたか?それらのファイル名の文字は「#」文字ですか?それとも最後のものだけですか?SQL ステートメントのテキスト内だけです。

于 2009-09-17T04:53:26.173 に答える
0

私によると、コードの 2 行目は何も返すことができません。

Set db = OpenDatabase("SELECT TOP 1 * FROM [" & fileName & "];")

SELECT 命令でデータベースを開くことはできません! コードは次のようになります

Set db = DBEngine.Workspaces(0).OpenDatabase(filenamne)
于 2009-09-17T04:59:46.223 に答える