INSERT mit VB und ACCESS: letzte ID ermitteln

Andreas Dunstheimer

Erfahrenes Mitglied
Hi,

leider finde ich über die Suche nur MySQL-Beiträge zu diesem Thema, aber das klappt in VB nicht so ganz.

Altbekanntes Problem: ich füge mit INSERT einen neuen Datensatz an eine Tabelle an, und will ermitteln, welche ID in einem Auto_Increment-Feld vergeben wurde.

Jemand nen Tip?


Dunsti
 
einfacher!

auf welche db greifst du zu?
wenn du das mit acces und adodb machst, kannst du auch gleich den wert abfragen.
z.b.
msgbox rs.fields("autowert").value

aber das geht nur bei access
 
im Moment habe ich es so:

Code:
        CnD.Provider = "Microsoft.Jet.OLEDB.4.0"
        CnD.ConnectionString = "Data Source=" + frmHaupt.DB_Name
        CnD.CursorLocation = adUseClient
        CnD.Open
        With Cmd
            .ActiveConnection = CnD
            .CommandType = adCmdText
            .CommandText = "INSERT INTO Kunden (Name, Vorname, Strasse, Postleitzahl, Ort, Telefon, Mobil, Email, Bemerkung1, Bemerkung2, Bemerkung3) VALUES ('" + txtName.Text + "', '" + txtVorname.Text + "', '" + txtStrasse.Text + "', '" + txtPostleitzahl.Text + "', '" + txtOrt.Text + "', '" + txtTelefon.Text + "', '" + txtMobil.Text + "', '" + txtEmail.Text + "', '" + txtBemerkung1.Text + "', '" + txtBemerkung2.Text + "', '" + txtBemerkung3.Text + "')"
            .Execute
        End With
        With RsT
            .ActiveConnection = CnD
            .CursorType = adOpenStatic
            .Source = "SELECT * FROM Kunden ORDER BY ID DESC"
            .Open
            .MoveFirst
            frmHaupt.KundenID = .Fields("ID")
        End With
 
und wie schaut es damit aus?:
With RsT
.ActiveConnection = CnD
.CursorType = adOpenStatic
.Source = "SELECT * FROM Kunden ORDER BY ID DESC"
.Open
.MoveLast
frmHaupt.KundenID = .Fields("ID")
End With
 
ich glaube, Du hast mich jetzt falsch verstanden: So wie ich es im Moment mache funktioniert es ! ich dachte nur, es gäbe eine einfachere Lösung als nochmal eine Select-Abfrage machen zu müssen. (Irgendwie als Rückgabewert der INSERT-Anweisung oder sowas)

Bei Deinem Beispiel springt er ja durch das ORDER DESC auf die kleinste (und somit älteste) ID


Dunsti
 
ich hab da noch ne lösung, wenn du das ganze öffters machen musst. es ist nur ein beispiel. ich würde dann das ganze in 2 funktionen mit rückgabewert schreiben. z.b. db_recordset(cn as adodb.recordset,sql as string), db_connect(dbpfad as string).

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String

Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=test.mdb" ' db
.CursorLocation = adUseClient
.Open
End With

sql = "select * from test" ' auswahl der tabelle
With rs
.Source = sql
.ActiveConnection = cn
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open
End With
rs.AddNew
rs!wert1 = "Test" 'wert in die tabelle schreiben

rs.Update
MsgBox rs!auto ' aktueller datensatz(. nur bei access)
 

Neue Beiträge

Zurück