Wie man die id des neu eingefügten Datensatzes mit Excel VBA?

Scheint eine gemeinsame genug problem, aber die meisten Lösungen beziehen sich auf die Verkettung mehrerer SQL-Befehle, was ich nicht glauben kann, nicht mit ADO/VBA (bin ich froh, gezeigt werden falsch in diesem Zusammenhang allerdings).

Ich derzeit legen meine neuen Datensatz führen Sie eine select-Abfrage mit (ich hoffe) genug Felder, um zu garantieren, dass nur die neu eingefügten Datensatz zurückgegeben werden können. Meine Datenbanken sind auf die selten zugegriffen wird, die von mehr als einer person gleichzeitig (vernachlässigbares Risiko von einem anderen insert-geschehen zwischen Abfragen) und aufgrund der Struktur der Tabellen, die Ermittlung der neue Datensatz ist normalerweise ziemlich einfach.

Ich bin jetzt versuchen, ein update einer Tabelle, die nicht viel Spielraum für Einzigartigkeit, anders als in den künstlichen Primärschlüssel. Dies bedeutet, es besteht die Gefahr, dass der neue Datensatz nicht eindeutig sein kann, und ich bin verabscheuen, um ein Feld hinzuzufügen, nur um Kraft, Einzigartigkeit.

Was ist der beste Weg zum einfügen eines Datensatzes in eine Access-Tabelle Abfragen dann der neue Primärschlüssel aus Excel in dieser situation?

Danke für die Antworten. Ich habe versucht, Sie zu bekommen @@IDENTITY arbeiten, dies aber stets 0 zurück, mit dem code unten.

Private Sub getIdentityTest()
    Dim myRecordset As New ADODB.Recordset
    Dim SQL As String, SQL2 As String

    SQL = "INSERT INTO tblTasks (discipline,task,owner,unit,minutes) VALUES (""testDisc3-3"",""testTask"",""testOwner"",""testUnit"",1);"
    SQL2 = "SELECT @@identity AS NewID FROM tblTasks;"

    If databaseConnection Is Nothing Then
        createDBConnection
    End If

    With databaseConnection
        .Open dbConnectionString
        .Execute (SQL)
        .Close
    End With

    myRecordset.Open SQL2, dbConnectionString, adOpenStatic, adLockReadOnly

    Debug.Print myRecordset.Fields("NewID")

    myRecordset.Close

    Set myRecordset = Nothing
End Sub

Irgendetwas hervor verantwortlich?

Angesichts der Vorbehalte freundlicherweise geliefert von Renaud (unten) es scheint fast so viel Risiko bei der Nutzung von @@IDENTITY als mit jeder anderen Methode, so habe ich gegriffen, um mit SELECT MAX für jetzt. Für zukünftige Referenz, aber ich wäre interessiert zu sehen, was ist falsch mit meinem Versuch oben.

  • Mit Max kann tückisch sein... wenn jemand anderes das einfügen von Datensätzen, kann es geben, Sie einem anderen Datensatz-ID. Wenn du der einzige bist, der das einfügen von Datensätzen, gehen Sie vor.
  • Eine kleine Anregung ist, dass es im Allgemeinen besser, die Praxis zu verwenden SCOPE_IDENTITY() statt @@IDENTITY - in dieser Weise, werden Sie abgedeckt werden sollten arbeiten in einer multi-user-Umgebung, jetzt oder irgendwann in der Zukunft.
InformationsquelleAutor Lunatik | 2009-02-27
Schreibe einen Kommentar