C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: VB.NETとACCESS(レポート)について


(過去ログ 103 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■61699 / inTopicNo.1)  VB.NETとACCESS(レポート)について
  
□投稿者/ 介平 (4回)-(2011/08/29(Mon) 14:32:05)

分類:[.NET 全般] 

お世話になっております。
VS2008とACCESS2003でPGの練習をしているのですが
レポートを印刷するために次のようなPGを組みました。

Dim access As Object
Const acViewNormal1 = 0
access = CreateObject("Access.Application") ←ここでエラー><
With access
.OpenCurrentDatabase(MDBPATH & MDBNAME)
.DoCmd.OpenReport("R_TEST", acViewNormal1)
.CloseCurrentDatabase()
.Quit()
End With
access = Nothing
GC.Collect()
GC.WaitForPendingFinalizers()

上記のPGの所でエラーが発生してしまいます。

このPCにはACCESSが入っていません。(2003のコンポーネントが入っています。)

テーブル内のデータ参照等は問題ないのですが、レポートが印刷できず困っております。

解決策を御存じの方いらっしゃいましたら教えてください。

宜しくお願いします。

引用返信 編集キー/
■61701 / inTopicNo.2)  Re[1]: VB.NETとACCESS(レポート)について
□投稿者/ shu (961回)-(2011/08/29(Mon) 15:06:07)
2011/08/29(Mon) 17:37:58 編集(投稿者)
2011/08/29(Mon) 15:09:16 編集(投稿者)

No61699 (介平 さん) に返信

> access = CreateObject("Access.Application") ←ここでエラー><
AccessはCreateObject使用しない方がいいです。(ランタイムに対応する為)
ファイルを開いてから(Accessをプロセス起動してから)
GetObjectする必要があります。提示された内容の場合、COMを使用しないで
/x マクロ名 /cmd レポート名 をAccessの引数に追加して
マクロ内でプロシージャを実行
プロシージャ内で/cmdの引数を取得し、レポートを印刷してアプリケーションを終了
するという方法を行うことが出来ます。


>
> このPCにはACCESSが入っていません。(2003のコンポーネントが入っています。)
コンポーネントが何を指しているのか分かりませんが、ランタイムでも良いのでAccessが入っていないと駄目です。

# No61703 魔界の仮面弁士 の内容を読みCreateObjectが使用出来ないの記述を修正しました。
引用返信 編集キー/
■61703 / inTopicNo.3)  Re[1]: VB.NETとACCESS(レポート)について
□投稿者/ 魔界の仮面弁士 (2338回)-(2011/08/29(Mon) 15:27:16)
2011/08/29(Mon) 15:47:25 編集(投稿者)

No61699 (介平 さん) に返信
> このPCにはACCESSが入っていません。(2003のコンポーネントが入っています。)

実行環境に Access がインストールされていなければ、CreateObject はできません。
(製品版がインストールされているなら、CreateObject も可能です)

レポート出力が必要なら、実行環境にAccess のランタイムをインストールしておき、
その上で、Access をランタイムモードで起動した後、それを GetObject で
拾うことで、レポート機能を呼び出すことができます。

mdbPath = "C:\db1.mdb"
Dim p As Process = Process.Start("MSAccess.exe", """" & mdbPath & """ /runtime")
p.WaitForInputIdle()

Dim accApp As Object = GetObject(mdbPath)
Dim accDoCmd As Object = accApp.DoCmd

Const acViewNormal As Integer = 0
Const acViewPreview As Integer = 2

accDoCmd.OpenReport(reportName, acViewPreview)
MsgBox("レポート表示完了", MsgBoxStyle.SystemModal)
'accDoCmd.Quit()
Marshal.ReleaseComObject(accDoCmd)
accDoCmd = Nothing
accApp.Quit()
Marshal.ReleaseComObject(accApp)


http://office.microsoft.com/ja-jp/access-help/HA001120886.aspx?pid=CH011228281041
http://msdn.microsoft.com/ja-jp/library/aa165862(office.10).aspx
http://msdn.microsoft.com/en-us/library/aa167832(office.11).aspx
引用返信 編集キー/
■61733 / inTopicNo.4)  Re[2]: VB.NETとACCESS(レポート)について
□投稿者/ 介平 (6回)-(2011/08/31(Wed) 19:10:03)
返信が遅くなり申し訳ないです。

shu様

御回答ありがとうございます。
コンポーネントではなくランタイムの間違いでした。
ランタイムではcreateobjectが使えないとのことなので
どちらにも対応できるようにPGを組んでみようと思います。
現在コードを修正している最中なのですが進展がありましたら
また投稿させていただきますので宜しくお願いします。

魔界の仮面弁士様

御回答ありがとうございます。
コード及びリンクを書き込んでいただきありがとうございます。
大変参考になります。
現在コードを修正している所なので進展がありましたら
また投稿させていただきますので宜しくお願いします。
引用返信 編集キー/
■61776 / inTopicNo.5)  Re[3]: VB.NETとACCESS(レポート)について
□投稿者/ ツ介平 (1回)-(2011/09/05(Mon) 14:26:05)
魔界の仮面弁士様

いつも御回答いただきありがとうございます。

mdbPath = "C:\db1.mdb"
Dim p As Process = Process.Start("MSAccess.exe", """" & mdbPath & """ /runtime")
p.WaitForInputIdle()

Dim accApp As Object = GetObject(mdbPath)
Dim accDoCmd As Object = accApp.DoCmd

Const acViewNormal As Integer = 0
Const acViewPreview As Integer = 2

accDoCmd.OpenReport(reportName, acViewPreview)
MsgBox("レポート表示完了", MsgBoxStyle.SystemModal)
'accDoCmd.Quit()
Marshal.ReleaseComObject(accDoCmd)
accDoCmd = Nothing
accApp.Quit()
Marshal.ReleaseComObject(accApp)

上記の中のMarshalというのはどういう風に宣言すればよろしいですか。

色々と調べてはいるのですが中々見つけられず困っております。

宜しくお願いします。
引用返信 編集キー/
■61779 / inTopicNo.6)  Re[4]: VB.NETとACCESS(レポート)について
□投稿者/ shu (972回)-(2011/09/05(Mon) 14:42:07)
No61776 (ツ介平 さん) に返信

> 上記の中のMarshalというのはどういう風に宣言すればよろしいですか。

System.Runtime.InteropServicesをインポートするか、
Runtime.InteropServices.Marshal〜の記述をすればいいです。
引用返信 編集キー/
■61781 / inTopicNo.7)  Re[5]: VB.NETとACCESS(レポート)について
□投稿者/ 介平 (7回)-(2011/09/05(Mon) 15:04:24)
shu様

御回答ありがとうございます。
インポートすることでエラーを回避することができました。

魔界の仮面弁士様、shu様のおかげでプリントアウトできるようになりました。

また何かありましたら宜しくお願いします。


解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -