困ったら ↓ のURLからMSDNに飛び込もう!!
オブジェクトの作成、解放は以下のような感じ
Dim xls As Object
Set xls = CreateObject("Excel.Sheet")
xls.SaveAs "てすと.xls"
xls.Application.Quit
Set xls = Nothing
DAOを使っている場合での話だが、複数人でデータベースを使用する場合、
フォームやVBAの更新などを行った際に、データの整合性を保つのが結構面倒である。
…というのも、mdbファイルがテーブル・クエリ・フォーム・レポート・マクロとセットに
なってしまっていることに起因する。
例えばフォームを更新した場合、他の人がテーブルを更新していた時などはテーブルの
インポートを行う必要が出てくる。この作業はかなり面倒かつ整合性が取りづらいものであり、
インポートの際には自分のテーブルを消さないと勝手にインデックスがふられるし、
リレーションも考慮してまとめてインポートしなくてはならないなど厄介極まりない。
なので、いい方法としてはテーブルだけを持っているデータベースと、それ以外のデータベースに分け、
テーブルをリンクする方法が考えられる。こうすることでテーブルは複数のデータベースで共有されるし、
フォームなどの更新もそのままそのmdbファイルを更新するだけでよくなる。
※リンクテーブルをVBAでオープンする場合、基本的には dbOpenTable で開くことはできない。もし開く場合は OpenDatabase でリンクテーブルが含まれるデータベースをフルパス指定して開き、そこからテーブルを取得する必要がある
RecordCountプロパティはレコードの総数を知るために使うことができるが、
注意しなければならないのは、返す値はあくまでもアクセスされたレコード数という事である。
なので、レコードの総数を取得するには、まず MoveFirst -> MoveNext -> EOFまでループ という
ような形で、全てのデータにアクセスする必要がある。
テーブルにレコードが含まれていない場合はプロパティの値は 0 に設定されるので、判定基準に
使っても大丈夫。
レコードがない状態でMoveNextとかやるとエラーが出るので、レコードの取り扱いは常に
EOF, BOFをチェックするのがいいと思われる。
.mdbファイルと同じ場所に突如として存在する .ldbファイル。
これはロック情報ファイルで、同時アクセスをする際などの情報が含まれているもので、
データの保守などに使われているっぽい。
データベースを開くと勝手に生成され、閉じると自動的に削除されるもののようだ。
なので、データベースを移動するとか人に渡すとかするときに .ldbファイルを渡す必要は
ないということだ。
リンクテーブルに対するアクセスが重い場合、それを改善するための手段がある。
(とは言っても改善されないこともあるような…)
手段としては、
- バックエンドデータベース(テーブルとそれ以外でデータベースを分割したうちのテーブルのほう)のテーブルをデザインビューで開く
- 表示メニューのプロパティからサブデータシート名プロパティを「なし」にする。
これで改善されるらしい。
最終更新:2008年10月20日 18:45