Access-MDBのオープンエラーについて

このQ&Aのポイント
  • Windows98 + VB5.0(SP3) + Access97の環境で、VBプログラムでAccess-MDBのオープンを行う際にエラーが発生することがあります。
  • エラー番号3343が表示され、データベースの形式を認識できないという内容です。
  • このエラーの対策としては、修復命令であるREPAIRを使用する必要があります。古い環境のため、既に解決方法が存在する可能性もあります。
回答を見る
  • ベストアンサー

AccessのMDBのオープンエラーについて

環境:Windows98 + VB5.0(SP3) + Access97 VBプログラムで、Access-MDBのオープンの為、以下の命令を発行します。 Set DB = OpenDatabase("D:\・・・\Md1.mdb") 通常問題無く動いているのですが、たまに以下のエラーが発生します。 エラー番号:3343 エラー内容:データベースの形式 'D:\・・・\Md1.mdb' を認識できません。 このエラー発生後は、REPAIR命令で修復しなければなりません。 このエラーの理由・対策等をお教え下さい。 少し古い環境での問題なので、既に語り尽くされているのかもしれませんが、よろしくお願いします。

  • tng
  • お礼率95% (47/49)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こんにちは 私も以前世話してたシステムもVB5-Ac97で tngさんと同じ現象が、出ました。 それも、違う顧客で3件も。 その時の原因として共通だったのは 1.MDBが全体で50MB超えていた 2.一番でかいレコード数のテーブルが壊れていた 3.壊れ方は、数値の項目に記号の羅列が化けて入っていた 対処方法は 最初はデータベースを修復をして対処しました。 が、またしばらくして同じ顧客で発生したので 以下のようにすると治まりました 1.エラー発生レコードは削除 2.新規mdbを作成 3.既存mdbのテーブルを新規mdbにインポート 一度試してください

tng
質問者

お礼

早速ありがとうございます。やはり発生していましたか。しかし、違う顧客で3件というのは厳しいですね。 3つの原因について、私の状況を書いてみます。 1.MDBが50MB以上 : 226KBのMDBでも発生しました。 2.・・・テーブルが壊れていた : エラー発生するとMDB自体が開かないのでどのテーブルが壊れていたかは判りませんでした。 またエラーが発生するのはデータベースのオープンの時で、テーブルオープンでエラーが発生した事はありませんでした。 3.数値項目に記号:MDB修復をするとデータ内容は全て保持されていました。データ内容がおかしくなっていた事はありませんでした。 書いて下さった対処方法ですが、これを行うと一切再発しなかったという事でしょうか?もしそうならば、素晴らしいですね。 ただ、私の場合、エラー発生レコードというのが存在しないので、単にテーブルインポートだけでしょうか。

その他の回答 (2)

  • sienna
  • ベストアンサー率35% (51/145)
回答No.3

私も以前同じような状況になって データ件数もそれほど多くなかったのでアプリケーション起動時に データベースを修復してから起動するようにしました。 今、VB6でAccess2000で同じように開発してるのです また同じような事にならないか心配です(笑)

tng
質問者

お礼

ありがとうございます。 事前に修復しておいても駄目ですよね、私やってみましたから、全然効き目有りませんでした。 Access2000ならば絶対大丈夫でしょうね、Access97だけの現象ですから。 それにしても、思ったより回答が少ないですね。あまり発生していないのでしょうか。確かに、Win98+VB5+Ac97の全く同じ環境で、一切エラー発生無しというシステムも有りましたから。だから、かえって、何故?が深くなるのですが。 まあPC時代になってから、こういうエラーをキチンと調べるのは無意味という風潮がありますからねえ、ああ、愚痴になってしまう。

回答No.2

こんにちは No1のお礼に対しての返事です。 >これを行うと一切再発しなかったという事でしょうか? 発生はなくなりました。 今また発生しているかどうかは、転職したので定かではありませんが。。。 >私の場合、エラー発生レコードというのが存在しないので >単にテーブルインポートだけでしょうか。 そうですね。それでよろしいかと思います。

tng
質問者

お礼

ありがとうございます。再発無しですか、素晴らしい! ちょっとテストをしています。 テストプログラムを用意、これはあるmdbに対し、mdbオープン・テーブルオープン・mdbクローズ・テーブルクローズオープン、という処理を10万回繰り返すものです。 で、A.mdb、これは何度も3343認識エラーが発生&修復したmdbです。 そして、B.mdbを新規作成し、A.mdbのテーブルを全てインポートしました。 このB.mdbでテストプログラムを実行、10回位繰り返して、今のところエラーは出ていません。 10万回×10回=100万回のオープン・クローズです。 以前迄はA.mdbで処理すると2回目位(20万回以内)でエラー発生していましたから。 mdbの新規作成とテーブルインポート、有効みたいですね。 それにしても、このエラーの原因って何なのでしょうね。 Access97固有のエラーみたいですが・・・ この組み合わせで購入したお客さんは、いー迷惑ですよね。

関連するQ&A

  • Access2007で作成したmdb

    こんにちは。 PC環境:WinXP Access:Access2007 で新規作成したmdbを PC環境:Win2000 Access:Access2000 で開こうとすると”データベースの形式[mdbパス]を認識できません” というメッセージが出て開く事ができません。 vbaでCreateDatabeseを使ってmdbを作成しているのですが、何か問題があるのでしょうか? それともAccessのバージョンが違うと開く事ができないのでしょうか? よろしくお願いします。

  • vb6でmdbのOpenDatabase時にエラー

    お世話になります。 PC98の環境でVB6でオフィスの入っていない環境です。 Set db1 = DBEngine.Workspaces(0).OpenDatabase(App.Path & "aaa.mdb",dbDriverComplete) を実行すると ”このプログラムは不正な処理を行ったので強制終了します。” となってしまいます。 昨日までは、エラーなく動いていたのですが原因がわかりません。 ご教授宜しくお願いします。

  • VB6でデータベースを変えるとテーブル形式エラーになります

    VB6 とACCESS97 でプログラムを作成、問題なく動いていました。 事情により、このパソコンにACCESS2000をインストールし(ACCESS97 と ACCESS2000 の二つが入っています)VB6のデータベースをACCESS2000に変換しました。 VBの参照設定をMicrosoft Access8.0 Object Livery から9.0 に換え、ACCESS 2000のデータベースのプロパティでファイルの種類をMicrosoft Access から Microsoft Access for Windows に換えました。 これを実行すると「実行時エラー3343 データベースの形式 "C:\SALES\TEST.mdb" を認識できません」と出ます。 他に修正すべきところがあるのでしょうか?それともバージョンの違うACCESS を併用するのはまずいのでしょうか? TEST.mdb をクリックすると、ACCESS2000で問題なく立ち上がります。 なお、VBからACCESSへの接続は下記のように書いています。 Public DB As DAO.Database Set DB = DBEngine.Workspaces(0).OpenDatabase("C:\SALES\TEST.mdb") 宜しくお願いします。

  • 拡張子が.mdbでないアクセスファイルを開くには?

    拡張子が.mdbでない以下のようなアクセスファイルOSAKA.sffを開くにはどのようにしたらよいですか? 現状、 Set db の行で 実行時エラー3343“データベースの形式認識できません”とエラーが出ます。 Private Sub Command5_Click() Dim ws As DAO.Workspace Dim db As DAO.Database Dim rs As DAO.Recordset 'デフォルトのワークスペースを定義する Set ws = DBEngine.Workspaces(0) 'データベースを開く Set db = ws.OpenDatabase("C:\Data\OSAKA\OSAKA.sff") End Sub

  • VBからAccessのデータベースをよみたい。けどエラー

    こんにちわ 先日 http://oshiete1.goo.ne.jp/kotaeru.php3?q=681876 でVBからアクセスのデータベースを読み込むことで 質問したものです。 (VB6.0 Access2000 Win2000でやってます) VB6.0にバージョンアップし(DAO3.6を選択するため)、変数も定義できたのですが、 Private Sub Form_Load()の部分で(以下) Set wspace = DBEngine.Workspaces(0) Set dbname = wspace.OpenDatabase(mypath & "\db1.mdb") dbname.QueryTimeout = 0 .QueryTimeoutに対してコンパイルエラーがでてしまいます。「メソッドまたはデータ メンバが見つかりません」というものです。そういえばOpendatabaseなどは「.」を打った時点でメソッド?の一覧が出るのですが、QueryTimeoutはでてきません。 DAO3.6以外にもなにか追加しないといけないのでしょうか? ヘルプで見たのですがメンバとは「コレクション、オブジェクト、またはユーザー定義型を構成する要素。」・・・ということでチンプンカンプンです(ノД`) ちなみにdbname.QueryTimeout = 0の部分をコメントアウトすると、その1つ前の行に対して「型が一致しません」とでてしまいます(ノ∀;) Accessを読み込んだ後は特に複雑なことはしないので(足したり参照する程度)、ここさえのりきれば・・・なのですがエラーばかりでて困ってます(ノД`) それともdb1.mdbファイルじたいがなにか読み込めない形式になってることが原因なのでしょうか? VB超初心者にもわかるようにコメントいただけると嬉しいですM(__)M

  • MDBのアクセス権

    VB6で、MDBファイルを操作しています。 Set myws = DBEngine.Workspaces(0) Set mydb = myws.OpenDataBase("xxx.MDB")で MDBを開いています。 インストールがadministratorで行うとなんら問題が無いのですが、それ以外のユーザーの権限でアクセスするとエラーになります。EXEは実行しているようです。 1:そのユーザーのMyDocumentにインストール 2:ProguramFilesにそのユーザーの権限を与える。 3:他のユーザーで実行 のいずれも動作しますが、先方の要求はあくまでもインストーラでなんら操作せずとも実行できるとの事です。もしくはバッチファイルを組む。 というものです。 インストーラは、VisualStudioInstallerを用いてます。 MDBファイルさえアクセスできれば良いのですが、adminiのパスワードなども全てのマシンで異なります。 良いアイデアがあれば、教えてください。よろしくお願いいたします。

  • mdbがとじれない

    VB6で開発をしています。 DB変数A = OpenDatabase(【mdb名】) Set QUERY変数B = DB変数A.CreateQueryDef("") QUERY変数B.SQL = SQL文 QUERY変数B.Execute (中略) Set レコード変数C = DB変数A.OpenRecordset(SQL文2) (中略) Set DB変数A = Nothing といった処理を行っています。 この処理を繰り返すのは問題ないのですが、 この処理で使用している【mdb名】はレコードロックされたままになってしまいます。 どのように修正したらよいのでしょう?

  • Access97で「パラメータが少なすぎる」のエラーとは?

    Win98SE、VB6.0+SP3からAccess97のmdbを読んで処理するプログラムで、 On Error GoTo Err_Hndr Set db = OpenDatabase(sDatabase) sSQL = "select * from station WHERE compare.[stationNo] = 1;" Set rs = db.OpenRecordset(sSQL, dbOpenSnapshot) このSet rs文のあと、エラールーチンに飛んでしまいます。 エラーコードは3061(パラメータが少なすぎます。1を指定して下さい) です。 このエラーはどういう意味で、どうやって解決すればいいのでしょうか?

  • VB6で作成したMDBが開けない

    初めまして。初めて投稿します。 今までWINXPで動作していたシステム(開発言語:VB6.0 データベース:ACCESS・MDBファイル)を、XPが終了するのでWIN7に載せ替えをしたいのですがエラーが発生してできません。 何かいい対策方法があれば教えてください。 エラー内容:「ファイルxxxxは既に使用されているため、使用できませんでした」 エラー発生ポイントは、上記ファイルをプログラム内で作成してそのファイルを使用してグリッドを表示使用とした時に発生しているみたいです。 (作成コマンド:Set wkdb = hkws.CreateDatabase(TMP_DIR & "WKDB.MDB", dbLangJapanese)) フォルダはPGMが動作しているパソコン内で、ルートの直下に新規作成しています。 PGM終了させた後にACCESSで該当するファイルを開くと、エラーなく開くことができます。 パソコン環境:WIN7-Pro(SP1)32Bit VB:6.0

  • Access98で作ったmdbをAccess2000で変換したらエラー発生

    こちらのFREEの掲示板を使いながらASPを勉強しているところですが、 Access98で作ったmdbをAccess2000のデータベースユーティリティで 変換したところ、下記のようにODBC Drivers エラーが発生しました。 Access2000で作成したmdbを使用する場合にはODBC Driverもバージョン アップしなければならないのでしょうか?対処方法についてもご指導 をお願いしたいと思っています。 Microsoft OLE DB Provider for ODBC Drivers エラー '80004005' [Microsoft][ODBC Microsoft Access Driver]一般エラー レジストリ キー 'Temporary (volatile) Jet DSN for process 0x5b8 Thread 0x66c DBC 0x2091ba4 Jet' を開くことができません。