- - PR -
DataReportの再表示時エラー
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-09-04 10:49
いつもお世話になります。
VB6.0でSQLServer2000へアクセスするアプリケーションを開発しています。 DataEnvironmentを使用して、下記のように接続設定を行っています。 DataEnvironment1 → Connection1 → dbo_二次加工レポート(入力パラメータありのストアドプロシージャ) この状態で下記ロジックを実行するとDataReportにストアドの実行結果が表示されます。 'ロジック=========================== Private Sub レポート印刷() Dim MyDE As DataEnvironment1 Set MyDE = DataEnvironment1 MyDE.dbo_二次加工レポート "20080101", "20081231", "01" '←エラー部 DataReport1.Show End sub '=================================== しかし、DataReportを閉じ、再度別パラメータで実行すると、 上記ロジックのエラー部で止まり下記のようなエラーが表示されます。 'エラー============================= 実行時エラー '3705' オブジェクトが開いている場合は、操作は許可されません。 '=================================== 意味的にはConnectionが開いたまま、あるいはストアドが開いたままの状態で再度開こうとするのでエラーとなっているようなのですが、色々閉じるようなロジックを試したのですがうまくいきません。 どなたか対応方法に心当たりがある方はアドバイスをお願いします。 | ||||
|
投稿日時: 2008-09-05 03:25
その "色々" を説明して頂くかソースコードで書いて頂かないと判断しようがありません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2008-09-05 13:41
じゃんぬねっとさん、コメントありがとうございます。
色々というのは下記のようにやってみました。 ケース1 ・・・レポート表示後にレコードセットを閉じる Private Sub レポート印刷() Dim MyDE As DataEnvironment1 Set MyDE = DataEnvironment1 MyDE.dbo_二次加工レポート "20080101", "20081231", "01" DataReport1.Show MyDE.rsdbo_二次加工レポート.Close ←この記述 End sub ケース2 ・・・レコードセットを新しく定義する Private Sub レポート印刷() Dim MyDE As DataEnvironment1 Set MyDE = DataEnvironment1 Set MyDE.rsdbo_二次加工レポート = New ADODB.Recordset ←この記述 MyDE.dbo_二次加工レポート "20080101", "20081231", "01" DataReport1.Show End sub ケース1、2のいずれもうまくいかず駄目でした。 ちなみにさっき下記の方法で試したところ再実行後もデータレポートを表示できました。 ケース3 ・・・毎回Openを行い、データレポート終了後にCloseする Private Sub レポート印刷() Dim MyDE As DataEnvironment1 Set MyDE = DataEnvironment1 MyDE.Connection1.Open ←この記述 MyDE.dbo_二次加工レポート "20080101", "20081231", "01" DataReport1.Show End sub Private Sub DataReport_QueryClose(Cancel As Integer, CloseMode As Integer) Dim MyDE As DataEnvironment1 Set MyDE = DataEnvironment1 MyDE.Connection1.Close ←この記述 End Sub 上記ケース3の方法でデータレポートの再実行不具合は解消されたのですが、DataEnvironmentはこのようにOpenしたりCloseしたりをする必要があるのでしょうか? 最初の質問内容と異なってしまいますが、アドバイスがありましたらお願いします。 | ||||
|
投稿日時: 2008-09-05 13:47
自己レスです。
先ほどのケース3では毎回Openを記述していましたが、毎回Openする必要はありませんでした。 下記ケース4で正常に再実行できました。 ケース4 ・・・データレポート終了後にCloseする Private Sub レポート印刷() Dim MyDE As DataEnvironment1 Set MyDE = DataEnvironment1 '***MyDE.Connection1.Open ←この記述は不要でした MyDE.dbo_二次加工レポート "20080101", "20081231", "01" DataReport1.Show End sub Private Sub DataReport_QueryClose(Cancel As Integer, CloseMode As Integer) Dim MyDE As DataEnvironment1 Set MyDE = DataEnvironment1 MyDE.Connection1.Close ←この記述 End Sub | ||||
|
投稿日時: 2008-09-05 14:09
閉じるためにわざわざ DataEnvironment1 のインスタンスを生成しているのはおかしいですね。 普通は同じ利用した同じ DataEnvironment1 のインスタンスにある Connection を閉じます。 この機会に 「マルチプル インスタンス」 の概念を理解できるようになると次へのステップアップになると思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1