[VBA/Access] Autonummering, nummer opvragen na INSERT

Pagina: 1
Acties:
  • 191 views sinds 30-01-2008
  • Reageer

  • Markieman
  • Registratie: December 2001
  • Laatst online: 15-05 12:16
Ik heb een probleempje in Access2000

De situatie is als volgt, ik heb een tabel met 2 attributen:
idcode (autonummering)
x (integer)

Nu wil ik in VBA een record toevoegen (ik gebruik ADO2.1), dit ging goed door middel van:

code:
1
2
3
4
Dim cConn As Connection

Set cConn = CurrentProject.Connection
cConn.Execute("INSERT INTO tabelnaam (x) VALUES (" & y & ")")


Nu wil ik direct na het invoeren hiervan de waarde die door Access toegekend is aan idcode weten. De volgende code leek me logisch, maar die werkt niet:

code:
1
2
3
4
5
6
7
Dim cConn As Connection
Dim cRs As Recordset
Dim lIDCode As Long

Set cConn = CurrentProject.Connection
Set cRs = cConn.Execute("INSERT INTO tabelnaam (x) VALUES (" & y & ")")
lIDCode = cRs("idcode").value


Access geeft een foutmelding dat idcode niet bestaat...

Terugdenkend aan iets wat ik ooit in VB6 had gedaan probeerde ik het volgende:

code:
1
2
3
4
5
6
7
8
9
10
Dim cConn As Connection
Dim cRs As Recordset
Dim lIDCode As Long

Set cConn = CurrentProject.Connection
Set cRs = cConn.Execute("SELECT * FROM tabelnaam")
cRs.AddNew
cRs("x").Value = y
lIDCode = cRs("idcode").Value
cRs.Update


Echter blijkt 'cRs' nu ineens ReadOnly te zijn =(

Zoeken op google/got heeft me niet echt wijzer gemaakt, misschien dat iemand mij een duwtje in de goede richting kan geven?

You do not fear them? - The Wraith? Naah. Now *clowns*, that's another story.


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
Na je insert deze query uitvoeren:
code:
1
SELECT @@identity FROM tabel


geeft het id van het laatst toegevoegde record.

Waarom heb ik 'laatst' vetjes gezet:
Het geeft dus het ID terug van het laatst geinserte record, niet van het laatst geinserte record door de huidige persoon.

Stel dat het toch mocht voorkomen dat jij een record toevoegd, en dat tussen jouw INSERT en jouw SELECT @@identity ik ook een INSERT doe, dan zal je het ID terugkrijgen van het record dat ik geinsert heb. (De kans is weliswaar klein dat dit voorkomt, maar toch.... :P)

[ Voor 87% gewijzigd door whoami op 19-12-2003 18:26 ]

https://fgheysels.github.io/


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Hier staat een mooie uitleg over de hele problematiek:
http://msdn.microsoft.com...onet/html/manidcrisis.asp

wel even wat naar beneden scrollen voor de access uitleg

Who is John Galt?


  • klinz
  • Registratie: Maart 2002
  • Laatst online: 21-05 09:01

klinz

weet van NIETS

@@identity werkt alleen als je JET gebruikt. Voor SQL server werkt het wel altijd.

Voor Access kun je terugvallen op LAST_INSERT_ID()

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
LAST_INSERT_ID() is afaik alleszins geen Access functie.
Als ik in Access volgende query uitvoer,
code:
1
SELECT LAST_INSERT_ID() FROM ....

dan krijg ik een melding dat die functie niet bestaat.

https://fgheysels.github.io/