【復活求む!】惜しくも解散してしまったバンド|J-ROCK編 >>

Accessでテーブルやクエリを沢山(100個以上?)使っております。

そこで、テーブル名やクエリ名の管理をしたいので、テーブル名(クエリ名)の一覧を抜き出したいのですが、どうすればいいのでしょうか?
または、そういうことは無理なのでしょうか??(;O;)

1個づつコピーペーストでテールブル名をエクセルに貼り付けて行こうかな?と思ったのですが、さすがに数が多すぎるので困っております。

できるだけ簡単な方法がいいのですが、もしなければVBAでもいいです。

おわかりの方がいらっしゃいましたら、よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

・クエリを新規作成


・以下SQLを貼り付け
SELECT MSysObjects.Type, MSysObjects.Name, MSysObjects.Flags
FROM MSysObjects
ORDER BY MSysObjects.Type, MSysObjects.Name;
・デザインビューで表示
あとは、TypeとFlagsの条件を変えてあげれば一覧できます。

この回答への補足

最近PCをちょっと使えず、、お礼が遅くなりまして大変すみません<m(__)m><m(__)m> そして、回答ありがとうございます!!

すごいですね!こんな機能?!があるんですね。

ただ、、TypeやFlagsのコード(?)に意味があると思うのですが、、その一覧表みたいのは、どこかにのっているのでしょうか?Helpを見たのですがそこには載っていないようでしたので。

コードの意味が載っている所もしくは、テーブル又はクエリだけの一覧にするための絞り込み条件を、すみませんがまた教えて頂ければうれしいです。

よろしくお願い致します<m(__)m>

補足日時:2008/06/01 18:09
    • good
    • 4

WEBで掲載例の多いDAOのTebleDefsで、WEB例を参考にやってみました。

なかなかWEB掲載例そのままでは動かない経験が多く、下記は私の場合は何とかうまくいきましたが。
ーー
アクセスのModuleモジュールに
Sub テーブル名の取得()
Dim db As Object
Dim tdf As Object

'パス指定(変更してください)
'strPath = Current.Path
strDB = "社員2.mdb"
Open "テーブル名.csv" For Output As #1

Set db = DBEngine.OpenDatabase(strDB)

MsgBox db.TableDefs.Count & "TABLES IN " & db.Name

For Each tdf In db.TableDefs
'システムテーブル以外対象
If tdf.Attributes = 0 Then
'MsgBox tdf.Name
Print #1, tdf.Name
End If
Next tdf
Close #1
End Sub
これでcsvファイルが出来ます。
テーブル名.csvというファイルです。メモ帳で確認できます。
エクセルに読み込ませてください。A列にテーブル名が出るでしょう。
リンクテーブル分は出無いようです。
    • good
    • 1
この回答へのお礼

回答ありがとうございます<m(__)m>

VBAもまだまだ未熟者ですが、頑張ってやってみます!!

お礼日時:2008/05/18 20:21

[ツール][解析][データベース構造の解析]で


一覧やそれ以上の情報がレポート出力されます

フリーソフトにも解析ツールーはいくつかありますよ
VECTORでも覗いて見れば
    • good
    • 1
この回答へのお礼

回答ありがとうございます<m(__)m>
[データベース構造の解析]というのがあるのですね、まだまだ未熟者ですので、初めて知りました。ありがとうございました。

一度で「テーブル名の一覧のみ」ができないのが残念ですが、出力内容を最小限にしてテキストに落とし、ちょっと加工すれば一覧表ができるので良かったです。

会社での作業なので、フリーソフトは使えませんが、家用に今度覗いてみます。

どうもありがとうございました!!

お礼日時:2008/05/18 20:17

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QACCESSのテーブル名をリストにしたい

ACCESSのデータをADOで操作したいのですけれども,
ACCESSのテーブル名をリストにする方法がわかりません。
教えてください。お願いします。

Aベストアンサー

