- PR -

DataReportの再表示時エラー

1
投稿者投稿内容
ともこ
大ベテラン
会議室デビュー日: 2007/09/14
投稿数: 111
投稿日時: 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が開いたまま、あるいはストアドが開いたままの状態で再度開こうとするのでエラーとなっているようなのですが、色々閉じるようなロジックを試したのですがうまくいきません。
どなたか対応方法に心当たりがある方はアドバイスをお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-09-05 03:25
引用:

ともこさんの書き込み (2008-09-04 10:49) より:

意味的にはConnectionが開いたまま、あるいはストアドが開いたままの状態で再度開こうとするのでエラーとなっているようなのですが、色々閉じるようなロジックを試したのですがうまくいきません。


その "色々" を説明して頂くかソースコードで書いて頂かないと判断しようがありません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ともこ
大ベテラン
会議室デビュー日: 2007/09/14
投稿数: 111
投稿日時: 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したりをする必要があるのでしょうか?
最初の質問内容と異なってしまいますが、アドバイスがありましたらお願いします。
ともこ
大ベテラン
会議室デビュー日: 2007/09/14
投稿数: 111
投稿日時: 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
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-09-05 14:09
引用:

ともこさんの書き込み (2008-09-05 13:47) より:

Private Sub DataReport_QueryClose(Cancel As Integer, CloseMode As Integer)
Dim MyDE As DataEnvironment1
Set MyDE = DataEnvironment1
MyDE.Connection1.Close ←この記述
End Sub


閉じるためにわざわざ DataEnvironment1 のインスタンスを生成しているのはおかしいですね。 普通は同じ利用した同じ DataEnvironment1 のインスタンスにある Connection を閉じます。

この機会に 「マルチプル インスタンス」 の概念を理解できるようになると次へのステップアップになると思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

スキルアップ/キャリアアップ(JOB@IT)