DOBON.NETプログラミング道掲示板
(現在 過去ログ3 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■33925 / inTopicNo.1)  VB.netで作成されたプログラムからAccessのレポート印刷時にバーコードが表示されない
  
□投稿者/ 山田太郎 一般人(1回)-(2018/07/20(Fri) 17:16:55)
  • アイコン環境/言語:[NET Framework 4.6.2 32bit] 
    分類:[.NET] 

    VB.netのアプリケーションで、特定のボタンを押したときに
    Accessであらかじめ作成していたレポートを印刷するプログラムを作成しようとしています。
    しかしレポートの印刷時に、バーコード部分のみが空白で出力されてしまいます。
    バーコードがの表示にはActiveXコントロールの「Microsoft BarCode Control 15.0」を使用しています。
    どなたか解決策をご存知の方はございませんでしょうか?

    以下はVBのAccess印刷部分です。

    Dim myPath As String = My.Application.Info.DirectoryPath & "\AccessFile.accdb"
    Dim AccObj As Object = CreateObject("Access.Application")

    With AccObj
    .OpenCurrentDataBase(myPath)
    .DoCmd.OpenReport("testReport")
    .Quit()
    End With

    「AccessFile.accdb」の中の「testReport」というレポートを印刷しようとしています。
    よろしくお願いいたします。
引用返信 削除キー/
■33926 / inTopicNo.2)  Re[1]: VB.netで作成されたプログラムからAccessのレポート印刷時にバーコードが表示されない
□投稿者/ 魔界の仮面弁士 大御所(1132回)-(2018/07/21(Sat) 10:13:57)
  • アイコンNo33925に返信(山田太郎さんの記事)
    > Dim myPath As String = My.Application.Info.DirectoryPath & "\AccessFile.accdb"
    この場合、DirectoryPath が "X:\" を返してきた場合において、
    "X:\\AccessFile.accdb" というパスが得られることになりますね。

    直ちに問題にはならないと思いますが、パス連結は & 演算子ではなく、
    Path.Combine メソッドで行うようにした方がよいと思いますよ。

    それはさておき。


    > Accessであらかじめ作成していたレポートを印刷するプログラムを作成しようとしています。
    Access は無償の Runtime 版ではなく、製品版なのですね。


    > .DoCmd.OpenReport("testReport")
    OpenReport の第 2 引数が省略されていますね。
    ということは、直接印刷(acViewNormal)されたいのですね?

     Const acViewReport As Integer = 5 '画面上での閲覧
     Const acViewPreview As Integer = 2 '印刷設定に応じたプレビュー表示
     Const acViewNormal As Integer = 0 '表示せずにプリンターに印刷

    もしも直接印刷以外の場合は、画面表示のための「AccObj.Visible = True」も必要です。
    (あるいは、AutoExec マクロ側で表示させるとか)



    > しかしレポートの印刷時に、バーコード部分のみが空白で出力されてしまいます。
    セキュリティ警告によって、ActiveX コントロールがブロックされていたという可能性が高そうです。
    念のため、
     .DoCmd.OpenReport("testReport")
     .Visible = True
     MsgBox("終了前の中断。セキュリティ設定はどうなっている?")
     .Quit()
    のようにして、Access を表示した状態で一時停止して確認みてください。
    もしブロックされているようなら、セキュリティセンターの設定を見直してみましょう。



    あるいは、表示時点で、レポートに連結されたデータソースに正しくデータが格納されていないとか…。
    (その場合は、バーコードだけが出力されないという状態にはならないでしょうけれども)

    たとえば、プロジェクト内に accdb ファイルを同梱しており(『ビルドアクション』が「コンテンツ」)、
    かつ『出力ディレクトリにコピー』が「常にコピーする」になっているような場合だと、
    ビルドするたびに、修正前の accdb で上書きされてしまうといった事が起こりえます。

    あるいは、今回のコードには書かれていませんが、実行時にデータの書き込みを行って
    いるような場合には、トランザクションの Commit が明示的に行われているかを確認してください。
    トランザクションがコミットされていない場合、非同期書き込みのために
    500ミリ秒程度の書き込み遅延が発生する可能性があります。
    http://www.canalian.com/workshop/access/JetCache.html



    なお自分なら、COM オブジェクトの解放のために
     Const acViewNormal As Integer = 0
     Dim AccObj As Object = CreateObject("Access.Application")
     Dim DoCmd As Object = AccObj.DoCmd
     AccObj.OpenCurrentDataBase(myPath)
     DoCmd.OpenReport("testReport", acViewNormal)
     'AccObj.Visible = True
     Marshal.ReleaseComObject(DoCmd)
     AccObj.Quit()
     Marshal.ReleaseComObject(AccObj)
    のようなコードを用いるか、もしくは Process.Start メソッドで MSACCESS.EXE を呼び出すようにして
    コマンドライン引数で起動時パラメーターを与えるようにすると思います。
    https://support.office.com/ja-jp/article/079164cd-4ef5-4178-b235-441737deb3a6#ID0EAABAAA=Access

    ※いずれにしてもセキュリティ許可設定は必要。
961×33 => 250×8
イメージ
Security.png
/4KB
引用返信 削除キー/
■33929 / inTopicNo.3)  Re[2]: VB.netで作成されたプログラムからAccessのレポート印刷時にバーコードが表示されない
□投稿者/ 山田太郎 一般人(3回)-(2018/07/23(Mon) 10:30:01)
  • アイコンご回答ありがとうございます!

    > 直ちに問題にはならないと思いますが、パス連結は & 演算子ではなく、
    > Path.Combine メソッドで行うようにした方がよいと思いますよ。
    危険性を認識しておりませんでした。ご指摘ありがとうございます。

    > Access は無償の Runtime 版ではなく、製品版なのですね。
    製品版を利用しております。

    >> .DoCmd.OpenReport("testReport")
    > OpenReport の第 2 引数が省略されていますね。
    > ということは、直接印刷(acViewNormal)されたいのですね?
    今回は直接印刷がしたかったのですが、いままでプレビュー表示等ができることを知りませんでした。ありがとうございます。

    > セキュリティ警告によって、ActiveX コントロールがブロックされていたという可能性が高そうです。
    その通りでございました。添付いただいた画像と同じ警告が発生しておりました。
    Accessのセキュリティセンターから「AccessFile.accdb」のディレクトリパスを信頼できる場所に追加することで正常にバーコードが印刷できるようになりました。
    ありがとうございました。


解決み!
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/


- Child Tree -