Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


770 / 2272 ツリー ←次へ | 前へ→

【10210】PostgreSQLとの連携 ko6610n 08/2/7(木) 10:26 質問[未読]
【10211】Re:PostgreSQLとの連携 VBWASURETA 08/2/7(木) 10:53 発言[未読]
【10215】問題となりそうな点 VBWASURETA 08/2/7(木) 14:01 発言[未読]
【10218】Re:問題となりそうな点 ko6610n 08/2/7(木) 17:10 質問[未読]
【10222】Re:問題となりそうな点 VBWASURETA 08/2/7(木) 18:57 発言[未読]
【10224】Re:問題となりそうな点 ko6610n 08/2/7(木) 19:25 回答[未読]
【10225】Re:問題となりそうな点 VBWASURETA 08/2/7(木) 20:38 回答[未読]
【10228】Re:問題となりそうな点 ko6610n 08/2/8(金) 10:32 お礼[未読]
【10229】Re:問題となりそうな点 VBWASURETA 08/2/8(金) 10:57 発言[未読]
【10231】Re:問題となりそうな点 VBWASURETA 08/2/8(金) 11:44 発言[未読]
【10232】Re:問題となりそうな点 ko6610n 08/2/8(金) 11:54 お礼[未読]

【10210】PostgreSQLとの連携
質問  ko6610n  - 08/2/7(木) 10:26 -

引用なし
パスワード
   はじめての書き込みです。よろしくお願いします。

いろいろ調べていてこちらにたどりつきましたので
質問させていただきます。

<1>
PostgreSQLのDBサーバ(本サーバ)のDBを丸ごとAccessにコピーし
そのDBを自動的に毎日定時に本サーバにコピーしなおすといったことは
可能でしょうか?

リンクテーブルだとたとえば処理の重いSQLをAccessで走らせたと
しても実際は本サーバにアクセスされていると思いますので、
上記の方法を思いつきました。


<2>
さらに上記方法が可能であればAccess側に本サーバにないテーブルを
追加して本来、本サーバでは蓄積していないデータをAccess側でためたい
と思っています。


データに関してはAccessは本サーバに接続できる条件が読み取り専用
なので同期というよりは本サーバのデータを定期的にAccessに上書きする
といった感じです。

【10211】Re:PostgreSQLとの連携
発言  VBWASURETA  - 08/2/7(木) 10:53 -

引用なし
パスワード
   ▼ko6610n さん:
こんにちは。

以前、SQLサーバ7.0で似た感じのバックアップ方法をしてましたが、
ただ、PostgreSQLでも可能か不明です。

やり方としては、ADOでまず、全テーブルを列挙します。
列挙SQL:select TABLE_NAME from USER_TABLES

次にADOにより1テーブルの1レコード単位で取得します。

取得したデータをDAOにより追加します。
※MDBの処理はADOだとレスポンスが遅くなります。

後は、繰り返しするイメージです。

この方法は全20万件ぐらいのデータでも15分程度掛かるので
有効ではないかも知れません。

【10215】問題となりそうな点
発言  VBWASURETA  - 08/2/7(木) 14:01 -

引用なし
パスワード
   この質問はサーバーの負荷軽減策ということですが、
以下のような問題があります。

少し前の質問(【10083】モジュールがインポートできない・・・ )で
あげられてましたが、Accessは3Gバイトのサイズまでが限界と
なっているようです。

後、AccessのMDBファイルは壊れやすく、排他更新(同時複数更新)も
かなり弱いです。
エラーコード:3343が出た時点でデータは全て無駄になったりします。
※修復可能な場合がありますが。修復後そのまま使用するのは危険です。

そのため、データの安全性、一括管理という面で、リンクテーブルが
存在しているのでもあります。

Accessでのデータ管理をする場合は十分に設計を考えないと
取り返しが付かないこともありえますのでご注意下さい。

【10218】Re:問題となりそうな点
質問  ko6610n  - 08/2/7(木) 17:10 -

引用なし
パスワード
   回答ありがとうございます。
容量制限などがあるんですね。知りませんでした。

ちょっと大まかにやりたいことを書いてしまったのですが詳しく書くと…

本サーバに接続できるIPは制限されていてその1台(専用クライアント)のみが
読取のみの権限で接続することができます。

専用クライアントにエクセルファイルを置いておきWindowsのタスク機能で
エクセルファイルを開き、クエリを使用して本サーバからデータを取得すると
いったVBSファイルを実行させて毎日定時刻にデータの取得を行っています。

テーブルに見立てた各シートに1行ずつ追加していきメインページで日付を
指定するとその日のデータを表示するといったことを行っています。
日付をキーとしてVLOOKUPで検索をして値を取得しています。

毎日、ある時間でのデータを蓄積したいのですが本サーバにはそのような機能が
ないのでそのようなものを作りましたが、さらに一般ユーザのクライアントが
このファイルを閲覧したいのですが専用クライアントに共有フォルダを作って
ユーザがファイルを開いています。
この時は本サーバへのアクセスはなくてエクセル上の関数で値をシートから
とってきているので問題なく使用することができます。

