MS ACCESS(へたれな)コネタ 「Docmd.TransferText」で実行時エラー'3027'
テーブルデータのテキストファイルへのエクスポート処理を行なっていたのですが、なぞの実行時エラーが発生してしまいました。「実行時エラー'3027' データベースまたはオブジェクトは読み取り専用なので、更新できません。」テキストファイルへの出力だから、他のアプリからファイルがロックされていないかとか、いろいろ調べてしまいました。ネット良く調べてみるとどうやらACCESSの自身の既知の問題のようでした。JETエンジン用のレジストリへあらかじめ登録されている拡張子「txt,csv,tab,asc,tmp,htm,html」以外は利用できないことがわかりました。
マイクロソフト推奨の対策案はレジストリ変更です。
レジストリ変更するのが嫌なので、拡張子「.txt」のダミーファイルへ出力後にファイル名を変更する方式で対策しました。拡張子「.dat」ファイルへのエクスポートなんて日常茶飯事でしょうから、かなり有名な問題点なのではないでしょうかね。
DoCmd.TransferText acExportDelim, "標準", "出力テーブル", "Dummy.txt", True, "" FileCopy "Dummy.txt", "out.dat" Kill "Dummy.txt"
上記のなかの「FileCopy」は「Scripting.FileSystemObject」のラッピング関数。
Public Sub FileCopy(pFromFile As String, pToFile As String) Dim fs Set fs = CreateObject("Scripting.FileSystemObject") fs.CopyFile pFromFile, pToFile, True Set fs = Nothing End Sub
参考
MY PC ENVIRONMENT
ACC2000:拡張子を持つテキスト ファイルにその Access をインポートする方法が認識しません。