プロデルでMDBファイルの最適化

投稿者:shutzen 投稿日:2018/01/25(Thu) 10:52:46 No.1968

こんにちは。いつもお世話になってます。

プロデルでAccessのMDBファイルを最適化したいと思っています。
http://nonsoft.la.coocan.jp/Chinamini/20071116.html
の記事を参考に
https://www.moug.net/tech/acvba/0020002.html
のVBAコードをAccess2010で実行して取得したJROのGUIDを使って以下のようなソースを作ってみました。
----------------------
JROClassというCOM型(「{AC3B8B4C-B6CA-11D1-9F31-00C04FC29D52}」)を作る
JROClassからインスタンスを作る
-----------------------
これを実行させてみるとインスタンスを作るのがうまくいかず、下記のようなエラーメッセージが出ます。
こちらでの質問の範囲を超える内容かもしれませんが、ご教示いただければ幸いです。

-----------------------
COMException CLSID {AC3B8B4C-B6CA-11D1-9F31-00C04FC29D52} を含むコンポーネントの COM クラス ファクトリを取得中に、次のエラーが発生しました: 80040154 クラスが登録されていません (HRESULT からの例外:0x80040154 (REGDB_E_CLASSNOTREG))。

場所 System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)

場所 System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)

場所 System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)

場所 System.Activator.CreateInstance(Type type, Boolean nonPublic)

場所 System.Activator.CreateInstance(Type type)

場所 Produire.TypeModel.PTypeManaged.CreateInstance(ICreator creator, Boolean asStatic, IProduireValue[] parameters)

場所 Produire.RuntimeModel.8.CreateObject(PType 0, Boolean 1, IPhrase[] 2)

[エラー番号2] [はじめ:2行目]
-------------------------------

ProgIDで試してみてください

投稿者:ゆうと 投稿日:2018/01/25(Thu) 17:42:42 No.1970

こんにちは。お世話になっております。

ProgID「JRO.JetEngine」を指定することでうまく取得できるようです。
例外がありますが多くの場合、ProgIDは、
VBAの「Set Obj = New XXX.XXX」のXXX.XXXに相当する部分になっていますので試してみてください。

moug.netさんの記事のプログラムは、タイプライブラリ(クラスの集合体)のGUIDですので、
COM型で指定するCOMクラスのGUIDとは別のところで使うGUIDです。

-----------------
JROClassというCOM型(「JRO.JetEngine」)を作る
JetEngine=JROClassからインスタンスを作る
JetEngineを報告
-----------------

参考になれば幸いです。

Re: ProgIDで試してみてください

投稿者:shutzen 投稿日:2018/01/25(Thu) 20:18:17 No.1971

ゆうと様、以下のようにしましたら、期待通り最適化できました。
ありがとうございました。
今後ともよろしくお願いいたします。

--------------
JROClassというCOM型(「JRO.JetEngine」)を作る
JetEngineは、JROClassからインスタンスを作ったもの
JetEngine:CompactDatabase(「Provider=Microsoft.Jet.OLEDB.4.0;Data Source=old.mdb」, 「Provider=Microsoft.Jet.OLEDB.4.0;Data Source=new.mdb」)
--------------

▲ページの先頭へ

- WebForum -