VB6からAccess2000へのデータベースの形式の認識エラーの解決方法

このQ&Aのポイント
  • VB6でプログラムを組んでいる際に、Access2000のデータベースの形式が認識されないエラーが発生します。
  • このエラーの原因は、現在実行中のオートメーションオブジェクト内で発生していることです。
  • 解決方法としては、MicroSoft Accessの旧バージョンのデータベースに変換を行うことで、プログラムが正常に動作するようになります。ただし、旧バージョンのデータベースを使用すると使い勝手が悪くなる可能性があります。
回答を見る
  • ベストアンサー

VB6→Access2000

OSはNT4.0です。VB6でプログラムを組んでいます。 データベースソフトはAccess2000です。 プログラムを実行すると【データベースの形式’ (データベースファイル名が表示)’を認識できません。】というメッセージボックスが表示されます。そのメッセージボックスにあるヘルプをクリックすると '項目' (Error 524)このエラーは、現在実行中のオートメーション オブジェクト内で発生しました。 と表示されまして、解決できません。 Accessの機能にある【MicroSoft Accessの旧バージョンのデータベースに変換】を行い、プログラムを実行すると動くのですが旧バージョンだというメッセージボックスが表示され使い勝手が非常に悪いです。何が悪いのでしょうか?

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

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.9

Data1のConnectプロパティが[Access]になってませんか? もしそうだったら[Access 2000]にしてみてください。

tazataka
質問者

お礼

Accessになってました。大変申し訳ございませんでした。 Visual Studio(R) 6.0 Service Pack 5 を インストールして確認したところ問題なく動作しました。 初めて質問したのですが、こんなに親切に教えてもらって本当に嬉しいです。 ありがとうございました。これからも質問をさせてもらいますのでよろしく お願いいたします。

その他の回答 (8)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.8

やはりロード時なのでしょうか? ためしに、DataコントロールにDatabaseNameやRecordSetにセットしている部分をコメントして実行してください。 そうしたら、ロードイベント終了後にエラーは出ないようになります?

tazataka
質問者

補足

>コメントして実行 すいません。お恥ずかしい話ですが意味が理解できないんですけど・・・ 勝手に推測させてもらって申し訳無いですが確認を行ってみました。 Form Loadに記述してあるDatabaseNameやRecordSetを’(REM文)にする。 ということですか? Form Loadの End Sub処理終了後エラーが表示されました。 旧バージョンにて確認を行ったところForm Load End Subにて処理が終わりました。 TAGOSAKU7さんの意図と違うことを行っているかもしれません。 違っていたら申し訳ございませんが再度、ご指摘の程お願いいたします。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.7

もう一度チャンスをください。 1.プロジェクトを開いてください。 2.開始(ファンクションキーF5)を押さないで、ステップ実行(ファンクションキーF8)を押しっぱなしにしてください。 3.どこかでエラーが出ると思うので、その部分とその前後の処理を教えてください。

tazataka
質問者

補足

TAGOSAKU7さん本当に何度もすいません。 私も、なんとか自己解決できないかと模索していたのですが・・・ エラーが出ている場所ですが Form Loadの End Sub まで行き、その後F8を押すとエラーが表示されます。 Access旧バージョンにて確認を行ったところForm Loadの次にくる文は下記の ようになっておりました。 Private Sub Text2_Change() Command1.BackColor = &H8080FF End Sub これ以上F8を押しても進みませんでした。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.6

すいません。。。力量不足です。。。m(__)m 想像のつくパターンをいろいろやってみたのですが、エラーの発生する状況を再現できません。。。 あとは未検証ですが、(Access.Application)という文字がプログラムに入っているのでは?という点ぐらいです。。。 これを使用するとおそらくAC2000が入っていたらAC20000形式DBをデフォルトとするので、AC97形式DBオープン時に問い合わせダイアログが表示されるのだと思ったのですが、よく考えると、AC2000形式DBではエラーが出るのですよね? うぅ・・・矛盾する・・・ うーむプロジェクトを見てみたい・・・ もうちょっと考えます。。。ごめんなさい。。。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.5

