tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルACCESS未インストール環境でのレポート印刷について
記事No15922
投稿日: 2014/07/07(Mon) 11:02
投稿者飼い猫

開発環境
O S:Windows7
ソフト:Visual Studio6.0
ACCESS:2003

問題点:ACCESSがインストールされていない端末でのレポートを印刷する方法

初めまして、VB6.0での開発歴5か月ほどのものです。
どうしても上記の問題点が解決できずに困っております。
ACCESSがインストールされていない端末でもテーブルへのSELECTやINSERTはできるのですが
レポートを印刷しようとしても印刷できず困っております。
どなたか解決方法をご存知の方いらっしゃいましたら教えていただければと思います。

宜しくお願い致します。

[ツリー表示へ]
タイトルRe: ACCESS未インストール環境でのレポート印刷について
記事No15925
投稿日: 2014/07/08(Tue) 11:09
投稿者魔界の仮面弁士
> ACCESSがインストールされていない端末でもテーブルへのSELECTやINSERTはできるのですが
> レポートを印刷しようとしても印刷できず困っております。

SELECT や INSERT は、Jet Database の機能です。
これは、Access が無くても動作します。(DAO や Jet OLEDB から利用)

一方、Report は JET ではなく、Microsoft Access 側の機能ですので、
実行環境に、Access のランタイムが必須となります。

[ツリー表示へ]
タイトルRe^2: ACCESS未インストール環境でのレポート印刷について
記事No15932
投稿日: 2014/07/08(Tue) 17:27
投稿者飼い猫
> > ACCESSがインストールされていない端末でもテーブルへのSELECTやINSERTはできるのですが
> > レポートを印刷しようとしても印刷できず困っております。
>
> SELECT や INSERT は、Jet Database の機能です。
> これは、Access が無くても動作します。(DAO や Jet OLEDB から利用)
>
> 一方、Report は JET ではなく、Microsoft Access 側の機能ですので、
> 実行環境に、Access のランタイムが必須となります。

魔界の仮面弁士様

ご回答ありがとうございます。
環境についてご説明が抜けておりました。
ACCESS2003のランタイムはインストール済です。

    Set ac = CreateObject("Access.Application") ← ここでエラー!
  
    ac.OpenCurrentDatabase App.Path & "\SY.mdb"

    ac.DoCmd.OpenReport "価格表", 0

    ' データベースを閉じる
    ac.CloseCurrentDatabase
    ac.Quit

実行時には以下のエラーが発生します。
「ActiveX コンポーネントはオブジェクトを作成できません。」

記述の仕方等おかしな所はございますでしょうか。

[ツリー表示へ]
タイトルRe^3: ACCESS未インストール環境でのレポート印刷について
記事No15933
投稿日: 2014/07/08(Tue) 17:57
投稿者魔界の仮面弁士
> ACCESS2003のランタイムはインストール済です。
>     Set ac = CreateObject("Access.Application") ← ここでエラー!

ランタイムのみの場合、CreateObject での利用はできません。

msaccess.exe を Shell 関数等で起動しておき、
そのインスタンスを GetObject 関数で取得してみてください。

---
以下追記:
http://support.microsoft.com/kb/147816/en-us

[ツリー表示へ]
タイトルRe^4: ACCESS未インストール環境でのレポート印刷について
記事No15935
投稿日: 2014/07/08(Tue) 19:38
投稿者飼い猫
魔界の仮面弁士様

ご回答ありがとうございます。
早速コーディングを変更致しました。

    Dim processId As Long
    'ACCESSをシェル関数で起動
    processId = Shell("C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE C:\PG\SY.mdb",   vbNormalFocus) ←※1
    
    Dim ac As Object
    ac = GetObject(, "MSACCESS.EXE") ←※2

  ※3
    ac.DoCmd.OpenReport "価格表", 0

    ' データベースを閉じる
    ac.CloseCurrentDatabase
    ac.Quit

shell関数とgetobject関数は使用したことがない為、苦戦しております。
※1のshell関数での起動の仕方は間違っておりませんでしょうか。(処理時にACCESSが起動します)
※2のgetobjectの記述方法がどうしてもわかりません。どのように記述すればよいか教えていただけないでしょうか。
※3ではレポートを印刷したいのですがこの記述でいけるのでしょうか。

基本的なことばかり聞いてしまい申し訳ないのですがよろしくお願いします。

[ツリー表示へ]
タイトルRe^5: ACCESS未インストール環境でのレポート印刷について
記事No15936
投稿日: 2014/07/09(Wed) 01:25
投稿者魔界の仮面弁士
> processId = Shell("C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE C:\PG\SY.mdb",   vbNormalFocus) ←※1

その書き方だと、"C:\Program" というアプリに対して、引数として
"Files\Microsoft" と "Office\OFFICE11\MSACCESS.EXE" と "C:\PG\SY.mdb" を
引き渡しているかのように解釈されてしまう恐れがあります。
(ある程度は自動判断されますが、C:\Program.exe や C:\Program.bat があると誤動作します)

空白を含むパスは
 ・パスの両端を「"」で囲む
 ・ロングファイルネームではなく、8+3のショートファイルネームで指定する
のいずれかの対策を取るようにしておくのが無難です。

先に紹介した URL (KB147816)では、それに対する対策も施されていますので、
"Using a Run-Time Application" の項を再度確認してみて下さい。

それと、/runtime オプションも付与しておいた方が良いかと思います。
このオプションが無くとも、実行環境での差は無いはずですが、
Access 製品版が入っている環境で /runtime モードを指定すると、
ランタイムのみの環境と同じモードで動作するため、事前検証の役に立ちます。


>     ac = GetObject(, "MSACCESS.EXE") ←※2
『Set』キーワードが抜けています。また、肝心のパラメータ指定にも問題があります。
Set ac = GetObject("C:\PG\SY.mdb") に置き換えたうえで、
前回の回答にある KB147816 を再度確認してみて下さい。

[ツリー表示へ]