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

わんくま同盟

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

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


(過去ログ 50 を表示中)
■27631 / )  nowait のエラー
□投稿者/ ニッパー (11回)-(2008/11/11(Tue) 15:24:21)

分類:[VB.NET/VB2005 以降] 

こんにちわ。2008でデータを操作するプログラムを作っているのですが、フォームが2つ存在し、最初のフォームのボタンで2つ目のフォームを表示し、トランザクションとロックを掛け、そのフォームで新規登録を行った後、再び2つ目のフォームを呼び出す再にエラーになってしまいます。
エラー内容としては ORA-00001一意制〜とでるのですが、コミットなどはフォームを閉じるさいに行っているはずなのですがやはりメッセージのとおりなのでしょうか?
ご教授いただけないでしょうか? よろしくお願いします。
↓ソース
フォーム2フォームオープン
        
  strSQL.Connection = cnn
    OraTran = cnn.BeginTransaction()
  Try
        'ロックを開始する
        strSQL.CommandText = "SELECT * FROM テーブル名 FOR UPDATE NOWAIT "
    
        strSQL.ExecuteNonQuery()
    ↑また開くとココでエラー
        '更新と削除の場合
     If the_sender Is Form1.BtnChg Or the_sender Is Form1.DataGridView1 Or the_sender Is Form1.BtnDel Then
            strSQL.CommandText = "コード"

            The_reader = strSQL.ExecuteReader
            The_reader.Read()
            TextBox1.Text = The_reader("名前")
            TextBox2.Text = The_reader("名前")
        End If

↓フォーム2ボタン
'
' 重複チェックなど
'

                strSQL.CommandText = "select count(*) from テーブル"
                The_reader = strSQL.ExecuteReader
                The_reader.Read()
                If The_reader.Item(0) = "0" Then
                    TextBox1.Text = "001"
                Else
                    strSQL.CommandText = "select MAX(UNIT_CD) +1 MAX_CD from テーブル"
                    The_reader = strSQL.ExecuteReader
                    The_reader.Read()

                    '0件以上
                    TextBox1.Text = The_reader("MAX_CD")
                    If CInt(TextBox1.Text) < 10 Then
                        TextBox1.Text = "00" & The_reader("MAX_CD")
                    ElseIf CInt(TextBox1.Text) < 100 Then
                        TextBox1.Text = "0" & The_reader("MAX_CD")
                    End If

                End If

                strSQL.CommandText = "insert into テーブル(名前, 名前) values('" & TextBox1.Text & "' , '" & TextBox2.Text & "')"
                strSQL.ExecuteNonQuery()
                TextBox1.Text = ""
                TextBox2.Text = ""
                TextBox2.Focus()
                One_Rec = True
    
Private Sub Form2_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        '登録時のみ
        If One_Rec = True Then
            OraTran.Commit() ←ココでかけているはずなのですが・・・。
            OraTran.Dispose()
        Else
            OraTran.Rollback()
            OraTran.Dispose()
        End If

返信 編集キー/


管理者用

- Child Tree -