Avatar billede hyperactive Nybegynder
26. juli 2001 - 17:09 Der er 13 kommentarer og
1 løsning

Hente værdi fra den nyeste post

Jeg har en MySQL database, som skal bruges i forbindelse med en ASP baseret webshop.

Når jeg tilføjer en ny post til databasen, har jeg behov for samtidig at finde ud af hvilket ID, posten får. ID\'et tildeles automatisk af MySQL.

Hvordan kan dette gøres nemmest???
Avatar billede erikjacobsen Ekspert
26. juli 2001 - 17:11 #1
brug

  mysql_query(\"insert ...\");
  $id=mysql_insert_id();
Avatar billede erikjacobsen Ekspert
26. juli 2001 - 17:12 #2
Nååh, i ASP..... det er jo mere besværligt :)
Avatar billede erikjacobsen Ekspert
26. juli 2001 - 17:13 #3
Jeg er ikke så god til ASP syntaks, så du får det i skitse:

  lav din INSERT
  lav så en \"SELECT LAST_INSERT_ID() AS ID\";

som giver en tabel med én række og én søjle. Og i det ene felt står nummeret.
Avatar billede hyperactive Nybegynder
26. juli 2001 - 17:40 #4
Er ikke helt med....

Jeg har lavet det sådan her:

        SQL1=\"INSERT INTO kunder (fornavn, efternavn, adresse, postnummer, bynavn, land, email, telefon) VALUES (\'\" & fname & \"\',\'\" & lname & \"\',\'\" & address & \"\',\'\" & zip & \"\',\'\" & town & \"\',\'\" & country & \"\',\'\" & email & \"\',\'\" & phone & \"\')\"
        DBConnection.Execute(SQL1)
        SQL2 = \"SELECT max(kundeid) from kunder\"
        set RS2 = DBConnection.Execute(SQL2)
        CustomID = RS2(\"kundeid\")
        DBConnection.Close

Men det giver denne fejl:

ADODB.Recordset (0x800A0CC1)
Elementet kan ikke findes i den samling, der svarer til det anmodede navn eller ordenstal.
Avatar billede erikjacobsen Ekspert
26. juli 2001 - 17:44 #5
SQL2 = \"SELECT max(kundeid) as kundeid from kunder\"

men den skal du ikke bruge. Brug min.
Avatar billede hyperactive Nybegynder
26. juli 2001 - 18:02 #6
Hvordan skal jeg helt præcis skrive i SQL strengen.... tabellen hedder kunder og jeg skal bruge værdien fra feltet kundeid....

Jeg er vist lidt smådum til dette her :o)
Avatar billede erikjacobsen Ekspert
26. juli 2001 - 18:20 #7
SQL2 = \"SELECT LAST_INSERT_ID() as kundeid\"
set RS2 = DBConnection.Execute(SQL2)
CustomID = RS2(\"kundeid\")
Avatar billede hyperactive Nybegynder
26. juli 2001 - 18:28 #8
Hmmm.... så får jeg denne fejl:

Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][ODBC Driver Manager] Driveren understøtter ikke denne parameter.
Avatar billede hyperactive Nybegynder
26. juli 2001 - 18:29 #9
Det er denne linie, der genererer fejlen:

CustomID = RS2(\"kundeid\")
Avatar billede erikjacobsen Ekspert
26. juli 2001 - 18:33 #10
ikke hvis du skrive

  ... as kundeid
Avatar billede hyperactive Nybegynder
26. juli 2001 - 18:39 #11
Jeg har skrevet således:

        SQL2 = \"SELECT LAST_INSERT_ID() as kundeid\"
        set RS2 = DBConnection.Execute(SQL2)
        CustomID = RS2(\"kundeid\")

Er det ikke rigtigt nok??
Avatar billede erikjacobsen Ekspert
26. juli 2001 - 19:55 #12
Jow, det vil virke - burde virke. Men nu er jeg ikke så god til ASP at jeg kan sige
om det virker der via ODBC.
Avatar billede hyperactive Nybegynder
26. juli 2001 - 21:03 #13
Efter laaang tids eksperimenteren fandt jeg endelig løsningen:

        SQL2=\"SELECT max(kundeid) from kunder\"
        Set RS2 = DBConnection.Execute(SQL2)
        CustomID = RS2(0)
Avatar billede erikjacobsen Ekspert
26. juli 2001 - 21:11 #14
Jeg kan som sagt ikke sige med sikkerhed om den der LAST_INSERT_ID() virker
gennem ASP og ODBC. Men din løsning lider af den svaghed, at hvis de kommer
to indsættelser stort set samtidig, vil du kunne få et forkert kundeid for én af
kunderne. Du kan jo så overveje om det er ok, at det kan ske.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester