|
▼あおぎん さん:
長くなったので以下に分けます。
ワークテーブル、クエリについて
いくつか疑問やご質問をされていましたが、
その前に少し説明させて下さい。
ツールバーの [ツール] ⇒ [オプション] ⇒ [表示]タブに
システムオブジェクト というチェックボックスがあるので、
それにチェックをつけて、データベースウィンドウのテーブル欄をご覧になって下さい。
MSys〜 というテーブルが出現したかと思われます。
その中のMSysObjects というテーブルを開いてみると
各種オブジェクトが格納されています。
Name と Type から色々推測できると思いますが、
例えば Type=1 はテーブル、Type=-32768 はフォームのようですね。
さて、Type=5 に関してなのですが、
通常のクエリの他 ~TMP から始まるものがありませんでしょうか。
クエリの実態として存在していなくても
例えばコンボボックスの値集合ソースなどにSQL文を選択すると
Access上では名前をつけてクエリとして管理しています。
VBAにてアクションクエリやテーブル定義クエリを発行する分には
こちらに登録される事はないかと思われます。
またもう1点、はっきりと確証がある話ではないので申し訳ないのですが
大量のデータを持つテーブルを削除してもMDBの容量があまり変わらず、
最適化をするとファイルサイズが小さくなる事を体験された事はありませんか?
こちらについてはユーザには見えない「削除FLG」みたいなものが存在し
MDBの最適化をするタイミングで削除FLGの立っているレコードを
消去しているのではないかと思われます。
> テーブル作成クエリを走らせようと思ってます。
この様な仕様ですと、R_紹介状 が開かれるたびに
同じ名前のテーブルが削除 ⇒ 作成される事になり
また上記の推測から最適化されていない状態ですと
同一のName、Typeを持つレコードが
システムテーブル:MsysObjects上にいくつも存在する事になります。
これが原因なのかははっきりとは解りませんが
同一の名前のオブジェクトを何回も作ったり消したりしていると
MDBファイル自体の破損に繋がる可能性が高いです。
今回の様な場合は R_紹介状 を開くたびに
ワークテーブルのフィールド名が変わる事はなさそうですので
あらかじめ WT_紹介状用 を用意しておき、
WT_紹介状用 の 全レコード削除 ⇒ 必要なデータの挿入
の方が安定した運用ができるかと思われます。
番号以外のデータをいったん WT_紹介状用 に格納し、
(その際にオートナンバーでも良いので主キーをかならず設定して下さい)
社員コードでソートしたレコードセットを Loop で回しながら
番号を更新していく方法もあります。
> できればあまりクエリを増やしたくないなーと思いまして・・。
> わけがわからなくなってくるので。
今回、便宜上 SQL文の中でクエリ名を指定してしまいましたが、
これもクエリのパフォーマンスを落とす原因になってるかもしれません。
MSサポートオンライン
Access 2000 でクエリを最適化する方法
h tp://support.microsoft.com/kb/209126/ja
正直、難しいことも多々書いてありますが
「クエリのパフォーマンスを改善するためのヒント」 あたりが
ご参考になるかと思われます。
|
|