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

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

A 回答 (3件)

#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文の文字を貼り付けたもの)
これを実行してもテーブル一覧がクエリの結果として出てくるでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
なんとか理解できそうなのでやってみます。

お礼日時:2009/04/23 23:23

gemini55さん 今日は!


回答者のimogasiさんから既に回答が出ておりますので。
Accessのサイトをご紹介致しますので今後の参考にされては?
■Accessサイトリンク集↓
http://www.accessclub.jp/linksite/index.html
このサイトが参考に為りそうです。
■Accessのオブジェクト名一覧を出力する方法 《テーブル名・クエリ名・フォーム名・レポート名等の一覧》 (Ac97,Ac2000,Ac2002)↓
http://www.nurs.or.jp/~ppoy/access/access/acEt01 …
このサイトが最も判り易いかも知れません。
ご参考までに。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
Accessのオブジェクト名一覧を出力する方法は大変参考になりました。

お礼日時:2009/04/23 23:28

こんにちは。



 下記サイトをご参照下さい。
  http://www.nurs.or.jp/~ppoy/access/access/acQ017 …
  システムテーブルを検索すれば表を作れます。

では。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
頑張ってみます。

お礼日時:2009/04/23 23:29

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

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

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

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

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

QAccessでテーブル名やクエリ名一覧の抜き出し

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

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

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

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

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

Aベストアンサー

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

QVBAをつかってクエリの情報を抽出するには??

ACCESS VBAを使ってプログラムを組んでいるVBA初心者です。ヘルプやいろんなHPを参考にしているのですが、どうしてもわからないことがあるのでおしえてください。
クエリの情報をフォームの日付から抽出し、csvファイルを作成するというものを作ろうとしています。
クエリの抽出条件でフォームの日付の期間で抽出するようにしてあります。
VBAにてOpenRecordsetでクエリから情報を抽出しようとするのですがクエリがありませんとエラーをはかれてしまいます。クエリの指定方法がまちがっているのでしょうか?
また、以下の方法とは別の方法でクエリから抽出するやりかたがありましたら教えていただけませんでしょうか?よろしくお願いいたします。
以下にどのように記述しているか記します。
------------
Public Function value()
On Error GoTo ERRORRR
Set db = CurrentDb
Dim rs As Recordset

Set rs = db.OpenRecordset("[開通チェック]", dbOpenDynaset)
Debug.Print rs.EOF
Do Until rs.EOF
Debug.Print rs!ID
Debug.Print rs!登録状態
Debug.Print rs!開通年月日
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
Exit Function
ERRORRR:
msgbox Err.number & ":" & Err.description
End Function

--------
開通チェック:クエリ (開通年月日には Between [Forms]![開通チェック]![開始日] And [Forms]![開通チェック]![終了日] の抽出条件が書かれています。)

使用しているACCESS Ver:ACCESS97

ACCESS VBAを使ってプログラムを組んでいるVBA初心者です。ヘルプやいろんなHPを参考にしているのですが、どうしてもわからないことがあるのでおしえてください。
クエリの情報をフォームの日付から抽出し、csvファイルを作成するというものを作ろうとしています。
クエリの抽出条件でフォームの日付の期間で抽出するようにしてあります。
VBAにてOpenRecordsetでクエリから情報を抽出しようとするのですがクエリがありませんとエラーをはかれてしまいます。クエリの指定方法がまちがっているのでしょうか?
...続きを読む

Aベストアンサー

パラメータがあるクエリはパラメータをParametersで入れてあげないと開けません。
パラメータを読み取れないのでRecordsetにクエリを渡せない状態でエラーが出ていると思います。

Dim db as Database
Dim qd as QueryDefs
Dim rs as Recordset
Dim pr1 As Date, pr2 As Date

Set db = CurrentDb()

pr1 = Format(Forms("開通チェック")("開始日"), "yyyy/mm/dd")
pr2 = Format(Forms("開通チェック")("終了日"), "yyyy/mm/dd")

Set qd = db.QueryDefs("開通チェック")
qd.Parameters("pr1").Value = pr1
qd.Parameters("pr2").Value = pr2

Set rs = qd.OpenRecordSet() 'ここでRecordsetにクエリを渡します。

これでいけると思います。

パラメータがあるクエリはパラメータをParametersで入れてあげないと開けません。
パラメータを読み取れないのでRecordsetにクエリを渡せない状態でエラーが出ていると思います。

Dim db as Database
Dim qd as QueryDefs
Dim rs as Recordset
Dim pr1 As Date, pr2 As Date

Set db = CurrentDb()

pr1 = Format(Forms("開通チェック")("開始日"), "yyyy/mm/dd")
pr2 = Format(Forms("開通チェック")("終了日"), "yyyy/mm/dd")

Set qd = db.QueryDefs("開通チェック")
qd.Parameters("pr1")....続きを読む

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

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

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

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

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

