Avatar billede misbruger Nybegynder
23. januar 2002 - 17:28 Der er 19 kommentarer og
1 løsning

find indeks på indsat post i db

Når jeg lige har oprette en post i min db, ved...

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={MySQL};server=XXX;uid=UID;pwd=PWD;database=DB"
SQL = "INSERT INTO tabel (column1, column2) VALUES "
SQL = SQL & "('"& value1 &"','"& value2 &"'')"
Conn.Execute SQL

Hvordan trækker jeg så det indeks (primary key, auto_increment, unik) nummer ud, som posten lige har fået.....?

...og det duer ikke at lave en "SELECT MAX(indeks) FROM tabel" da den er for usikker....!!!
Avatar billede netsrac Praktikant
23. januar 2002 - 17:29 #1
select indeks from tabel where indeks = last_insert_id()
Avatar billede Slettet bruger
23. januar 2002 - 17:30 #2
Kan du ikke bruge TOP 1 * ? ? ?

Det tager den med det højeste ID, hvis du sorterer efter id!
Avatar billede Slettet bruger
23. januar 2002 - 17:30 #3
.
Avatar billede sth Novice
23. januar 2002 - 17:32 #4
Jeg har tidligere brugt som netsrac foreslog, og det virker helt ok
Avatar billede misbruger Nybegynder
23. januar 2002 - 17:32 #5
nej nej! også alt for usikkert!
Hvis to bruger submitter samme INSERT INTO på samme tidspunkt, er muligheden for at den ene bruger får den andens indeks alt for stor.

Mit spørgsmål lyder på om der ikke findes en metode hvorpå man finder indeks i det øjeblik den bliver oprettet????
Avatar billede keysersoze Ekspert
23. januar 2002 - 17:35 #6
Avatar billede netsrac Praktikant
23. januar 2002 - 17:36 #7
Ikke med mySQL, da det ikke er til at få den til at æde en transktion, så skal du ud i og lave en Application.Lock og Application.Unlock uden om koden.

Sandsynigheden for at 2 rammer det samme ID er dog MEGET lille, jeg har brugt ovenstående med succes og aldrig er der en der har ramt forkert.

Men Max() metoden er dog usikker, da mySQL godt kan finde på at sætte ind på tomme pladser hvor man har slettet en record.
Avatar billede netsrac Praktikant
23. januar 2002 - 17:37 #8
keysersoze >> Sjovt nok virker det der kun på Access og MSSQL.
Avatar billede misbruger Nybegynder
23. januar 2002 - 17:39 #9
keysersoze -> Virker denne også i MySQL ???

Set rsIdentity = myConn.Execute("SELECT @@IDENTITY as NewID FROM TESTBASE")
Response.Write rsIdentity("NewID")
Avatar billede keysersoze Ekspert
23. januar 2002 - 17:43 #10
hov - havde ikke set det var mysql :)
Avatar billede misbruger Nybegynder
23. januar 2002 - 17:44 #11
netsrac -> Jeg vil være lidt ked af at skulle lås min db hver gang, det kan ikke forbedre min response tid på serveren.

Til hvor mange bruger har du benyttet. "select indeks from tabel where indeks = last_insert_id()"???

Jeg kommer til at have mange brugere (rigtig mange)!
Avatar billede netsrac Praktikant
23. januar 2002 - 17:47 #12
Jeg har brugt det hvor der har været 100 samtidige brugere på sitet, men det kan også være jeg bare har været bragende heldig.

Men hvis du vil have det helt rigtigt, så du er 100% sikker på at det ikke går galt, bliver du nok nød til at vælge en anden DBMS som understøtter transaktioner, f.eks. MS SQL eller Oracle, selvom det er min mening at de er sløve i forhold til mySQL´en.
Avatar billede misbruger Nybegynder
23. januar 2002 - 18:15 #13
netsrac -> Ved du om den nye MySQL (i beta) understøtter transactions?

...jeg savner også at MySQL understøtter inline views... :-)
Avatar billede misbruger Nybegynder
23. januar 2002 - 18:20 #14
*\ om ikke andet så tak for svaret, jeg tror jeg vælger at låse, for skulle tilfældet være ude med to simultane brugere, så er den helt gal.
Avatar billede netsrac Praktikant
23. januar 2002 - 18:23 #15
Jeg har endnu ikke haft tid til at kigge på den nye mySQL, men jeg tror ikke de er nået så langt endnu. Ja views har vi jo manglet i lang tid, men det kommer vel engang, men man kan jo heller ik forvente alverden af en gratis DBMS.
Avatar billede coltau Juniormester
23. januar 2002 - 18:41 #16
Hvis du gerne vil undgå at låse så er en mulig løsning at oprette et talfelt i tabellen med plads til Session.SessionID så er nedenstående linie pludselig 100% sikker. !

"SELECT MAX(indeks) FROM tabel where SessionID=" & Session.SessionID

Jeg har haft lignende flerbruger problemer inde på livet i 10 år og ville ikke tøve med at anvende denne løsning hvis transaktionstyring ikke er tilgængelig.
Avatar billede misbruger Nybegynder
23. januar 2002 - 18:51 #17
coltau -> Giver en dårlig normalisering, idet at kolonnen i db'en er uoverflødig. Ellers tak!
Avatar billede sth Novice
23. januar 2002 - 21:46 #18
Når jeg har ovenstående problem i access, så har jeg sommetider gjort det at jeg har dannet en stræng på 50 tilfældige karektere, denne gemme jeg så, og smider den ned i databasen, i et felt der er lavet til dette, herefter er det så bare at søge i databasen på denne gemte streng, og så finde det idnummer denne har, og så er mit postulat at det er meget usandsynlig at en anden skulle få dannet samme streng inde for de "par sek." det tager at oprette strengen, gemme denne i db, hente id, og så evt slette strengen igen i tabelen

Jeg er godt klar over at dette ikke er en særlig køn måde at lave sådan noget på, men det virker hvergang !
Avatar billede netsrac Praktikant
23. januar 2002 - 21:49 #19
sth >> Hvis man virkelig skal ud i den løsning så er coltau´s løsning 100 gange bedre, Sessionidet er der allerede, unikt for hver bruger på websitet, så hvorfor ikke bruge det ?
Avatar billede sth Novice
23. januar 2002 - 21:53 #20
Det kan jeg da kun være enig i, men den kendte jeg ikke, og skrev derfor hvad jeg så havde brugt.

Så er det jo godt at man kan komme på eksperten og lære noget nyt :)
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
Kurser inden for grundlæggende programmering

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