DOBON.NETプログラミング道掲示板
(現在 過去ログ3 を表示中)
HOME
HELP
新規作成
新着記事
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
[
最新記事及び返信フォームをトピックトップへ
]
[ トピック内全3記事(1-3 表示) ] <<
0
>>
■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/
HOME
HELP
新規作成
新着記事
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
-
Child Tree
-