Aベストアンサー

#1です。

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

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

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


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

QACCESS 重複データを1つだけ表示したい(初心者です)

ACCESSで複数のフィールドに全く同じレコードが複数存在します
(例)
フィールド1  フィールド2  フィールド3
愛知      田中      12
愛知      田中      12
愛知      田中      12
三重      山本      23
三重      山本      23
岐阜      鈴木      33
岐阜      鈴木      33

もともと他のデーターベースからCSVで落としたものをインポートしているので、データの存在自体はどうしようもありませんが、これらの重複しているデータを1件だけ表示したいのです。つまり
(例)
フィールド1  フィールド2  フィールド3
愛知      田中      12
三重      山本      23
岐阜      鈴木      33

どのようにすればよいでしょうか。

Aベストアンサー

クエリにて[固有のレコード]プロパティーを[はい]にします

QAccess あるクエリを利用しているクエリの一覧表示

Accessについて質問させてください。

初心者的質問で申し訳ありませんが、
おわかりになる方がおられましたら教えていただけると助かります。

・質問内容:
あるクエリを利用しているクエリの一覧をみる機能はあるでしょうか?

たとえば、クエリAを利用しているクエリBとクエリC・・・があったとします。
クエリAに変更を加えた場合に、他のクエリに影響がないかチェックしたいと考えた場合に
どのクエリがクエリAを利用しているかを知りたいというのが理由です。

お手数ですが、以上よろしくお願いいたします。

Aベストアンサー

横レス失礼致します。

> 入力テーブルまたはクエリ'MSysObject'が見つかりませんでした。

nda23さんの原文に「s」の脱字があります。
下記のものに修正すれば、エラーにならなくなるはずです。


修正版:
SELECT A.Name AS クエリ名,B.Name1 AS 参照名
FROM (MSysObjects As A LEFT JOIN MSysQueries AS B ON A.Id=B.ObjectId)
LEFT JOIN MSysObjects AS C ON B.Name1=C.Name
WHERE A.Type=5 AND B.Attribute=5 AND C.Type=5;

※上記SQL内の「MSysObjects」や「MSysQueries」は、テーブル名です。
 これらのテーブルは初期設定では見られませんが、以下の手順を踏むと表示させる
 ことができるようになります:
   1)メニューで「ツール(T)→オプション(O)」を選択
   2)『オプション』ダイアログが開いたら、『表示』タブを選択
   3)右側の上から2番目にある『システム オブジェクト(Y)』のチェックをオンにした後、
    『OK』ボタンをクリック
 これで、データベースウィンドウでテーブルの一覧を表示させると、「MSys」で始まる
 テーブル群が表示されます。


・・・なのですが、Access2003なのでしたら、標準機能の『オブジェクトの依存関係』を
使用してしまった方が楽なように思います。
(「調べるクエリが変わる毎に、わざわざSQL文を編集」といった手間が不要なので)

なお、内部的には、結局上記SQLと同様の処理(上記テーブル群の参照)をしているので、
サブクエリやユニオンクエリなどは、やはり対象外です。
(ただ、対象外になるクエリも別に一覧化されるので、個別確認は比較的容易)

以下、その使用方法を説明します:
1)データベースウィンドウでクエリの一覧を表示
2)調べたいクエリを右クリックし、一番下の選択肢「オブジェクトの依存関係」をクリック
3)「オブジェクトの依存関係情報を生成するには、[名前の自動修正情報をトラックする]~」
  のメッセージが表示された場合は、『OK』をクリック
  (上記SQLが正常に動くようなら、多分表示されません)
4)「オブジェクトの依存関係を表示するには、先に依存関係情報を更新する必要が~」の
  メッセージが表示された場合も、『OK』をクリック
  ※上記メッセージも含め、『ヘルプ』は確認しておくことをお勧めします。
   (同じファイルでは、2回目以降は(多分)表示されません)
5)画面右側に『オブジェクトの依存関係』ウィンドウが表示されるので、「このオブジェクトに
 依存するオブジェクト」を選択すると、その下に、右クリックしたクエリを使用している
 テーブルやクエリ、フォームの一覧が表示されます。
 (一番下には、この機能で確認できないサブクエリやユニオンクエリなどが表示されるので、
  こちらは個別に確認します)
 ※表示されたクエリ名などはハイパーリンクになっており、クリックするとそれぞれがデザイン
   ビューで展開されます。


・・・以上です。

横レス失礼致します。

> 入力テーブルまたはクエリ'MSysObject'が見つかりませんでした。

nda23さんの原文に「s」の脱字があります。
下記のものに修正すれば、エラーにならなくなるはずです。


修正版:
SELECT A.Name AS クエリ名,B.Name1 AS 参照名
FROM (MSysObjects As A LEFT JOIN MSysQueries AS B ON A.Id=B.ObjectId)
LEFT JOIN MSysObjects AS C ON B.Name1=C.Name
WHERE A.Type=5 AND B.Attribute=5 AND C.Type=5;

