2012-02-23 2 views
1

У меня есть следующий код для подпрограммы. Он вставляет строку в базу данных MSAccess, используя данные, содержащиеся в содержащейся форме. То, что я хотел бы сделать, это захватить идентификационный номер этой добавленной записи, чтобы он мог быть установлен для свойства окна, которое вызывается при успешном добавлении. Я пробовал это посмотреть, но я получил что-то около @@IDENTITY, но он использует совершенно другой способ подключения.Извлечение последнего вставленного ID из базы данных MS Access

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

Если у вас есть столбец автоматического приращения в таблице турниров, вы можете сделать «SELECT @@ IDENTITY», чтобы получить идентификатор последней вставленной записи.

BTW, является ли SanctioningIDTxt.Text уникальным? Если да, не можете ли вы использовать это?

+0

Это не так. В случае, если у кого-то нет санкционирующего номера, по умолчанию оно равно -1. Таким образом, может быть несколько значений -1. Вопрос о @@ IDENTITY, Не то, чтобы это могло произойти, но что, если кто-то еще должен был добавить запись, будет ли она давать последний или тот, который я вставил? –

+0

Это даст вам самое последнее. –

+0

Угадай, что мне нужно будет убедиться, что база данных заблокирована и используется только одним экземпляром программы. Благодарю. –

Смежные вопросы