• ベストアンサー

accessのオブジェクトを差し替えるには

お世話になります。 遠方の小さな事業所のPCの仕組みをサポートしています。 この事業所にネット環境がなく、データの入出力以上の処理ができる人もいません 出来上がった仕組みはCDに入れて郵送しています。 ファイルを開くと添付のようなメニュー画面になります。 不都合があるとオブジェクト(フォーム、レポート、出来ればテーブルも)の 差し替えが必要になります。 例えば、このメニュー画面に差し替えのコマンドボタンを作ることができますか

質問者が選んだベストアンサー

  • ベストアンサー
noname#231195
noname#231195
回答No.2

えーと、アイデアだけでいいですか? 手元で実際に書いてみようと思いましたが、結構長くなりそうなので途中で断念しました。 ・・・と余計な言い訳をしてみる。 まず、こんな風に運用することにしました。 差し替えるオブジェクトをUpDate.mdbというアクセスのファイルにし、それをCDに焼いて送るとします。現行のオブジェクトと更新するオブジェクトは同じ名前です。ですから、更新する前に、ユーザーには今のデーターベースファイルのバックアップをとることにしてもらいます。いくらなんでも、それくらいはユーザーができますよね? 差し替えコマンドボタンで同時にバックアップを作ることも試して見たのですが、私の思いついたFileCopyファンクションですと、今開いている自分自身を別にコピーできなかったのです。 差し替えコマンドボタンではUpDate.mdbにあるオブジェクトを見つけて、今開いている自分自身の中にあるオブジェクトと置き換えていきます。 Dim obj As AccessObject, dbs As Object Set dbs = Application.CurrentData For Each obj In dbs.AllTables (置き換え) Next obj これはテーブルについてのコードです。これをAllFormsやAllReports、AllModuleなどについても行います。 開いている(ロードされている)オブジェクトは閉じるなどの仕組みも必要かもしれません。開いているかどうかはIsLoadedプロパティで確認できます。 置き換えにはDoCmd.TransferDatabaseメソッドを使います。 例えば、ユーザーのCDドライブがDドライブなら DoCmd.TransferDatabase acImport, "Microsoft Access", "D:UpDate.mdb", acTable "Table01" とします。UpDate.mdbにある新しいTable01に差し替えます。 外からオブジェクトをインポートした時に、同じ名前のオブジェクトがあると、インポートしたオブジェクトの名前に番号を付けていくはずです。ですからインポートする前にもともとあるオブジェクトを削除するか、別の名前にしなければなりません。 また、このメソッドで更新するオブジェクトの名前を変えてインポートすることもできますから、UpDate.mdbの中ではTable01_20151227というようにバージョン番号をファイル名に含めておくこともできます。 私のアイデアのポイントはこれだけです。 ただこれらは私あまり実際に使ったことがないので、実際にコードにして走らせるといろいろ面倒くさいことが出てくるかもしれない悪寒がするんですけどね・・・ごめん。

chayamati
質問者

お礼

有難うございます

chayamati
質問者

補足

ご回答ありがとうございます。 お礼(補足)遅れて申し訳ありません 新しいシステムから、テーブルを除外したものにデータをインポートすることにし このファイルヴァージョンNo.を振りこれに旧ヴァージョンよりテーブルをインポートすることにして コーディングをしましたが実行時エラーでうまくいきません。 「DoCmd.TransferDatabase」と「DoCmd.CopyObject 」どちらでもと思いましたがいづれも実行時エラーです。 Private Sub テーブル取込_Click() DoCmd.TransferDatabase acImport, "Microsoft Access", "e:\ほんわか\介護予防評価", "口腔機能評価" End Sub の時は、「実行時エラー13 型が一致しません Private Sub テーブル取込_Click() DoCmd.CopyObject "e:\ほんわか\介護予防評価.mdb", "口腔機能評価", acTable, "口腔機能評価" End Sub の時は、「実行時エラー7874 オブジェクト 口腔機能評価を見つけることができません 介護予防評価.mdb はデクストップ、介護予防評価V1.mdbはCDに入っています

その他の回答 (3)

  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.4

#3です。 なんとなく、既存のシステムは何もせず、 差替え用の方を起動したときに、既存システムに 上書きさせた方がいいかなって思います。 もちろん既存システムは所定のパスに保存させて おいて、それに対して差替え用オブジェクトをエクスポート すればいいのかなと。 確認無しで強制的に上書き保存することは可能かと 思います。 ※確認メッセージが出たらでたで、客先には「このような  メッセージが表示されたら「はい」を押して下さい」って  予め伝えておけば、それでもいいのかなと。

