[三流君] −−>
[VBAで楽しく] −−>
[バックナンバー一覧]
−−> No.075 空のMDBを作成後、DoCmd.CopyObjectでテーブルコピー
空のMDBを作成後、DoCmd.CopyObjectでテーブルコピー
メルマガ発行内容
<空のMDBを作成後、DoCmd.CopyObjectでテーブルコピー>
こんにちは、三流プログラマーKen3です。
今回は、
Access2000〜でADOを使用した、
空のMDB作成方法
と
DoCmd.CopyObjectでテーブルコピー
です。
/*
* 1.今回のキッカケ
*/
下記の質問メールをもらいました。
----
In message "やばいです。",
m*****さん wrote...
>テーブルのバックアップ用ボタンを作成したのですが
>
>Private Sub バックアップ_Click()
> If MsgBox("テーブルデータをバックアップしますか?", _
> vbYesNo + vbQuestion) = vbYes Then
> DoCmd.CopyObject "c:\Back\試作.mdb", , acTable, "指示書表紙テーブル"
> ~~~~~~~~ ~~~~~~~~~~~~~~~~~~
> ↑ファイル名 ↑テーブル名
>
> End If
>End Sub
>
>
>サブテーブル「指示内容テーブルサブ」も一緒にCopyさせたいのですが
>テーブル名が1つしか入りません。
>複数のテーブル名を指定するのは無理なのでしょうか?
>
>それから
>指定したフォルダー内にあらかじめコピー先のデータベースを作成しておかないと
>エラーが出てコピーできませんでした。(T◇T)
>フォルダー指定だけではダメですか?
----
勝手な想像、人様の苦労の流れをいつものように想像(創造)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
複数のテーブルをデータごとバックアップしたい。
いろいろと自分なりに調べ、
DoCmd.CopyObject "c:\Back\試作.mdb", , acTable, "指示書表紙テーブル"
で、テーブルがコピーできることを発見する。
ここまでは順調だったが、
空のMDBファイルが無いと、DoCmd.CopyObjectが動作しないことに気がつく。
また、全てのテーブルを一度にコピーするコマンドがあれば聞きたい。
ってことかなぁ。
一生懸命、物語作るのはいいけど、
質問のままの方が、わかり易くない?
気にしないでください、三流解説前の儀式?ですから(笑)
やりたいことは、なんとなく、わかったけど、
さて、どうしましょう。
そんなにスゴイ手じゃないので、期待しないでくださいね。。。
/*
* 2.空のMDBファイルを作成する
*/
もう、DoCmd.CopyObjectでテーブルがコピーできることがわかっているので、
問題は、空のMDBファイルを作ることだけです。
えっと、まずプログラム書く前に、
苦手な参照設定をイタズラします。
モジュールの編集画面のメニューから、
ツールの参照設定を選択します。
↑参考画面
その中から、
MicroSoft ADO Ext 2.5 for DDl〜を選択します
※ADO Ext 2.7など、環境によって違います
~~~~~~~~~~~~~~~~~
↑参考画面
ざっと書いちゃうと、
Private Sub コマンド0_Click()
Dim catTest As New ADOX.Catalog
Dim strConnect As String
Dim strDBNAME As String
strDBNAME = "D:\Backup\試作.mdb" 'バックアップ先のMdb
If MsgBox("テーブルデータをバックアップしますか?", _
vbYesNo + vbQuestion) = vbNo Then
Exit Sub 'NOの時抜ける
End If
If Dir(strDBNAME) <> "" Then 'ファイルが存在したら消す
Kill strDBNAME
End If
'データベースの新規作成
' ADOコネクション文字列の指定
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
' データベースの作成 名前を指定する
catTest.Create strConnect & strDBNAME
' データベースを閉じる
Set catTest = Nothing
'テーブルのコピーテーブル数分書くのが簡単
DoCmd.CopyObject strDBNAME, , acTable, "テーブルA"
DoCmd.CopyObject strDBNAME, , acTable, "テーブルB"
'
MsgBox strDBNAME & "にバックアップしました"
End Sub |
こんな感じです。
参照設定は
Dim catTest As New ADOX.Catalog
を使いたかったからです、実際に使うところは少し待っててもらって、
前準備から説明を開始します。
If MsgBox("テーブルデータをバックアップしますか?", _
vbYesNo + vbQuestion) = vbNo Then
Exit Sub 'NOの時抜ける
End If
普通のYes/NOの確認なんだけど、
私と違って、チャント書いてます。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
えっ、どこが?
vbYesNo + vbQuestionのとこかな。
メッセージボックスには種類があって(音と表示が違って)
vbCritical 警告メッセージ アイコンを表示します。
vbQuestion 問い合わせメッセージ アイコンを表示します。
vbExclamation 注意メッセージ アイコンを表示します。
vbInformation 情報メッセージ アイコンを表示します。
なんてのが、あったんですね。
Sub aaa()
MsgBox "XXXXX", vbYesNo + vbCritical
MsgBox "XXXXX", vbYesNo + vbQuestion
MsgBox "XXXXX", vbYesNo + vbExclamation
MsgBox "XXXXX", vbYesNo + vbInformation
End Sub |
で表示させてみると、違いがよくわかります。
×?▲iって感じのアイコンと音が違います。
些細な違いだけど、丁寧な仕事のシステム、
メッセージの使い分けなどは必要ですよ。
※オマエも読者の丁寧さを少しは見習えよ、、、はい。
話を戻してと、
If Dir(strDBNAME) <> "" Then 'ファイルが存在したら消す
Kill strDBNAME
End If
で、Kill ファイル名でバックアップ先のファイルを消してます。
これから新規に作成する位置にファイルが存在していると、
不具合が起きてしまうので、
Dir関数でファイルの存在をチェック後に削除してます。
次は、消したらすぐに作成する、、、忙しい行動なんだけど
本題のMDBの新規作成です。
'データベースの新規作成
' ADOコネクション文字列の指定
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
' データベースの作成 名前を指定する
catTest.Create strConnect & strDBNAME
' データベースを閉じる
Set catTest = Nothing
で作成します。
後は、配列とか使わないで、力技で簡単に書くと、
'テーブルのコピーテーブル数分書くのが簡単
DoCmd.CopyObject strDBNAME, , acTable, "テーブルA"
DoCmd.CopyObject strDBNAME, , acTable, "テーブルB"
でコピーしてます。
※Allの指定はわからなかったので、続けて書いただけのお馬鹿な書き方。
せめてループで回せよな、、、
/*
* 3.おわりの挨拶
*/
今回は、Access
・空のMDBを作成する方法
・MsgBox警告、インフォなどウインドウの種類を指定してますか?
って話でした。
あっ、タイトルと内容がぜんぜん違うよ
まぁ、いつものことだからゆるしてね。。。(笑)
あっ、単純に、MDBの簡単なバックアップ方法を調べて、
解説すれば、それでよかったのかも。
最適化と組み合わせて、、など、いろいろ用途はありそうなのに。
※どこかから、簡単な技をパクって来たら、またお知らせします。
拾い読みして、
1つでも何かの参考となれば幸いです。
Excel/Access大好き、三流プログラマーKen3でした。
※評価は↓で投票してね。感想は掲示板かメールでくださいね。
フィードバック
VBA系の→[掲示板]←を覗く、質問を書き込む
評価・感想
ページフッター(リンクや広告など)
[三流君(TOP ken3.org へ戻る)]
-- [VBA系TOPへ]
---- [VBA系バックナンバー目次へ移動]
------ [VBAでIEを操作 CreateObject("InternetExplorer.application")]・・・実は当店一番人気、VBAでIEを操作するサンプルです
------ [VBAでOutlookの操作 CreateObject("Outlook.Application")]・・・Outlookを使い、メール関係の処理です
------ [Access から Excel 連携 CreateObject("Excel.Application")]・・・人気のAccessからExcelへデータ書き出しなどです
------ [AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
------ [Accessのレポートを操作]・・・レポートを操作してみました
------ [Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
------ [Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
------ [ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
------ [Excel関係 関数、その他]・・・その他Excel関係です
------ [VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
------ [VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます
広告
-- [通販系の売れ筋広告へ] ←主に楽天やAmazonのランキングです
blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列
情報を探す
情報を探すならGoogleかな?
↓Web全体、サポート情報(support.microsoft.com)や三流君VBA(ken3.org)から検索する
書籍の購入
Webだけじゃさすがに勉強しきれないので、プログラミング関係の書籍も読んでみては??
コンピュータ書籍の発送がハヤイ専門店
コンピュータの本・専門店
|
※種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。
お奨め本の目次を見るだけでも勉強になったり
|
amazon.co.jpでキーワード別チェック
下記、私が設定したキーワードですが、こんな感じで資料や書籍を探ってみては?
[VBA全体を把握する] -- やはり全体をさらっと見たいですよね。
[SQL関連でDB力UP] -- システムはデータベース設計が重要
[ADO接続を探る] -- VBAなのでADO接続を押さえておく
[Windows APIを探る] -- さらにAPIになて知ってれば強力だ!
[.NETを探る] -- と言っても時代は.NETに流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・