- PR -

御教授ください。

投稿者投稿内容
akiyama
会議室デビュー日: 2003/12/15
投稿数: 5
投稿日時: 2003-12-15 18:35
DB -(JDBC)-> Servlet -> Access(IEで起動できますでしょうか?)
->そしてクライアント側でユーザーには分からないように
バックグラウンドにてAccessで生成したモノ?をクライアントで印刷。
という流れをサーブレット?で制御することを考えて御座います。
でくのぼう様のおっしゃる通りです。
印刷をする為のツールとしてAccessを利用しようと考えています。
AccessにDBから取得したCSVファイルを読ませてあげるとCSVファイルのデータ
をバーコード化してプリントアウトしてくれるらしいのですが...


[ メッセージ編集済み 編集者: akiyama 編集日時 2003-12-15 18:45 ]
でくのぼう
大ベテラン
会議室デビュー日: 2003/10/06
投稿数: 162
投稿日時: 2003-12-15 19:31
ええと、受け答えから察するに Access を DB に
直接接続させる事は難しい環境なのですね?

つまりおばけさんが提案するような構成は取れない
という事でよろしいですね?

以下、それを前提に話を進めます。

残念ですがサーバの制御下において、アクセスしてきた
クライアントに気づかれないようバックグラウンドで印刷を行う
というのは不可能でしょう。

セキュリティの観念からもそんな仕組みは考え辛いです。
気が付かずに100枚も勝手に印刷されてた・・・なんて恐ろしい。
それ以前にサーバの役割を逸脱し過ぎてますし。

単にAccessを起動させるだけなら出来ますが、
それだってクライアントの許可無しには出来ません。
(勝手にVBAを実行される可能性がある!)

代替案としては Access に HTTP リクエストをさせる、とか
考えられますけど CSV 形式は理解してくれるかどうか・・・。
これはちょっと私の専門外ですのでわからないです。すいません。

もうちょっと手の込んだ方法としてはサーブレットに
バーコード化したPDFを出力させるとか。
凄い手間がかかってしまう上に、これも勝手に印刷なんて出来ません。


ところで

引用:

AccessにDBから取得したCSVファイルを読ませてあげるとCSVファイルの
データをバーコード化してプリントアウトしてくれるらしいのですが...



この処理って前もってAccessが所定のMDBを開いておく必要って
無いんでしょうか?

それこそ帳票出力フォーマットのテンプレートが保存されているMDBとか。
私はAccessにかなり疎いもので、こんな機能がデフォルトで
ついているのか判断できないのです・・・。

仮に所定のMDBを開かなくてはいけない、という前提があるのなら
これはもうサーブレットの範疇ではなくAccess内のVBAでなんとか
頑張る、というのが自然な方法でしょう。

VBAでは実現不可能なら、VBとかで専用アプリケーションを
作った方が早そうに思います。

もしそうするなら、ここから先は Insider.NET ですね。
akiyama
会議室デビュー日: 2003/12/15
投稿数: 5
投稿日時: 2003-12-15 20:15
>残念ですがサーバの制御下において、アクセスしてきた
>クライアントに気づかれないようバックグラウンドで印刷を行う
>というのは不可能でしょう。
たしかに冷静に考えると常識はずれですよね。こんなことがサーバ側で勝手に
制御できてしまったら...。

>単にAccessを起動させるだけなら出来ますが、
>それだってクライアントの許可無しには出来ません。
>(勝手にVBAを実行される可能性がある!)
>この処理って前もってAccessが所定のMDBを開いておく必要って
>無いんでしょうか?

予めテンプレートが保存されているMDBファイルは既に用意して御座います。
MDBはAccessが起動している事が前提だと思いますので
先ずはRuntime#exec()メソッドで"/Program Files/Microsoft Office/Office/Msaccess.exe"のエグゼを実行してあげてから
mdbの実行といった流れとなるのでしょうか?
Accessの起動方法など
具体的なコードの書き方など御教授くださいませんでしょうか。
でくのぼう
大ベテラン
会議室デビュー日: 2003/10/06
投稿数: 162
投稿日時: 2003-12-15 20:27
あれ?
クライアントもJavaじゃないと駄目なんですか?

作るものの構想が変わったようですので、混乱防止の為
その構成を教えていただけますか?

その上で不明点を洗い出して、再度わからない点があれば
質問するようにした方が良いかと。

// でなければ、ここは akiyama さんのアプリケーション製作スレッドになってしまいます。

でも一応以下の部分にわかる範囲で回答も。

引用:

先ずはRuntime#exec()メソッドで"/Program Files/Microsoft Office/Office/Msaccess.exe"のエグゼを実行してあげてから
mdbの実行といった流れとなるのでしょうか?



Runtime#exec() を使えば Access を起動する事は可能です。
あくまで予想ですが起動時の引数にファイル名を渡す事で指定したMDBを開く事もできるかと。

そもそも Access の API に精通していない私にはきちんとした回答はできかねますので
この程度しか言えないです、すいません。

でくのぼう
大ベテラン
会議室デビュー日: 2003/10/06
投稿数: 162
投稿日時: 2003-12-15 22:06
そうか、Runtime#exec() の話は、私が以下のように書いたからですね。

引用:

単にAccessを起動させるだけなら出来ますが



これは HTTP ヘッダを

コード:
Content-Type: application/msaccess
Content-Disposition: inline; filename=hoge.mdb



のように出力すれば Access は起動しますよ、という話です。

Runtime#exec() は、その Java が稼動しているマシンのランタイム環境にある
プログラムを起動するだけで、サーブレットがこれを実行する事はサーバ内に
何らかのプロセスを作成するだけであって、クライアントでは勿論起動しません・・・。

ちょっとサーバ、クライアントで何が出来るのか、と言う部分で
混乱されているように見えますので、ちょっと一日ばかり頭を休ませて
再度取り組まれる事をお勧めします。

// 私の発言で、かえって混乱をまねいてしまったかもしれません。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2003-12-16 10:02
おはようございます。
るぱんです。

構成は
コード:

IE───Servlet───DB
│ ↓
│ @CSV作成(ファイル名指定)

└→AACCESS起動!
A−1 マクロでCSVをAccessに格納!
A−2 Accessフォームから印刷実行!
A−3 さりげなくAccess終了!


と言う風にお見受けしました。

ServletのBeanの中でbatなりexeを叩いて特定のファイルにある、
CSVデータをAccessのテンプレートファイルに突っ込んで
Accessのフォームから出力させたいと言う事でよろしいでしょうか?

Accessのマクロで片がつきませんかね?
見えないフォームを呼び出して、
処理させた後
見えないフォームを終了させると言う事で良いですか?

あと、帳票印刷をする場合は、
どのようなレイアウトにするかも神経使うところです。
先に煮詰めておいた方がいいですよ。

Accessの場合は以下のサイトをお勧めします。
MOUG(MicroSoft Official Users Group)
http://www.moug.net/

[ メッセージ編集済み 編集者: るぱん 編集日時 2003-12-16 10:02 ]
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2003-12-16 11:17
引用:

akiyamaさんの書き込み (2003-12-15 20:15) より:
>残念ですがサーバの制御下において、アクセスしてきた
>クライアントに気づかれないようバックグラウンドで印刷を行う
>というのは不可能でしょう。
たしかに冷静に考えると常識はずれですよね。こんなことがサーバ側で勝手に
制御できてしまったら...。


 そもそもプリンタはクライアントの資源ですから、
もし可能であったとしても、
それをダウンロードさせたアプリケーションに、
勝手に触れさせるべきではありません。
設計の見直しをお勧めします。
TomScissors
ベテラン
会議室デビュー日: 2003/06/05
投稿数: 79
投稿日時: 2003-12-16 11:32
>akiyamaさん
マルチポストというものをご存知ですか?

両方利用している身としては見過ごせませんのでこちらでも報告しておきます。
http://www.vc-net.ne.jp/~ytp/bbs/java/bbs17229.html

スキルアップ/キャリアアップ(JOB@IT)