※上記SQL内の「MSysObjects」や「MSysQueries」は、テーブル名です...続きを読む

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

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

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

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

Aベストアンサー

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

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

QACCESS クエリで、グループ化したものをカウントしたい

SQLでなくクエリで、グループ化したものをカウントしたいのですが、クエリを2個作ればよいのはわかるのですが、これを1つのクエリで作るのは可能でしょうか?

現状:
クエリ1 グループ化
クエリ2 クエリ1の結果をカウント

あまりにクエリを作り過ぎる為、今後の向上の為にと思い、質問します。
よろしくお願いします。

Aベストアンサー

>>Sum(1/DCount("*","テーブル名","グループ='" & [グループ] & "'"))
>が理解できませんでした。(再現もできませんでした)
質問にテーブルの情報がなかったのでこのように書きました

グループとは質問の1段目のクエリでグループに指定したフィールドの名前です

グループAが3レコード、Bが2レコードあれば

1/3+1/3+1/3+1/2+1/2=2

という結果が得られます

QAccess VBAでクエリーのレコード件数を取得したいのですが

Access2003のVBAで次のような構文を用いてクエリーの該当レコード数を取得したいのですがうまく出来ません。
構文又は手法が間違っているのでしょうか。

Dim db As Database
Dim rs As Recordset
Dim cnt As Long

Set db = CurrentDb
Set rs = db.OpenRecordset("該当顧客リストクエリ", dbOpenTable)
cnt = rs.RecordCount

※OpenRecordsetの行で「実行時エラー'3219'無効な処理です」と出てしまいます。
又、”該当顧客リストクエリ”では特定の抽出条件を設定して、”顧客リストテーブル”の一部を抽出するようにしています。

Aベストアンサー

Set db = CurrentDb
Set rs = db.OpenRecordset("該当顧客リストクエリ", dbOpenTable)
cnt = 0
If Not rs.EOF Then
  rs.MoveLast
  cnt = rs.RecordCount
  rs.MoveFirst
End If

このようにしたほうが、良いですよ
DAOのレコードセットは展開したときには、正確なレコード件数を返しません
一旦、MoveLastメソッドで最終ポイントまで行けば正確な件数が得られます
(ただし、パフォーマンスが落ちますorz)

面倒でも、「select count(*) as RecordCount from "テーブル名"」で取得したほうがいいですよ

ちなみに、別件はこれで良いんじゃないですかね?
Set rs = db.OpenRecordset("該当顧客リストクエリ", dbOpenSnapShot)

QAccessのデータをテキストファイルで出力する方法を教えてください。

Accessのデータをテキストファイルで出力する方法を教えてください。

クエリで抽出したデータをテキストファイルに出力したいのですが、下記のような記述では""や,で区切られてしまいます。
DoCmd.TransferText acExportDelim, "", "クエリ名", "出力ファイル.txt"

フィールドごとに改行して出力する方法はないでしょうか?


<クエリ結果>
フィールド1  フィールド2  フィールド3
aaa      bbb      ccc

<出力テキストファイル>
aaa
bbb
ccc

Aベストアンサー

ADO の GetString メソッドを使って直に文字列を作って出力してみてはいかがでしょうか。
(GetStringのヘルプを参照してください)

列間の区切り、および行間の区切りに vbCrLf を指定します。
出来上がった文字列の最終には vbCrLf が付いているので、それを削除した文字列を出力します。


記述例)

Private Sub Sample()
  Dim rs As New ADODB.Recordset
  Dim vTmp As Variant
  Dim ffn As Integer
  Const sQueryName As String = "クエリ名"
  Const sOutputFileName As String = "C:\Hoge\HogeTest.txt" '出力ファイル名

  rs.Open sQueryName, CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly
  If (Not rs.EOF) Then
    vTmp = rs.GetString(adClipString, , vbCrLf, vbCrLf)
  End If
  rs.Close

  If (Not IsEmpty(vTmp)) Then
    ffn = FreeFile
    Open sOutputFileName For Output As #ffn
    Print #ffn, Left(vTmp, Len(vTmp) - Len(vbCrLf))
    Close #ffn
  End If
End Sub

ADO の GetString メソッドを使って直に文字列を作って出力してみてはいかがでしょうか。
(GetStringのヘルプを参照してください)

列間の区切り、および行間の区切りに vbCrLf を指定します。
出来上がった文字列の最終には vbCrLf が付いているので、それを削除した文字列を出力します。


記述例)

Private Sub Sample()
  Dim rs As New ADODB.Recordset
  Dim vTmp As Variant
  Dim ffn As Integer
  Const sQueryName As String = "クエリ名"
  Const sOutputFileName As String = "C:\Hoge\H...続きを読む


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

人気Q&Aランキング

おすすめ情報