02. juli 2003 - 13:21
Der er
14 kommentarer og 1 løsning
Vælg sidst indsatte record
Hej Jeg skal vha sql kunne finde den record jeg lige har sat ind. Hvordan gøres det? Databasen kører på flere maskiner derfor er det væsentligt! altså i øjeblikket køres først en insert og lige efter så en select max på id'et - men dette er ikke helt optimalt da disse forespørgsel godt kan komme ret tæt op af hinanden altså rent udførelsesmæssigt. forhånd tak! /hiks
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
Har du et autonummereret felt, kan du få det nummer ud igen INSERT INTO ccc ..... og så i samme connection: SELECT LAST_INSERT_ID()
det vil sige at der fanger den automatisk den insert der er lavet fra min process eller ??? /hiks
Ja, den seneste inserts autonummerede værdi i samme connection. "Multi-user safe" ;)
nu skal vi lige skære det helt ud i pap her... :o) eksempel: sql = "INSERT INTO rapport (rapporttid) VALUES ( now())" rs.Open sql, konnect sql = "SELECT max(rapportid) as maxi FROM rapport" rs.Open sql, konnect RapportID = rs("maxi") rs.Close - istedet vil det nu hedde: sql = "SELECT LAST_INSERT_ID() FROM rapport" rs.Open sql, konnect RapportID = LAST_INSERT_ID() rs.Close - og den kan sagtens skelne mellem de forskellige connections i db'en? :o) Har ikke lige den helt store multi user erfaring! /hiks
sql = "SELECT LAST_INSERT_ID()" rs.Open sql, konnect RapportID = rs(0) rs.Close Tror jeg nok
coool kigger lige på det... og så får du lige 6 håndfulde points hvis den er hjemme... :o) /hiks
halløj det vil den godt nok ikke - i SQLyog går det fint (lige bortset fra at den returnerer en hel liste med tal, men det er nok godt nok!) det mærkelige er så i vb at samme sql giver resultatet nul og koden bliver udført på samme måde som ovenstående. jeg har dog ændret rapportID = rs(0) til rapportID = rs("rapportid"), da jeg ellers fik en tur i error loggen af vb kan du hjælpe mig tættere på en løsning? /hiks
Har du et autonummereret felt - jeg har et eksempel et sted, der virker
02. juli 2003 - 18:57
#10
jeps det autonummerede felt er rapportid og det er også sat til not null som der står i dokumentation... /hiks
02. juli 2003 - 19:52
#11
læste et sted at det kan være fordi noget ODBC driver ? Nogen erfaring? /hiks
02. juli 2003 - 20:15
#12
set conn = Server.CreateObject("ADODB.Connection") conn.Open "Driver={MySQL ODBC 3.51 Driver};server=mysql.XXXXXXX.dk;Port=3306;Option=131072;Database=XXXXX;uid=XXXXXX;pwd=XXXXXXXXXX;" set rs = conn.execute("select * from bungyjump") do until rs.eof response.write rs(0) & " " & rs(1) & " " & rs(2) & "<br>" rs.movenext loop conn.execute("insert into bungyjump values('','hejsa','2003-09-09','77','pp')") set rs = conn.execute("select last_insert_id()") response.write rs(0)
02. juli 2003 - 20:15
#13
Dette eksempel virker hos mig
02. juli 2003 - 23:06
#14
alooo kunne du ikke skrive et svar - jeg tror det er fordi at jeg bruger rs.open og du bruger rs.execute og det ser faktisk ud til at være lykkedes... så takker for hjælpen og opret lige det svar! /hiks
02. juli 2003 - 23:15
#15
det ku' da være derfor. En INSERT giver aldrig et recordset, så rs.open ville være det sidste jeg ville gøre... :)
Computerworld tilbyder specialiserede kurser i database-management