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