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???
Annonceindlæg fra Barco
brug mysql_query(\"insert ...\"); $id=mysql_insert_id();
Nååh, i ASP..... det er jo mere besværligt :)
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.
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.
SQL2 = \"SELECT max(kundeid) as kundeid from kunder\" men den skal du ikke bruge. Brug min.
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)
SQL2 = \"SELECT LAST_INSERT_ID() as kundeid\" set RS2 = DBConnection.Execute(SQL2) CustomID = RS2(\"kundeid\")
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.
Det er denne linie, der genererer fejlen: CustomID = RS2(\"kundeid\")
26. juli 2001 - 18:33
#10
ikke hvis du skrive ... as kundeid
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??
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.
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)
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.
Computerworld tilbyder specialiserede kurser i database-management