当初はリモートデスクトップで接続してユーザがリアルタイムにデータを
取得していたのですがリモートデスクトップへの接続の煩雑や同時刻にデータが
取れないなどの理由から上記のような方法を思いつきました。

これ以外にもリアルタイムでその時のデータを取得したい内容もあるのですが
その場合だと共有フォルダから開いてユーザが本サーバにアクセスしてしまうと
専用クライアントからの接続ではなくなってしまうのでエラーになってしまいます。

そんな状態で何か改善できないと思いついたのがタスクのスケジュールで定期的に
アクセスが本サーバに必要な情報を取得(更新)しユーザは制限のない専用クライアント
のAccessのDBにアクセスするツールを作ってあげれば解決するかなと思いました。

どうせならすべてのテーブルと思ったのですが厳密には必要なデータだけAccessに
取り込めれば良いです。要領の問題もあるようなので。

環境としては以下のとおりです。
本サーバのDB:PostgreSQL
専用クライアント:Office20007Pro(Accessあり)※保存は2003形式
各ユーザ:Office2003Std(Accessなし)

もし、ユーザのマシンから無理やり専用クライアント経由で本サーバにアクセスすると
いった事が出来ればエクセルからでも可能ですが(本サーバへの負荷は考えないとして)
どちらが現実的でしょうか?

長文失礼しました。

【10222】Re:問題となりそうな点
発言  VBWASURETA  - 08/2/7(木) 18:57 -

引用なし
パスワード
   ▼ko6610n さん:

こんにちは。
ちょっと認識違いが有るかもしれませんが、質問と提案があります。

まず、質問は以下の通りです。
1.本サーバから接続できるのはクライアント1台ですよね?
 で、その専用クライアントは共有さえすれば何ユーザでも見ることは
 可能でしょうか?

2.定期的に更新ということですが、Accessは起動したままで
 更新するのはタイマーとか考えられてますか?


次に提案ですが、上記1.の内容が可能であればMDBでの蓄積ではなく、
Csvデータでも良いわけですから日別のCsvを作って
それを共有から取り込み見るというのはダメでしょうか?

この方法によるメリットは、
1.容量はPCのHDD以外制限は無い。
2.同時で見てもファイルは壊れない。
3.日別フォルダなのでデータ量もある程度一定。
4.Csvファイルであるため、アプリに依存しない。


ファイル管理構造例え:

..\共有フォルダ\20080207\○○テーブル.Csv

のような日別にデータを保存する。

保存はデータテーブルのCsv(テキストファイル)にAccessが
テキスト形式エクスポートするだけです。
後、Windowsタスクであればファイルコピーの処理ができますから、
MDBファイル(マスタコピー用)から日々ファイルを
コピー(コピー前に削除)して、タスク実行用の
MDBファイルを日単位に生成する。

※これでMDBファイル破損頻度は低下しますし、
 MDBサイズは大きくならないまま使用が可能になります。

【10224】Re:問題となりそうな点
回答  ko6610n  - 08/2/7(木) 19:25 -

引用なし
パスワード
   ▼VBWASURETA さん:

早速の回答ありがとうございます。

>1.本サーバから接続できるのはクライアント1台ですよね?
> で、その専用クライアントは共有さえすれば何ユーザでも見ることは
> 可能でしょうか?
接続できるのは専用クライアント1台です。
固定IPを割り振っていてそのIPのみが読取ユーザでサーバにアクセス可能です。
そのクライアントへの共有はフォルダのアクセス権のみ
なので自由に接続できるユーザは設定できます。

>2.定期的に更新ということですが、Accessは起動したままで
> 更新するのはタイマーとか考えられてますか?
エクセルはvbsファイルを作成してそこにエクセルを起動して、
10秒後にモジュールを開始するというのを記述しています。
そのファイルをタスクで実行させています。
エクセルの終了はエクセル側のVBAで行っています。
アクセスも同じようなことを考えていました。


>次に提案ですが、上記1.の内容が可能であればMDBでの蓄積ではなく、
>Csvデータでも良いわけですから日別のCsvを作って
>それを共有から取り込み見るというのはダメでしょうか?
>
>この方法によるメリットは、
>1.容量はPCのHDD以外制限は無い。
>2.同時で見てもファイルは壊れない。
>3.日別フォルダなのでデータ量もある程度一定。
>4.Csvファイルであるため、アプリに依存しない。
>
>
>ファイル管理構造例え:
>
>..\共有フォルダ\20080207\○○テーブル.Csv
>
>のような日別にデータを保存する。
>
>保存はデータテーブルのCsv(テキストファイル)にAccessが
>テキスト形式エクスポートするだけです。
>後、Windowsタスクであればファイルコピーの処理ができますから、
>MDBファイル(マスタコピー用)から日々ファイルを
>コピー(コピー前に削除)して、タスク実行用の
>MDBファイルを日単位に生成する。
>
>※これでMDBファイル破損頻度は低下しますし、
> MDBサイズは大きくならないまま使用が可能になります。