どうやらロードは問題無いのかな? >エラーが出る これはダイアログですよね? 「デバッグ」ボタンがダイアログにありませんか? もしデバッグボタンが存在するならば、それを押し、どこの行で止まってるかが知りたいです。 あとData1.RecordSetやData1.RecordSourceを、他の所で使用してませんか? 現状が把握できません。 もしまだ作りはじめなら、フォームをメモ帳などで開いて、全てをここに張ってください。 接続時にエラーが起こら無いのであれば、推測不能です。

tazataka
質問者

補足

すいません。確かにロード時にはエラー表示はでません。始めに確認しておくべき作業でした。 1.ダイアログボックスには【OK】と【ヘルプ】しか表示されていません。 2.勝手を言って申し訳ないのですがプログラムは一応、 組み終わっていて結構長い文章ですので全てを表示するのはちょっと難しいです。 Data1.RecordSetは下にあるような使い方をしております。 (データを格納する作業) Set db = DBEngine.Workspaces(0).OpenDatabase(DbName) Set ds = db.OpenRecordset(Data1.RecordSource, dbOpenDynaset) Set ds = ds.OpenRecordset() Set Data1.Recordset = ds Data1.Recordset.AddNew ~データを入れる作業~  例 ds!管規格 = Kankikaku ←こんな文です。 Data1.Recordset.Update Data1.RecordSourceはForm Loadにて一度だけ使用しております。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.4

こちらこそ何度もすいません。 質問です。 1.データコントロールのRecordSourceプロパティには、デザイン時に既に何かSQL文を設定済みなのですか? 2.DbResourceはString型ですね? 3.実際のエラーメッセージは、どの行で出るのか、教えてください。

tazataka
質問者

補足

1.必要とする(連結したいテーブルという表現でお解りでしょうか?)テーブル名を入れてあります。 プロパティウィンドウのDatabaseNameに旧バージョンに変更しない状態の ファイル名をDatabaseNameを入れてRecordSourceを入れようとすると 同じエラーメッセージが表示されます。 2.DbResourceはString型です。 3.ブレークポイントの設定をForm Load内で行ったのですが エラーは表示されません。 Form Loadを出た後、何もアクションを起さない状態で エラーが表示されてしまいます。 度々、申し訳ございませんが、よろしくお願いいたします。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.3

Private Const DB_FILE As String = "c:\test.mdb" はモジュールの先頭 Option Explicit の次に書いておいたら、そのモジュール内で使用できる定数になります。 ところで > DbName = "ファイルのありかを記述" > DbResource = Data1.RecordSource > Data1.DatabaseName = DbName この順番を見るとData1.RecordSource としてますよね? Data1はすでに何かに接続済みなのですか? もっと広範囲でソースが見たいです。 上記の3行を含む関数ごと見せてもらえませんか?

tazataka
質問者

補足

本当に何度も申し訳ございません。 お答えになっているか、どうか一抹の不安が残るのですが 解らないなりに書いてみましたのでご確認をお願いいたします。 標準モジュール Module1に Public DbResource1 As String Option Explicit には Dim db As Database Dim ds As Recordset Dim DbName As String と表記し Private Sub Form_Load()には DbName = "E:\KEISAN\Gesui\負の突出_1\Mdb\管諸元.mdb" DbResource = Data1.RecordSource Data1.DatabaseName = DbName としております。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

Microsoft DAO3.51を Microsoft DAO3.6に変更してもだめですか? Data1=データコントロールですよね? 一応以下のソースでぼくの方は動きますが・・・ Private Const DB_FILE As String = "c:\test.mdb" Private Sub Form_Load() With Me .Data1.DatabaseName = DB_FILE .Data1.RecordSource = "select * from Table1" .Data1.Refresh End With End Sub

tazataka
質問者

補足

たびたびすいません。 DAO3.51→DAO3.6にしても同じ結果になりました。 Data1=データベースファイル名になるようにしています。 ただ勉強不足で申し訳ないのですが Private Const DB_FILE As String = "c:\test.mdb" の記述する場所がわかりません。この宣言が入ると違うのでしょうか?

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

情報をください 1.Accessとの接続を行っている部分のソースを見せてもらえませんか? 2.プロジェクトの参照設定をどのようにしたかを知りたいです。 もしかしてMicrosoft Access 9.0 Object Library のみとか? 3.DB関係のコンポーネントを何か追加しましたか? 4.Accessの用途を知りたいです。 AccessはDBとしてのみの使用ですか?それともレポートを使用したり、アクセス内のVBAを実行したりするのでしょうか?

tazataka
質問者