どもども 田吾作8です。←1増えた

前回うそをいいました。
カタログのTable内には、クエリーも含みます。
以下のコードを一度実行してください。

'【機能】:テーブル・クエリーをイミディエイトウィンドウへ出力
'【パラメータ】 DBファイルのフルパス
Sub DebugTables(inDbFileName As String)
Dim strConnect As String
Dim wkCnn As ADODB.Connection
Dim wkCat As ADOX.Catalog
Dim wkTbl As Table

'接続の文字列
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & inDbFileName & ";"

'DBに接続
Set wkCnn = New ADODB.Connection
wkCnn.Open strConnect

'カタログにセット
Set wkCat = New ADOX.Catalog
wkCat.ActiveConnection = wkCnn

'テーブル・クエリーをイミディエイトウィンドウへ出力
For Each wkTbl In wkCat.Tables
Debug.Print wkTbl.Type & " : " & wkTbl.Name
Next wkTbl

PGMEND:
'それぞれ開放
Set wkTbl = Nothing
Set wkCat = Nothing
wkCnn.Close
Set wkCnn = Nothing
End Sub

出力をするとwkTbl.Type には、分類すると4タイプあることがわかると思います。
[View] はクエリーです。
[Table] はテーブルです。
他には [ACCESS TABLE]と[SYSTEM TABLE] が存在します。
これらは、アクセスで開いても普段は出てきませんよね。
しかし、設定すると見えるようになります。
1.DBをアクセスで開く
2.メニューバーの[ツール][オプション]を選択
3.[表示]タブのシステムオブジェクトのチェックをONする
これで見えるようになります。
もしアクセスのアドインを作成したりするようなのであれば、これらを使うかも知れませんが、普通ならば無視しててもいい、システム関係のテーブルです。


知ってると思いますが、あくまで余談で・・・
ADOは大変便利です・・・がっ!、注意点が一つ。
ADOで作成したクエリーはアクセスからは見ることが出来ません。

ADOはあまり使ったことがないようにお見受けしたので、参考までに・・・

でわでわ

どもども 田吾作8です。←1増えた

前回うそをいいました。
カタログのTable内には、クエリーも含みます。
以下のコードを一度実行してください。

'【機能】:テーブル・クエリーをイミディエイトウィンドウへ出力
'【パラメータ】 DBファイルのフルパス
Sub DebugTables(inDbFileName As String)
Dim strConnect As String
Dim wkCnn As ADODB.Connection
Dim wkCat As ADOX.Catalog
Dim wkTbl As Table

'接続の文字列
strConnect = "Provider...続きを読む

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QアクセスVBAのMe!と[ ]

基本的なことですみません。

アクセスのイベントプロシージャで、Me!ってありますけど、これはどういう意味なんでしょうか?

また、Me!の後に、Me!.~~と書く場合と、Me!.[~~]と書く場合がありますが、どこが違うのでしょうか?

Aベストアンサー

>プロシージャ内で[]を使う場合は、そのフォーム外のオブジェクトを使う場合と考えてよろしいでしょうか?
別のオブジェクトを使う場合だけではありません。
Hensu = Me![Text1]のようにHensuという変数に自身のTest1の値を代入する場合のように。
[]で括られているのがオブジェクト名やコントロール名だよという事。
クエリの抽出条件に存在しない[?]とすれば?というコントロール等が参照できないので?というダイアログが表示されるように?というオブジェクトやコントロールは何?と聞いてくるように。
>フォーム内のオブジェクトの場合はあくまでMe!で良いのでしょうか
Forms.[フォーム名]![コントロール名]やForms![フォーム名]![コントロール名]が構文。
アクティブなフォームが自分自身ならForms![フォーム名]の変わりにMeでもOKですという事。

と言う解釈の方が良いと思います。

QAccessのマクロでモジュールを実行させたい。

Access2002を勉強中の初心者です。