chayamati
質問者

補足

再度のご提案有難うございます。 >>それに対して差替え用オブジェクトをエクスポート すればいいのかなと 外部データのインポート、エキスポートは自分は出来ますが、ユーザーにやてもらうのは考えられません。 この処理をコマンドボタンに組み込めないものかと今回の質問になりました。

  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.3

「不都合があるとオブジェクト」ということですが、 もちろん郵送される前には入念にテストはされている かと思うのですが。。 それでもバグが発生するということであれば、まずは テスト項目の洗い出しの時点で全てが網羅されてない んだと思います。 差替えのことを考えるよりは、まず、その辺 (漏れなくテストする方法)を検討された方がよいかと 思います。 恐らく、現状、不都合が出る頻度が多いから郵送するのに 手間がかかる=簡単に差し替え出来るようにしたい・・って ことでしょう。 普通は客先に納めるシステムで、自社都合用の機能は盛り込まない と思いますよ。 っていうか、例えばフォームを差し替えたい場合、結局それを 郵送するってことですよね?ネット環境が無いということは メールで添付ってこともできないと思いますし。。

chayamati
質問者

お礼

ご注意有難うございます。

chayamati
質問者

補足

ご回答ありがとうございます。 お説ごもっともですが、相手はエクセルのセルに計算式も入れられない CP音痴です。自分も趣味でやってきた素人でボランティアでやっていますす。使ってみて初めて分かることもあります、事前の打ち合わせで、完璧なシステムを作り上げることは不可能です。 事業所も自治体から委託されたボランティア的な組織体です。 自治体へは委託料の見返りに、活動状況、収支状況等を報告しなければなりません。報告書の形式も毎年かわります。

  • panacon
  • ベストアンサー率31% (214/679)
回答No.1

chayamati さんへ データ入力以上の処理ができないとする皆さんにAccessのデータやフロンと部分の入れ替え操作をしてもらうのは、データを失う危険もあるので他の方法を考えたほうが良いのではと思います。フォームのメニューを拝見したところ、大きな容量のデータベースではないのだろうと思いますので、Zipフィルに圧縮してパスワードをつけてメールでやり取りしてみてはと思います。これは、CDを郵送で行うタイムラブを問題にした場合です。入れ替えを行いたい理由が郵送でなくてやはり入れ替えが必要であれば、データの入っていない同じAccessを用意して、インポート定義を作って、元ファイルのデータをすべてインポートしてみてはと思います。これでしたら、元ファイルを所定の位置に置いてボタンを押すやり方を入力する人に理解して貰えれば、ボタンを押すことで、フォームなどの壊れの無いAccessにデータ移行できると思います。ただ、その前に、フォームなどのどこが壊れやすいのかを調べて手当てしておくことと、入力ミスを見つけてこのレコードを登録させないとか、入力ミスのレコードを修正するフォームが開いて直させるといった手順ができるように機能を追加することで、データの不具合を発生させないようにすることが先決だと思います。

chayamati
質問者

お礼

まだ未解決ですが、やるべきことが、わかりましたので ひとまず締めさせていただきます。 再度Qするつもりです。お目に止まりましたら宜しくお願いします。 有難うございました。

chayamati
質問者

補足

年末の何かと忙しい時に有難うございます。 >>大きな容量のデータベースではないのだろうと思いますので、 仰る通りです。利用者の登録人数は50名程度ですが、評価を受けるのは20名止まり、 評価項目数は、評価は四半期毎に行われ、直前四半期との比較です。 認知症予防:3項目、運動機能:9項目 口腔機能:10項目 手書きでも出来そうですね、これまではエクセル対応していましたが、セル内の式が実数になっていたり して不都合の連続です。 >>Zipフィルに圧縮してパスワードをつけてメールでやり取りしてみてはと思います。 事業所の規模が小さく、インターネットの環境もありません。 3年前までは近くに住まいしていましたのですが、自分が引っ越してしまったため >>データの入っていない同じAccessを用意して、インポート定義を作って、 元ファイルのデータをすべてインポートしてみてはと思います。 !!なるほどテーブルもオブジェクト 仕組みも添付図のように単純ですがリレーションシップが組み込んでいます。 主キーは全てオートナンバーです。 この点が気がかりですが   「DoCmd.CopyObject 」を試します。 >>ただ、その前に、フォームなどのどこが壊れやすいのかを調べて手当てしておくことと、 入力ミスを見つけてこのレコードを登録させないとか、 恥ずかしながら不都合は全て仕組みと考えて取り組んでいます。

関連するQ&A

専門家に質問してみよう