Avatar billede hiks Nybegynder
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
Avatar billede erikjacobsen Ekspert
02. juli 2003 - 13:33 #1
Har du et autonummereret felt, kan du få det nummer ud igen

  INSERT INTO ccc .....

og så i samme connection:

  SELECT LAST_INSERT_ID()
Avatar billede erikjacobsen Ekspert
02. juli 2003 - 13:35 #2
Avatar billede hiks Nybegynder
02. juli 2003 - 13:41 #3
det vil sige at der fanger den automatisk den insert der er lavet fra min process eller ???

/hiks
Avatar billede erikjacobsen Ekspert
02. juli 2003 - 13:42 #4
Ja, den seneste inserts autonummerede værdi i samme connection. "Multi-user safe" ;)
Avatar billede hiks Nybegynder
02. juli 2003 - 13:46 #5
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
Avatar billede erikjacobsen Ekspert
02. juli 2003 - 13:50 #6
sql = "SELECT LAST_INSERT_ID()"
rs.Open sql, konnect
RapportID = rs(0)
rs.Close

Tror jeg nok
Avatar billede hiks Nybegynder
02. juli 2003 - 13:52 #7
coool kigger lige på det...

og så får du lige 6 håndfulde points hvis den er hjemme... :o)

/hiks
Avatar billede hiks Nybegynder
02. juli 2003 - 18:10 #8
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
Avatar billede erikjacobsen Ekspert
02. juli 2003 - 18:42 #9
Har du et autonummereret felt - jeg har et eksempel et sted, der virker
Avatar billede hiks Nybegynder
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
Avatar billede hiks Nybegynder
02. juli 2003 - 19:52 #11
læste et sted at det kan være fordi noget ODBC driver ? Nogen erfaring?

/hiks
Avatar billede erikjacobsen Ekspert
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)
Avatar billede erikjacobsen Ekspert
02. juli 2003 - 20:15 #13
Dette eksempel virker hos mig
Avatar billede hiks Nybegynder
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
Avatar billede erikjacobsen Ekspert
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... :)
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