| 
                 分類:[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
  |