こちらの提案ですが、以下のような認識でよろしいでしょうか?
・エクセルの情報を知りたいメインのファイルを各ユーザのPCに置いておく
・本サーバから取得したデータをCSVファイルで定期的に共有フォルダに保存
・共有フォルダへアクセスできるユーザはエクセルを起動して更新等の
 アクションをかけるとネットワーク経由で情報を取得する
  →シートで貯めていたデータを別ファイルとしてCSVに置き換える?

この方法だと完全に許されたクライアントしかデータを見れないので
セキュリティ面でも現在行っている方法より良いと思います。
現在のやり方だとエクセルをローカルにコピーしても情報はその
Bookのシートにあるのでどのユーザでも情報は取得できてしまいます。

ただ、
・本サーバから取得したデータをCSVファイルで定期的に共有フォルダ保存
の部分がいまいちイメージできません。
こちらの作業をAccessで行うということでしょうか?
もしくはエクセルのクエリで取得してCSV形式で保存?

【10225】Re:問題となりそうな点
回答  VBWASURETA  - 08/2/7(木) 20:38 -

引用なし
パスワード
   ▼ko6610n さん:

>接続できるのは専用クライアント1台です。
>固定IPを割り振っていてそのIPのみが読取ユーザでサーバにアクセス可能です。
>そのクライアントへの共有はフォルダのアクセス権のみ
>なので自由に接続できるユーザは設定できます。

で、あれば接続するユーザを特定にして頂ければ良いと思います。


>エクセルはvbsファイルを作成してそこにエクセルを起動して、
>10秒後にモジュールを開始するというのを記述しています。
>そのファイルをタスクで実行させています。
>エクセルの終了はエクセル側のVBAで行っています。
>アクセスも同じようなことを考えていました。

常時ではなければ、多重起動さえなければ大丈夫と思います。


>こちらの提案ですが、以下のような認識でよろしいでしょうか?
>・エクセルの情報を知りたいメインのファイルを各ユーザのPCに置いておく

これは取り込むExcelでしょうか?
であればそうですね。


>・本サーバから取得したデータをCSVファイルで定期的に共有フォルダに保存

そうです。形式は日付フォルダ毎にテーブルファイル保存ですね。
日付+テーブルファイル名.Csv でも良いですが、共有フォルダに
ファイルが多すぎてわかりづらくなりますので、日付フォルダ管理すると
見やすいですね。
実は、過去にファイルだけにして作った事があるのですが、
エクスプローラ等で共有を見る場合かなり重い状態となりました。


>・共有フォルダへアクセスできるユーザはエクセルを起動して更新等の
> アクションをかけるとネットワーク経由で情報を取得する
>  →シートで貯めていたデータを別ファイルとしてCSVに置き換える?

それでも良いですが、ローカルにコピーしてしまっても良いです。
取り込み後に削除処理さえあれば残りませんから。


>・本サーバから取得したデータをCSVファイルで定期的に共有フォルダ保存
>の部分がいまいちイメージできません。
>こちらの作業をAccessで行うということでしょうか?
>もしくはエクセルのクエリで取得してCSV形式で保存?

こちらについては、実はAccessでもExcelどちらのVBAでも可能です。
でもAccess VBAの掲示板なのでAccess VBAで話してます。

処理フロー:サーバ からのデータ抽出⇒ 共有PC Accessから共有フォルダへのCsv保存 ⇒ 各PCからCsv取り込み処理

【10228】Re:問題となりそうな点
お礼  ko6610n  - 08/2/8(金) 10:32 -

引用なし
パスワード
   ▼VBWASURETA さん:

返信ありがとうございます。
なんとなく流れがつかめました。

DBを扱うにはAccessの方が良いのかな?と思って
いましたがCSVでしたらExcelでも扱えそうですね。

VBの知識がほとんどないのでExcelの時はマクロの
録画機能を参考にしてコーディングしていました。

Accessはそのような機能ないみたいですね…。
今回はExcelで頑張ってみようと思います。

時間を見つけてAccessも勉強しようと思いますので
その際はまたよろしくお願いします。

【10229】Re:問題となりそうな点
発言  VBWASURETA  - 08/2/8(金) 10:57 -

引用なし
パスワード
   ▼ko6610n さん:
おはようございます。

Excelの録画というのは自動マクロ記録でしょうか?
それはExcelとWordだけですね^^;

ユーザ向けにしているので扱い易いようについている機能でしょうが。
Accessは開発者向けなので、そいうのはないですね。

でもデータを扱うのでしたらAccessを覚えれば結構重宝に使えますので
余裕があるときにでも覚えると良いですね。

【10231】Re:問題となりそうな点
発言  VBWASURETA  - 08/2/8(金) 11:44 -

引用なし
パスワード
   ▼ko6610n さん:

一応ですが、Accessについての書かれているところがあったので
ちょっと気分転換ぐらいで読んでみると良いかもです。

h tp://accessaccess.gozaru.jp/log200509.html

【10232】Re:問題となりそうな点
お礼  ko6610n  - 08/2/8(金) 11:54 -

引用なし
パスワード
   ありがとうございます。
今後、Access使い慣れるように参考にさせていただきます。

770 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078201
(SS)C-BOARD v3.8 is Free