AccessでDB1という名前のデータベースを作成し、その中で、モジュール1というモジュールを作成しました。これを実行するマクロを作成したく、次のようにマクロを作成しました。
マクロのデザイン画面でアクションに「プロージャの実行」を選択、プロージャ名入力覧の右側の...のボタンを押して式ビルダ画面を表示、ここの「関数」フォルダを開いてDB1を選択、表示されたモジュール1を貼り付けてOK。
しかし、このマクロを実行すると、次のエラーとなります。「DB1 指定されたDB1が見つけることができない関数名が含まれています」

根本的に方法が間違っているのでしょうか?
アドバイスをよろしくお願いします。

Aベストアンサー

#1です。

ちょっと時間ができたので、Accessのヘルプで、
 "RunCode/プロシージャの実行" アクション
についてのトピックを見てみました。

結論から言うと、基本的な考え方が間違っているみたいです^^;。

「プロシージャの実行」アクションでは、「Function」プロシージャを指定するようです。
Subプロシージャではエラーになります。


つまりご質問の件では、
「Subプロシージャを呼び出すFnctionプロシージャ」をまず書かなけれえばならない。
そして、マクロのアクションでは、あらためてこのFunctionプロシージャを指定しなければいけません。

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

Q【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには

バージョン:Access2002

フォーム「frm01」にテキストボックス「tb01」が作ってある場合、
Forms.frm01.tb01.Value="あいう"
とすれば、フォームもコントロールも指定できるのですが、
Dim strTxt As String
strTxt = "tb01"
Forms.frm01.strTxt.Value="あいう"
だと、文字列型変数"strTxt"が展開されないのでフォーム「frm01」のコントロール「strTxt」を探してしまいエラーになってしまいます。

文字列型変数でフォームやコントロールを指定するには、どのようにすればよいのでしょうか?

Aベストアンサー

フォームの場合
 Forms(strFrm)

フォームのコントロールの場合
 Forms(strFrm).Controls(strTxt)


これでも参照できますが、普通ここまで省略しませんね。
 Forms(strFrm)(strTxt)

あとで見たとき、訳がわからなくなりそう。

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。

Qアクセスのリンクテーブル一覧をsqlで表示させると

お世話になります。

仕事でアクセスファイルのリンクテーブル一覧を作成しなければならず、下記のsqlを用いて作業を進めています。


  SELECT Name, Database
  FROM MSysObjects
  WHERE Type=6
  ORDER BY Name;


ところがこの時不思議な現象が起きます。
というのも、splで表示させたリンクテーブルの方が、リンクテーブルマネージャーで表示させたリンクテーブルよりひとつ二つ多かったりするのです。

これはどういった原因で起こり得る現象でしょうか。

削除済みのリンクを拾っているのでしょうか。
もしくは、VBAでこっそりリンクしているテーブルがあるのでしょうか。

何卒アドバイスのほどよろしくお願いいたします。

Aベストアンサー

Access2007は持ち合わせていませんが2010では

オブジェクト(ナビゲーションウィンドウのテーブル名)上で右クリック
「このグループに表示しない」を選択すれば隠しオブジェクトになります。
表示したい場合は、
ナビゲーションオプションで隠し『オブジェクトの表示』にチェックを入れ
グレー表示されているオブジェクト上で右クリック、「このグループに表示」です。
隠しオブジェクトになっている場合はリンクテーブルマネージャには表示されませんね。

QAccessでテーブルやクエリのリストを作りたい。

テーブルが100、クエリが200ほどあるデータベースを使用してます。そのほかにレポート、フォーム、マクロもそこそこあります。これらのテーブル名やクエリ名の一覧表を作成したいのですがどうすればいいでしょうか。出力はファイル(たとえばExcelなど)でもプリントアウトでもかまいません。初心者なのでできるだけ簡単方法を教えていただければ助かります。よろしくお願いします。

Aベストアンサー

