|
分類:[VB.NET/VB2005 以降]
開発言語はVisualBasic.NET 2005です。
処理としては、ActiveReportを開いたときに、Oracleからデータを読み込んで そのデータをAccessのテーブルに更新するという内容の処理をしたいのですが、 このように書いた場合、データが増えると
「ORA-01000: 最大オープン・カーソル数を超えました。」
というエラーメッセージが出てしまいます。
どこが間違っているか教えていただけると助かります。よろしくお願いします。
↓コード↓ Public Class フォーム名
Private Sub Form_ReportStart(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.ReportStart
'コネクションを指定 OleCnn = New OleDb.OleDbConnection() OleCnn.ConnectionString = "Provider=" & My.Settings.Provider & "; " _ & "Data Source=" & My.Settings.OleDataSource & ""
OraCnn = New OracleConnection() OraCnn.ConnectionString = "User Id=" & My.Settings.UserId & "; " _ & "Password=" & My.Settings.Password & "; " _ & "Data Source=" & My.Settings.OraDataSource & "" 'コネクションを開く OleCnn.Open() OraCnn.Open()
Try
'コマンドの実行(内容→t_RKS_SHIP_FILEの該当するデータを読み込む) OleSQL1 = "SELECT IMPID, PROC_BAR FROM t_RKS_SHIP_FILE WHERE LIST_ISS_FLG = '" & 0 & "'" OleCmd1 = New OleDb.OleDbCommand(OleSQL1, OleCnn) OleRead1 = OleCmd1.ExecuteReader()
While OleRead1.Read()
'コマンドの実行(内容→SIK_FILE0から該当するデータを読み込む) OraSQL1 = "SELECT SC_AMT FROM SIK_FILE0 WHERE PROC_BAR = '" & OleRead1.GetValue(1) & "'" OraCmd1 = New OracleCommand(OraSQL1, OraCnn) OraRead1 = OraCmd1.ExecuteReader()
While OraRead1.Read()
'コマンドの実行(内容→t_RKS_SHIP_FILEのデータを更新) OleSQL2 = "UPDATE t_RKS_SHIP_FILE SET SC_AMT = '" & OraRead1.GetValue(0) & "' " _ & "WHERE PROC_BAR = '" & OleRead1.GetValue(1) & "'" OleCmd2 = New OleDb.OleDbCommand(OleSQL2, OleCnn) OleCmd2.ExecuteNonQuery()
End While
'コマンドの実行(内容→PARTS_MST0から該当するデータを読み込む) OraSQL2 = "SELECT PARTS_NO1, GRP_NO FROM PARTS_MST0 " _ & "WHERE COMPANY_NO = '" & Microsoft.VisualBasic.Left(OleRead1.GetValue(1), 5) & "'" OraCmd2 = New OracleCommand(OraSQL2, OraCnn) OraRead2 = OraCmd2.ExecuteReader()
While OraRead2.Read()
'コマンドの実行(内容→t_RKS_SHIP_FILEのデータを更新) OleSQL3 = "UPDATE t_RKS_SHIP_FILE SET PARTS_NO1 = '" & OraRead2.GetValue(0) & "', " _ & "GRP_NO = '" & OraRead2.GetValue(1) & "' " _ & "WHERE PROC_BAR LIKE '" & Microsoft.VisualBasic.Left(OleRead1.GetValue(1), 5) & "%'" OleCmd3 = New OleDb.OleDbCommand(OleSQL3, OleCnn) OleCmd3.ExecuteNonQuery()
End While
End While
OraRead1.Close() OraRead2.Close() OleRead1.Close()
OleSQL4 = "SELECT GRP_NO, LEFT(PROC_BAR, 5) AS COMPANY_NO, MID(PROC_BAR, 6, 5) AS SHIBAN, " _ & "RIGHT(PROC_BAR, 1) AS NEN, PARTS_NO1, SC_AMT FROM t_RKS_SHIP_FILE " _ & "WHERE LIST_ISS_FLG = '" & 0 & "' AND DELI_CD = '" & Format(1, "00") & "'" OleCmd4 = New OleDb.OleDbCommand(OleSQL4, OleCnn) OleRead1 = OleCmd4.ExecuteReader()
Me.DataSource = OleRead1
Catch ex As Exception
'エラー内容をログにはき出す CRT_LOG("→rist_Seki", "rist_Seki_ReportStart時", ex.ToString(), 2) MessageBox.Show("エラーが発生しました。再度処理して下さい。", "エラー", _ MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
'行番号集計用の変数 Dim detailCounter As Integer = 0
Private Sub Detail_Format(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles Detail.Format
detailCounter += 1
txtNO.Value = Format(detailCounter, "000")
End Sub
Private Sub rist_Seki_ReportEnd(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles MyBase.ReportEnd
OleRead1.Close() OleCnn.Close() OraCnn.Close()
End Sub
End Class
|