Toon posts:

[MySQL] LAST_INSERT_ID() Schiet mij maar lek

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goeiedag,

Ik maak een VB6 app met MySQL als database.
Na het inserten van een nieuw record in de tabel voer ik een 'select LAST_INSERT_ID()' uit om het laatste recordID op te vragen (auto-increment veld). Dit statement returned echter altijd 0 !!

Iemand een oorzaak/oplossing ???

Merci ! :)

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Ik zie in iedergeval niets fout in de syntax. Kun je wat meer code posten, anders moet ik gaan gokken nl. :)

Gok 1) Goh zit dat record ECHT wel in de database?
Gok 2) Maak je een nieuwe connectie aan tussen de insert en het ophalen van het ID

Verwijderd

Topicstarter
Ik heb ondertussen de oplossing gevonden.
Ik probeerde via een ADODB.Command een record te inserten (geen recordset terug dus) en via de 'select LAST_INSERT_ID()' het laatste ID in een ADODB.Recordset terug te krijgen. Dat ging dus niet.

Door het insert command ook via een recordset te laten lopen kreeg ik uiteindelijk wel het goede ID terug. :)

Bedankt voor de reactie !

  • SyphOn
  • Registratie: Juni 2001
  • Laatst online: 05-09 13:01
Je kan toch ook:
Select * from TABLE order by ID desc limit 1
doen?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Op donderdag 06 juni 2002 09:49 schreef SyphOn het volgende:
Je kan toch ook:
Select * from TABLE order by ID desc limit 1
doen?
nee, dat kan niet. Ten eerste ga je dan uit van het altijd oplopend zijn van een automatisch gegenereerde ID (wat in de praktijk natuurlijk wel zo is, maar niet vast staat). Ten tweede kan bij de door jou voorgestelde methode een race probleem optreden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 03-09 23:48
code:
1
Select * from TABLE order by ID desc limit 1

is als je de enige gebruiker bent wel hetzelfde als
code:
1
select LAST_INSERT_ID()

, maar is erg fout als je met meerdere personen tegelijk op de database bezig bent.

  • Scharnout
  • Registratie: November 2000
  • Laatst online: 23-08 12:39

Scharnout

Meuk

SELECT @@IDENTITY moet toch ook prima werken?

And Bob's your uncle ...


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:11
Op donderdag 06 juni 2002 10:29 schreef Scharnout het volgende:
SELECT @@IDENTITY moet toch ook prima werken?
Dit werkt naar mijn idee enkel op SQL Server en vanaf Access 2000. (Microsoft Specific dus).

https://fgheysels.github.io/


  • Scharnout
  • Registratie: November 2000
  • Laatst online: 23-08 12:39

Scharnout

Meuk

Op donderdag 06 juni 2002 10:33 schreef whoami het volgende:

[..]

Dit werkt naar mijn idee enkel op SQL Server en vanaf Access 2000. (Microsoft Specific dus).
Bij mij (win2k+MySQL) werkt het anders prima! Eerst de hele troep inserten en dan gelijk commando geven (minste kans dat er iemand tussendoor komt)

And Bob's your uncle ...


  • SyphOn
  • Registratie: Juni 2001
  • Laatst online: 05-09 13:01
Ja daar had ik ff niet aan gedacht. |:(

Maar als je die last inserted id gebruikt is het dan niet zo dat als een andere gebruik wat insert tegelijk of vlak na jou dat hij dan dat andere id van die die andere gebruik insert pakt?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Op donderdag 06 juni 2002 11:04 schreef SyphOn het volgende:
Ja daar had ik ff niet aan gedacht. |:(

Maar als je die last inserted id gebruikt is het dan niet zo dat als een andere gebruik wat insert tegelijk of vlak na jou dat hij dan dat andere id van die die andere gebruik insert pakt?
Daarvoor is juist deze functie in het leven geroepen. De last_inserted_id wordt per verbinding bijgehouden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Scharnout
  • Registratie: November 2000
  • Laatst online: 23-08 12:39

Scharnout

Meuk

Werkt het dan pas in MySQL 4? omdat die transactions ondersteunt?

Dus LAST_INSERT_ID() is beter dan SELECT @@IDENTITY?

And Bob's your uncle ...


  • SyphOn
  • Registratie: Juni 2001
  • Laatst online: 05-09 13:01
Op donderdag 06 juni 2002 11:16 schreef Janoz het volgende:

[..]

Daarvoor is juist deze functie in het leven geroepen. De last_inserted_id wordt per verbinding bijgehouden.
Weer wat geleerd 8-)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Op donderdag 06 juni 2002 11:25 schreef Scharnout het volgende:
Werkt het dan pas in MySQL 4? omdat die transactions ondersteunt?

Dus LAST_INSERT_ID() is beter dan SELECT @@IDENTITY?
nope

LAST_INSERT_ID is Mysql

@@IDENTITY is MS only

Het heeft nix met transactions te maken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

wat ben ik toch blij met sequences ;-)

  • Scharnout
  • Registratie: November 2000
  • Laatst online: 23-08 12:39

Scharnout

Meuk

Op donderdag 06 juni 2002 11:43 schreef Janoz het volgende:

[..]

nope

LAST_INSERT_ID is Mysql

@@IDENTITY is MS only

Het heeft nix met transactions te maken.
Waarom werkt dit bij mij dan prima? Omdat ik op win2k server draai?

en hoe zou het dan met last insert zijn?
code:
1
2
3
4
5
6
7
8
9
10
11
12
sql = "INSERT INTO tblKlant "
sql = sql & "hoop troep"

Set oRS = oConn.Execute(sql)

sql = "SELECT @@IDENTITY"
Set oRS = oConn.Execute(sql)

fkKlaID = oRS(0)

call oRS.close
Set oRS = nothing

And Bob's your uncle ...


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Op donderdag 06 juni 2002 12:00 schreef Scharnout het volgende:

[..]

Waarom werkt dit bij mij dan prima? Omdat ik op win2k server draai?

en hoe zou het dan met last insert zijn?
code:
1
2
3
4
5
6
7
8
9
10
11
12
sql = "INSERT INTO tblKlant "
sql = sql & "hoop troep"

Set oRS = oConn.Execute(sql)

sql = "SELECT @@IDENTITY"
Set oRS = oConn.Execute(sql)

fkKlaID = oRS(0)

call oRS.close
Set oRS = nothing
Nee omdat je ASP gebruikt vermoed ik :) Het lijkt erop dat ie dat 'vertaalt' dmv z'n ODBC driver

  • Scharnout
  • Registratie: November 2000
  • Laatst online: 23-08 12:39

Scharnout

Meuk

ok .. dus het maakt voor mij niet uit wat ik gebruik? of kan ik beter toch die last insert gebruiken?

And Bob's your uncle ...


Verwijderd

Even half offtopic hoor...

Met VB6 en MySQL? Hoe doe je dat dan? Kan dat gewoon in exe's enzow? dus geen ASP gedoe?

Kzit nu namelijk te knoeien met PHP gegenereerde txt files.
Pagina: 1