#1の情報を使わせてもらって、実際やってみました。質問者が、#1の回答の先が、判るレベルの人なら良いのだが、そこが心配になって、あるサイトのコードを修正して書いておきます。
http://www.accessclub.jp/sql/07.html
ーー
アクセスのオブジェクトの「モジュール」に
Sub MySQLSelect()
On Error GoTo エラー
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim mySQL As String
Set db = CurrentDb()
  ' SQLを記述します。
'mySQL = "SELECT * FROM 生徒;"
mySQL = "SELECT Name FROM MsysObjects WHERE Left([Name],4) <> 'Msys' AND Type = 1;"

Set qdf = db.CreateQueryDef("Q_sample", mySQL) ' Q_sampleを作成します。

DoCmd.OpenQuery qdf.Name ' クエリを開きます。

db.Close
Set db = Nothing

Exit Sub
エラー:

If Err.Number = 3012 Then
db.QueryDefs.Delete "Q_sample" ' Q_sampleを削除します。
Resume
Else
MsgBox Err.Number & " : " & Err.Description
End If

End Sub
を作る(コピペする)
ーー
そして実行する。
テーブル名の一覧が表示される。
クエリ一覧なら#1でご紹介のサイトのクエリ一覧のように、上記WHERE条件のところを変える。レポート以下の場合同じくWHERE条件を修正。
ーーーー
Excelのシートに移すのは、クエリの結果(たとえばテーブル名一覧)をコピーして、Excelシートに貼り付けると良い。
ADO、DAOでクエリの結果をプログラムでExcelのセルに書き込む方法が有るが、>初心者なので、ならVBAの経験も無いだろう。この件も書かれたコードの勉強は大変だが、質問の課題限定という事で、言われたとおりやって、結果だけ取る、という意味で回答する。
ーー
VBAを使わない方法では
クエリー新規作成で、どれかテーブルでクエリを作る。
テーブル部(上部)で右クリックで「テーブルの削除」
表示ーSQLビューで、SELECT文をそっくり
SELECT Name FROM MsysObjects WHERE Left([Name],4) <> 'Msys' AND Type = 1;
に置き換え(プログラムの中のSQL文の文字を貼り付けたもの)
これを実行してもテーブル一覧がクエリの結果として出てくるでしょう。

#1の情報を使わせてもらって、実際やってみました。質問者が、#1の回答の先が、判るレベルの人なら良いのだが、そこが心配になって、あるサイトのコードを修正して書いておきます。
http://www.accessclub.jp/sql/07.html
ーー
アクセスのオブジェクトの「モジュール」に
Sub MySQLSelect()
On Error GoTo エラー
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim mySQL As String
Set db = CurrentDb()
  ' SQLを記述します。
'mySQL = "SELECT * FROM 生徒;"
myS...続きを読む

QAccessのテーブルデータを一気にVBAで追加したい・・

Accessのテーブルデータを一気にVBAで追加したい・・

Accessに一時商品登録データというテーブルがあり、
問題なければ商品登録データにデータを流し込みたいと思っています

テーブルのデータ構造は全く同じです

VBAで一時商品登録のテーブルから一件ずつデータを読み取って
商品登録データに追加することは出来るのですが
一気にデータを追加する方法があれば教えていただけないでしょうか?

よろしくお願いいたいます

Aベストアンサー

本当にいろいろな方法があります。

一番簡単なのは、
あらかじめ「追加クエリ」を作成しておき

 Docmd.OpenQuery "追加クエリ名"

あるいは DAO で

 Set dbs = CurrentDB
 dbs.Excute "追加クエリ名"

追加クエリを使用しない場合は
追加クエリの SQL文 に相当するSQL を 実行。

 strSQL="INSERT INTO 商品登録データ SELECT 一時商品登録データ.* FROM 一時商品登録データ"

 Docmd.RunSQL strSQL

あるいは DAO で

 Set dbs = CurrentDB
 dbs.Excute strSQL

とか。

直書き、間違いがあったら御免。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング