プロが教えるわが家の防犯対策術!

ACCESS2016で名簿を作成しています。名簿のテーブルのフィールドは、ID,名前、住所、電話、メール、登録年月日、備考があります。ACCESSでは、容量が最大2Gとまでの制限があるようなので、これを超えないようにするため、古いレコードはExcelに出力して、出力したレコードはACCESSのテーブルから削除できるようにしたいと思っています。様々な本を調べましたがVBAではどのようにしたら良いのかわかりません。このようにすることは無理なのでしょうか?できれば出力先のExcelは、毎回新たにファイル名をしてして保存できるようにできないか?とも思っています。
 どなたかご存じな方、ご教授お願いします。

A 回答 (2件)

頻度は高くないと思われますので(たぶん年に一・二回?)


エクセル出力用クエリ
select * from 名簿テーブル where 登録年月日 <= #2016/4/1#

削除用クエリ
delete * from 名簿テーブル where 登録年月日 <= #2016/4/1#

を作っておいて(抽出条件は作業のつど適宜変更)
docmd.TransferSpreadsheet acExport,acSpreadsheetTypeExcel12Xml,"エクセル出力用クエリ","D:\" & format (now,"yyyymmdd_hhnnss") & ".xlsx",true
でDドライブなどに出力し、
docmd.openquery "削除用クエリ"
で削除。
とかでは?

なお、
どのようなデータが入るのか不明ですが、
フィールド名 データ型 サイズ
ID      長整数型   8
名前     テキスト  255
住所     テキスト  255
電話     テキスト   40
メール    テキスト  255
登録年月日  日付時刻   8
備考       メモ  1000
で各フィールドに常に目いっぱいデータを押し込むとしても
Accessのサイズの上限を安全マージンをとって1.5GBと仮定します。
8+500+500+80+500+8+2000 = 3596
1.5*1024*1024*1024/3596 = 447890.
常に目いっぱいの場合でも44万件、一般的なケースでは100万件でも
まだ余裕がありそうですので、この処理自体を考えなくても大丈夫な気がします。
    • good
    • 0
この回答へのお礼

ご丁寧な回答をいただきありがとうございます。ACCESSは初心者なのでインターネットや本で調べ、試行錯誤しながらデータベースを作成しています。これから教えていただいた方法を取り組んでみます。また、ACCESSの容量についてもアドバイスをいただきありがとうございます。ときどきデータベースの最適化しながら作成していますが、今現在8148KBなので心配になり質問させていただきました。
 お忙しいところ回答いただきありがとうございました。

お礼日時:2016/05/10 10:33

テーブルに削除というフィールドをyesno型で追加。


削除したいレコードにチェックをつける。
チェックのあるデータのみを抽出するクエリを作成。
このクエリをエクセルにエクスポート。
テーブルからチェックのあるデータのみを削除する。
これでできると思います。
    • good
    • 0
この回答へのお礼

早速ご回答いただきありがとうございます。質問するときの言葉が足りなかったようで申し訳ありません。質問の内容は、フォームにボタンを作成して、そのボタンをクリックすると質問の内容を実行するようにVBAでやりたいと思っているのです。折角ご回答をいただいたのにこちらの言葉足らずの質問で申し訳ありません。

お礼日時:2016/05/10 10:26

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

関連するカテゴリからQ&Aを探す