VBからACCESSのテーブル等の取得をするには

解決


豚猫  2005-08-12 03:27:29  No: 91453

--- [開発環境] ---
VB6.0(SP6)
ACCESS2000
-----------------
いつもお世話になっております。
VBからACCESSで作成したmdb内の
【フォーム】【テーブル】【クエリー】
【マクロ】【レポート】【モジュール】
を取得し、それらを別mdb内のものと
比較し、異なる場合は上書きコピーを行うツールを
開発しております。
そこで、上記6個のオブジェクトを取得するために以下の
ようなコーディングを行いました。

    Dim obj As Object

    db.OpenCurrentDatabase sMe.txtMdbPath

    For Each obj In db.CurrentProject.AllForms
      sMe.lstLData(0).AddItem obj.Name
    Next

    For Each obj In db.CurrentData.AllTables
        If StrComp(Left(obj.Name, 4), "MSys", vbTextCompare) <> 0 Then
            sMe.lstLData(1).AddItem obj.Name
        End If
    Next

    For Each obj In db.CurrentData.AllQueries
      sMe.lstLData(2).AddItem obj.Name
    Next

    For Each obj In db.CurrentProject.AllReports
      sMe.lstLData(3).AddItem obj.Name
    Next

    For Each obj In db.CurrentProject.AllMacros
      sMe.lstLData(4).AddItem obj.Name
    Next

    For Each obj In db.CurrentProject.AllModules
      sMe.lstLData(5).AddItem obj.Name
    Next

    db.CloseCurrentDatabase

上記コーディングにより、各オブジェクトの名前を取得する事には
成功したのですがタイムスタンプの取得ができません。

また、別の案としまして、
MSysObjectsテーブル内のレコードを参照し、
【DataUpdate】【Name】列より値を参照しようとしましたが、
「権限がありません」というエラーが発生し、参照することが
できませんでした。
各MDB単位で設定する必要がありそうですので、
この案は敗れ去りました^^;

どなたか、ご教授願います。


でヴぃけい  2005-08-12 20:53:30  No: 91454

CreateObjectでやってみてはいかがですか?

Dim objAccess As Object
Set objAccess = CreateObject("c:\Test.mdb")

詳しくはウォッチウィンドウか何かでobjAccessを見てください。
一通り取得できているはずです。


豚猫  2005-08-16 18:50:17  No: 91455

>でヴぃけい様

ご回答ありがとうございます。
返信遅くなって申し訳ありません。

>詳しくはウォッチウィンドウか何かでobjAccessを見てください。
>一通り取得できているはずです。

ウォッチウィンドウで参照しました。

CreateObject("C:\Test.mdb")
 ┣ ADOConnectString
 ┣ AmswerWizard
 ・
 ・
 ┣ CodeData
 ・ ┣ AllDatabaseDiagrams <関数の呼出が不正です>
 ・ ┣ AllQueries          <関数の呼出が不正です>
 ・ ・
 ・ ・

上記のような内容が表示されています。
(「・」は省略を意味しています。)
私が思いましたのでは
上記に明記しています「CodeObject」か、もしくは
明記していないのですが「CodeProject」内に
・AllDataAccessPages
・AllForms
等の式がありましたので
値を確認してみたのですが、上記同様
<関数の呼出が不正です>
と、なっておりまして、値を確認することができませんでした。

申し訳ありませんが、
主に、どこを参照すればよいのかを、ご指示頂けたらと
思います。

以上、よろしくお願いいたします。


豚猫  2005-08-19 18:25:28  No: 91456

別方法にて、解決致しましたので、
ソースを記載し、解決としたいと思います。
ご意見、ありがとうございました。

   Set pbDB = OpenDatabase(sPath)
    
    For lCnt = 0 To pbDB.Containers.Count - 1

        Set Con = pbDB.Containers(lCnt)
        sMe.lstLData(lPos).AddItem Doc.Name
        sMe.lstLTime(lPos).AddItem Doc.LastUpdated

    Next
    
    pbDB.Close

尚、【con.Name】によって、
現在取得している【Doc.Name】の種類(テーブル名、マクロ名等)を
取得することが可能です。

以上、ありがとうございました。


豚猫  2005-08-19 18:25:47  No: 91457

解決。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加