補足

情報不足ですいませんでした。なにぶん超初心者なので質問されている事と違った答えになるかもしれませんがよろしくお願いいたします。 1.Private Sub Form_Load() DbName = "ファイルのありかを記述"  DbResource = Data1.RecordSource Data1.DatabaseName = DbName 2.Visual Basic For Applicatuins Visual Basic runtime objects and procedures Visual Basic objects and procedures OLE Automation object Library Microsoft DAO3.51 Microsoft Word9.0 object Library Microsoft Access 9.0 Object Library 3.特に追加はしていないです。 4.AccessはDBとして使用してレポートはWordの差込印刷機能を使用しています。

関連するQ&A

  • VB6.0開発ソフトインストールできません

    VB6.0でデータベース(SQLSERVER7.0)をアクセスする プログラムを作りました。 そのプログラムをVB6.0が インストールしていない他のパソコンでも 動かしたいので ディストリビューション ウィザードで setup.exeを作り 他のパソコンにセットアップしようとしたら 「ファイルC:\WINNT\SYSTEM32\msado21.tlbの 登録中にエラーが発生しました」と 表示されセットアップできません。 なおセットアップのログファイルを見ると エラーC:\WINNT\SYSTEM32\msado21.tlb中に DLLRegisterSerer()のエントリポイントが 見つかりません。 次の処理中:DllSelfRegister: "C:\WINNT\SYSTEM32\msado21.tlb" とありました。 セットアップでき、実行できるようにするには どのようにしたら良いですか? もちろんexeファイルをコピーし 他のパソコンにいれても実行されません。 エラーメッセージは 実行時エラー430 クラスはオートメーションまたは予測したインターフエースをサポートして  いません

  • VB2008からVB2010に更新したのですけど。

    VB2008EEで作ったデーターベース(Accessでつくった。)を操作するプロジェクトをVB2010EEでファイルを更新して実行しましたが、「Micosoft.Jet.OLED.4.0プロバイダーはローカルのコンピューターに登録されていません。」とのエラーが表示され、データーベースにアクセスできません。データーベースは少し古いAccessで作ってます。このエラーを解除する方法を教えてください。いろいろ本を買って読んだり、いろいろ質問項目をみていたのですが、解決方法が見つかりません。どうかよろしくお願い申し上げます。

  • VB6のデバッガ?強制終了?について

     お世話になります。VB6とアクセスにてデータベースを作成中、動作確認のため実行したところ、「問題が発生したためVBを終了します。」が出現、VCが立ち上がり、   「VB6-MICROSOFT C++[停止]-[混合モード] メッセージボックス出現、 「デバッグ ハンドルされていない例外は VB.EXE(VB6.DLL)にあります。OXC 0000005:Accsee Violation」  となります。   そして、そのVCを閉じると「このコマンドを実行するデバッガを停止します」となります。  懲りずに又実行するとやはり同じです。仕方が無いので、VBの別なプロジェクトを用意して、先程のプログラムを「エラーの原因と思われる箇所を除いて」コピーして実行したところ今度は問題なく動きました。  単にコードの記述間違いならその程度を示すメッセージボックスがでるだけでしたが、VC出現は初めてです。  私なりの対処法で、「別のプロジェクトにもう一度書き直す」で一応はメドがたったようですが、別の対処法があれば御教授御願いします。 また、「明確な原因」がわかるならそれもお願いします。

  • オートメーションエラーについて

    こんにちは。palbanです。 現在VBからACCESSにデータを保存するシステムを作成しています。 VBからACCESSの接続にはADOを使用しています。 バージョンはVB6.0SP5,ACCESS2002です。 このシステムをAPI関数のSENDMESSAGEを使用して終了させているのですが、システム終了後以下のような メッセージがでます。 実行時エラー'-2147417848(80010108)': オートメーションエラーです。 起動されたオブジェクトはクライアントから 切断されました。 このエラーの回避方法をご存知の方ご教授願います。 私の方でも調査しましたが修正方法がどうしても わかりません。 宜しくお願いします。

  • 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") 宜しくお願いします。

  • VB.NET(Webアプリ)のアクセス権について

    VB.NETでプログラム作成中のファイルを、新しいハードにコピーして、続きを作成したいのですが・・・。 データを入力して、データベースに保存するプログラムを実行する際、「データベースが開きません」のエラーが出ます。同じデータベースでデータを読み込むプログラムの部分では実行可能です。 私は初心者だし、少し詳しい人に聞いたところ、セキュリティーの設定のところとか、アクセス権に問題があるのでは?というところまでしか分かりません。 うまく説明できないので、わかりにくいかもしれませんが、なにか参考になることがあれば教えてください。 宜しくお願いします。

  • VBからACCESSレポートの出力について

    仕事で住所録データベースを作っているところなのですが、 色々と分からないことがあるので、是非、相談に乗って下さい。 VBからACCESSレポートの出力について、行っているのですが データベースから、自分の条件にあったデータだけを取ってきたい のですが、どうしたらよいのでしょうか?? ちなみに、ACCESSのクエリを実行して、欲しいデータを取ってくる のではなく、VB上の画面に入力したデータで、ACCESSのデータを 検索を行うものです。 例えばこんな感じです。 ↓ VBで検索一覧画面から、社員番号を入力する。(テキストボックス) ↓ 実行ボタンを押したとき、テキストボックスに入った社員番号を 自動的に読み取り、ACCESSのデータベースから データを検索する。 こんな感じです。分かりにくい説明ですいませんが 宜しくお願いします。

  • Access95→Access2000への変換について。

    こんにちは。 Access95で作成したプログラムを、Access2000に変換して使用したいので、 Access2000で95のバージョンのプログラムを開き、データベースの変換を したのですが、なんだか上手くいきません。 (1)「起動時の設定」をしていないのに、起動時の設定がかかる (データベースウィンドウの表示など) (2)95のときは出ていなかったエラー(パラメータの入力)を求められる (3)フォームのコードを開いて、コンパイルをかけようとしてもグレー表示に  なっているため使用できない 以上、おかしいと思われる点ですが、95のプログラムは私が作成したものでは ないため、詳しいことがよく分からないのです。 データベースはテーブルのみのもの(仮にAとします)と、Aからリンクした テーブル、クエリ、フォーム、レポート、モジュールなどがあるデータベース (Bとします)の二つのデータベースを使用しています。 私のコンピュータの環境としては、 OSはWindows98 Second Edition、 Accessは97と2000が入っていますが95は入っていません。 大至急何とかしたいのですが、よろしくお願いします。

  • VBからのACCESSの起動に関して

    開発環境:Visual Basic 2008/ACCESS 2000 VB2008よりACCESSを更新したり、ACCESSのレポートを使用したりする プログラムを作成しています。 その際に、1つのACCESSに複数のレポートを作成している事から、複数のプログラム からACCESSを起動させようとするとエラーとなってしまいます。 ACCESSをそれぞれ分けてしまえば問題ないですが、、、、 そもそも1つのACCESSファイルを複数からアクセス(複数のVBプログラム)するという事が 不可能なのでしょうか? あるいは、下記の記述にあるように、データベースを開こうとするかエラーである為、 開いているか確認の記述をし、既に開いているようだったら、その処理をとばすような事 をすれば問題ないのでしょうか??? 教えて頂きたいと思います。 よろしくお願いします。 《記述内容》 Dim ac As Object ac = CreateObject("Access.Application") With ac 'アプリケーションを表示する ac.Visible = True 'データベースを開く ac.OpenCurrentDatabase("C:\sample.mdb") '名前を指定してレポートを開く ac.DoCmd.OpenReport("R_一覧表", 2) 'acViewPreview 'レポートの最大化 .DoCmd.Maximize() 'オブジェクトの解放 System.Runtime.InteropServices.Marshal.ReleaseComObject(ac) End With ac = Nothing

  • こんにちは。Access初心者です。

    こんにちは。Access初心者です。 現在、Access2003でデータベーステーブル更新機能を作成しています。 連結テキストボックスを作成し、入力規制を以下のように設定しました。 ●フィールドサイズ16(プロパティで設定) ●入力必須(プロパティで設定) ●未入力の場合はエラーメッセージ表示(プロパティで式を設定) このテキストボックスに対して「4」を入力した際、上記エラーメッセージが表示されてしまいます。 他のテキストボックスに「4」を入力した場合は同様の現象は起こりません。 これはAccessの入力規則等に関係するのでしょうか? もしくは設定ミスでしょうか? もし何かご存知でしたら、回答をお願いいたします。

専門家に質問してみよう