2012-02-23 11 views
1

私はSubプログラム用に以下のコードを用意しています。 MSAccessデータベースに格納されているデータを使用して行を挿入しています。私がしたいのは、追加されたレコードのID番号を取得して、正常に追加されたときに呼び出されるウィンドウのプロパティに設定できるようにすることです。私はこれを見てみましたが、@@IDENTITYについて何かを得ていますが、全く異なる接続方法を使用しています。MS Accessデータベースから最後に挿入されたIDを取得しています

Private Sub CreateTournament_Click(sender As System.Object, e As System.EventArgs) Handles CreateTournament.Click 
    ' TODO: Check the form for errors, or blank values. 
    ' Create the tournament in the database, add the values where needed. Close the form when done. 

    Dim cn As OleDbConnection 
    Dim cmd As OleDbCommand 
    Dim dr As OleDbDataReader 
    Dim icount As Integer 
    Dim str As String 

    Try 
     cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\Master.mdb'") 
     cn.Open() 
     str = "insert into Tournaments (SanctioningID,TournamentName,TournamentVenue,TournamentDateTime,TournamentFirstTable,Game,Format,OrganizerID) values(" _ 
      & CInt(SanctioningIDTxt.Text) & ",'" & Trim(TournamentNameTxt.Text) & "','" & _ 
      "1" & "','" & EventDateTimePck.Value & "','" & TableFirstNumberNo.Value & "','" & GameList.SelectedIndex & "','" & FormatList.SelectedIndex & "','" & Convert.ToInt32(ToIDTxt.Text) & "')" 

     'string stores the command and CInt is used to convert number to string 
     cmd = New OleDbCommand(Str, cn) 
     icount = cmd.ExecuteNonQuery 
     MessageBox.Show(icount) 
     'displays number of records inserted 
    Catch ex As Exception 
     MessageBox.Show(ex.ToString) 
    End Try 

    Me.Close() 

    Dim n As New TournamentWindow ' Open a new Tournament window if everything is successful 
    n.TournID = Counter '<< This should be set to the ID of the most recently inserted row 
    n.Show(HomeForm)'Invoke the form and assign "HomeForm" as it's parent. 

End Sub 

答えて

1

あなたがトーナメント表内の自動インクリメント列を持っていると仮定すると、あなたは最後に挿入されたレコードのIDを取得するには、「SELECT @@ IDENTITY」を行うことができます。

ところで、SanctioningIDTxt.Textは一意ですか?もしそうなら、あなたはそれを使用できませんか?

+0

そうではありません。誰かが認定番号を持っていない場合は、デフォルトで-1になります。したがって、-1の値が複数あることがあります。 @@ IDENTITYについての質問、それは起こる可能性はありませんが、他の誰かがレコードを追加した場合、最後に挿入したものか、挿入したものを与えるでしょうか? –

+0

それはあなたに最後のものを与えます。 –

+0

私はデータベースがロックされ、プログラムの1つのインスタンスだけが使用されていることを確認する必要があります。ありがとう。 –

関連する問題