過去ログ

                                Page      94
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼ADOでリンクテーブルの件数を数えたい  ほぇぇぇ 02/11/8(金) 9:21
   ┣Re:ADOでリンクテーブルの件数を数えたい  イケガミ 02/11/8(金) 17:26
   ┃  ┗リンクテーブルのパス名を変更したいよー  ほぇぇぇ 02/11/8(金) 18:36
   ┃     ┗Re:余談 2  YU-TANG 02/11/9(土) 17:41
   ┗Re:余談  YU-TANG 02/11/8(金) 23:33

 ───────────────────────────────────────
 ■題名 : ADOでリンクテーブルの件数を数えたい
 ■名前 : ほぇぇぇ
 ■日付 : 02/11/8(金) 9:21
 -------------------------------------------------------------------------
   みなさん、おはよーございます。

ADOでリンクテーブルの件数を数えたいのですが、どうしたらいいでしょうか?
TableDefs.Countみたいなことをしたいのですが、ADOだと使えないんでしょうか?

 ───────────────────────────────────────  ■題名 : Re:ADOでリンクテーブルの件数を数えたい  ■名前 : イケガミ <ikegami_kumamoto@dosule.com>  ■日付 : 02/11/8(金) 17:26  -------------------------------------------------------------------------
   >ADOでリンクテーブルの件数を数えたいのですが、どうしたらいいでしょうか?
>TableDefs.Countみたいなことをしたいのですが、ADOだと使えないんでしょうか?

リンクテーブルの件数って、レコード数じゃなくて、リンクテーブルのテーブル数
ですよね?
ADOじゃないですが、以下のような方法もありますよ。

SELECT MsysObjects.Name
FROM MsysObjects
WHERE (((Left([Name],1))<>"~") AND ((MsysObjects.Type)=1) AND ((Left([Name],4))<>"MSys"))
ORDER BY MsysObjects.Name;

 ───────────────────────────────────────  ■題名 : リンクテーブルのパス名を変更したいよー  ■名前 : ほぇぇぇ  ■日付 : 02/11/8(金) 18:36  -------------------------------------------------------------------------
   イケガミさん、ありがとうございます。

普段、MsysObjectsなどのテーブルは表示しない設定にしているので
「こんな方法があるんだ!!」と勉強になりました。

今、作っているのは・・・
リンクテーブルのリンク先のパスをモジュール上で変更させる
というもので、以前はJETで作っていたものを、
ADOでできないものかと悪戦苦闘中なのです。

イイ案がありましたら、どなたかお教えください!!

 ───────────────────────────────────────  ■題名 : Re:余談 2  ■名前 : YU-TANG <yu-tang@my.tramonline.net>  ■日付 : 02/11/9(土) 17:41  -------------------------------------------------------------------------
   > リンクテーブルのリンク先のパスをモジュール上で変更させる
> というもので、以前はJETで作っていたものを、
> ADOでできないものかと悪戦苦闘中なのです。

参照するだけなら、以下のコードで可能です。

Public Sub EnumLinkedTables()
' ADOX.Catalog.Tables コレクションをループで走査し、
' Access リンクテーブルを列挙します。
  Dim i As Integer
  Dim cat As New ADOX.Catalog
  cat.ActiveConnection = CurrentProject.Connection
  For i = 0 To cat.Tables.Count - 1
    If cat.Tables(i).Type = "LINK" Then
      Debug.Print "▼"; cat.Tables(i).Name
      Debug.Print vbTab; "Source DB->" _
        ; cat.Tables(i).Properties("Jet OLEDB:Link Datasource").Value
      Debug.Print vbTab; "Source Table->" _
        ; cat.Tables(i).Properties("Jet OLEDB:Remote Table Name").Value
    End If
  Next i
End Sub

上記コードで分かるように、テーブルの種別は Type プロパティを
参照することで判別できます。
私の環境には ODBC リンクテーブルが無いので、ODBC リンクテーブル
の場合はどうなるのか興味深いところです。

# 分かったら教えてください。

問題はこのプロパティを書き換えることができるのかどうかですが、
私は ADO にうといので、正直分かりません。
個人的には ADO のネイティブ プロパティならいざしらず、この
ようなプロバイダー固有のプロパティは ADO では更新できないの
ではないかと思っていますが、実際のところどうなのかは、識者の
意見を待ったほうがいいでしょう。

# もしくは調べて分かったら教えてください。

以下は余談ですが。

ADO は DAO との完全互換性は無いので、もし各種のサーバー連携が
無いのであれば、DAO から ADO に移行するのは無意味だと思います。
M$ は SQL Server への乗り換えを促すために ADO を積極的に推して
いますが、もし今お使いのデータベースが Access 内で完結するもの
であれば、M$ のマーケティング戦略に踊らされず、ミドルウェアの
移行が本当にメリットのあるものなのか再検討された方がよいのでは
ないでしょうか。

# サーバー連携の必要上、移行中なのであれば、上のたわごとは
# 無視してください。

 ───────────────────────────────────────  ■題名 : Re:余談  ■名前 : YU-TANG <yu-tang@my.tramonline.net>  ■日付 : 02/11/8(金) 23:33  -------------------------------------------------------------------------
   > ADOでリンクテーブルの件数を数えたいのですが、どうしたらいいでしょうか?

ADO じゃなきゃダメですか?
リンクテーブル数を取るだけなら、DCount 関数で終わりですが...。

DCount("Id", "MSysObjects", "Type In (4, 6)")

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 94