Avatar billede sth Novice
18. marts 2001 - 21:33 Der er 27 kommentarer og
6 løsninger

find sidste ID

Jeg har en MySql Db med en tabl der heder user, i denne taben er der et felt der heder  userID , detter felt er af typen int(6) og auto_increment

når nu en ny bruger bliver oprettet i basen vil jeg gerne have at vide hvilket userID nr brugern fik, jeg mener at have fundet ud af at det er noget med last_insert_id()  eller mysql_insert_id()  !!
Er her nogen der kan fortælle hvordan jeg gør ?
Avatar billede tpiil Nybegynder
18. marts 2001 - 21:36 #1
SELECT TOP 1 * FROM TABEL ORDER BY userID DESC;
Avatar billede netsrac Praktikant
18. marts 2001 - 21:36 #2
Set Conn = Server.CreateObject(\"ADODB.Connection\")
\'mssql driveren kender jeg ikke lige
Conn.Open \"PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\" & Server.MapPath(\"../../db/wservice.mdb\") & \";UID=admin;PWD=;\"
Set rs2 = Server.CreateObject(\"ADODB.RecordSet\")
rs2.Open \"Select * From gbook\", Conn, 1, 3
rs2.AddNew
rs2(\"bruger\") = bruger
rs2(\"bgcolor\") = request.form(\"bgcolor\")
rs2(\"fontface\") = request.form(\"fontface\")
rs2(\"fontcolor\") = request.form(\"fontcolor\")
rs2.Update
id = rs2(\"id\")
rs2.Close
Set rs2 = Nothing
Avatar billede netsrac Praktikant
18. marts 2001 - 21:37 #3
tpiil >> Hvad hvis 2 opretter sig på samme tid ?
Avatar billede netsrac Praktikant
18. marts 2001 - 21:38 #4
Avatar billede netsrac Praktikant
18. marts 2001 - 21:41 #5
Set Conn = Server.CreateObject(\"ADODB.Connection\")
Conn.Open \"driver={MySql};server=\"& SQLserveradr &\";database=\"& SQLdatabase &\";uid=\"& SQLlogin &\";pwd=\"& SQLpassword
Set rs2 = Server.CreateObject(\"ADODB.RecordSet\")
rs2.Open \"Select * From tabel\", Conn, 1, 3
rs2.AddNew
rs2(\"felt\") = \"whatever\"
id = rs2(\"id\")
rs2.close
set rs2 = not´hing
Avatar billede netsrac Praktikant
18. marts 2001 - 21:42 #6
Så har du det id som posten blev oprettet med i variablen id
Avatar billede perla Nybegynder
18. marts 2001 - 21:50 #7
Conn.Open \"Driver={Microsoft Access Driver (*.mdb)};DBQ=\" & Server.MapPath(\"Support.mdb\")
strSQL = \"Select Max(id) from tabl\"
set RS = conn.execute( strSQL )
Avatar billede netsrac Praktikant
18. marts 2001 - 21:52 #8
perla >> vil sige det samme som til tpiil, hvad hvis der er 2 der opretter sig på samme tid ?
Avatar billede stigc Nybegynder
18. marts 2001 - 21:54 #9
Avatar billede stigc Nybegynder
18. marts 2001 - 21:55 #10
Mit forslag virker fint når to opretter sig samtidig!
Avatar billede netsrac Praktikant
18. marts 2001 - 21:56 #11
stigc >> Eller som jeg har skrevet.
Avatar billede erikjacobsen Ekspert
18. marts 2001 - 21:57 #12
Netsrac, min lille artikel handler om Access DB-er og virker formentlig
ikke ved MySql. Problemet er at mysql_insert_id ikke er tilgængelig gennem
ODBC driveren, som man vel sagtens bruger sammen med ASP. Og stigc, uden
at undersøge det, mener jeg din link kun virker med MsSql.

Jeg kender ikke nogen god løsning til ASP/Mysql - men lytter med :)
Avatar billede soerens Nybegynder
18. marts 2001 - 22:00 #13
netsrac >> np, recordset\'et tager højde for det.

AddNew tilføjer en ny record til RecordsSet\'et og placerer cursoren på denne.

Hvis en anden bruger efterfølgende tilføjer en record vil det ikke ha\' nogen betydning; cursoren står STADIG på den record man netop har indsat.

Man skal især lige holde øje med parametrene på Open metoden (,1 ,2), som specifikerer cursortype og locktype.

At åbne et recordset på denne måde er en del langsommere end en \"standard\" forward-only cursor, så man skal generelt prøve at undgå det, med mindre man altså SKAL bruge ID\'et på den record man netop har indsat.

Er man mere til SQL-sætninger kan det også gøres på denne måde (frit efter hovedet, så der KAN være syntax-fejl osv.):

rs2.Open \"INSERT INTO tblMyTable bla bla bla\", Conn, 1, 3
Set rstNewID = Conn.Execute(\"SELECT @@IDENTITY@@ AS NewID\")
Response.Write \"NewID:\" & rstNewID(\"NewID\")

Håber det hjælper ;-)

/SørenS
Avatar billede soerens Nybegynder
18. marts 2001 - 22:01 #14
...ups, har aldrig prøvet SELECT @@IDENTITY@@ på MySQL, kun på Access og MS SQL!

Nogen der kan sige om det er samme syntax?

/SørenS
Avatar billede perla Nybegynder
18. marts 2001 - 22:02 #15
netsrac >> findes ikke noget der hedder samtidigt da det håndteres i databasen .
Avatar billede sth Novice
18. marts 2001 - 22:03 #16
Nu har jeg prøvet de forslag der er modtaget:
1 jeg kan ikke få AddNew til at virke
2 har prøvet http://www.activeserverpages.dk/aspdigital/kapitel2/sql_identity.asp  men efter hvad jeg kann se så understøtter Mysql ikke @@IDENTITY
andre forslag ?
Avatar billede netsrac Praktikant
18. marts 2001 - 22:05 #17
perla >> Hvis det skal bruges når man opretter en ny post i databasen, vil du ikke med garanti få det rigtige id ud.

erik >> Uden selv at have testet det, tror jeg nok at det virker på mySQL.
Avatar billede erikjacobsen Ekspert
18. marts 2001 - 22:06 #18
Nå jo, nu har jeg det. 2 secs!
Avatar billede sth Novice
18. marts 2001 - 22:07 #19
lyder godt
Avatar billede erikjacobsen Ekspert
18. marts 2001 - 22:12 #20
Du laver en sql som
  \"INSERT INTO ..\"
og som det næste laver du en
  \"SELECT  LAST_INSERT_ID() AS id\"
på samme connection. Så har du den - husk lige at den sidste også
afleverer et recordset som enhver anden SELECT. Virker med garanti :)
Avatar billede erikjacobsen Ekspert
18. marts 2001 - 22:13 #21
Netsrac - det er da muligt det virker - jeg har heller aldrig prøvet det :)
Avatar billede perla Nybegynder
18. marts 2001 - 22:13 #22
netsrac >> Den efterfølgende select tager max 5-10 msek.  I ekstreme situationer har du ret. Kan så løses med transaktionsstyring.
Avatar billede netsrac Praktikant
18. marts 2001 - 22:14 #23
erik >> Nope, det virker ikke, har lige testet.
Avatar billede sth Novice
18. marts 2001 - 22:20 #24
Tjaaa det så jo ellers meget rigtig ud, men jeg fik denne fejl:
Microsoft OLE DB Provider for ODBC Drivers fejl \'80004005\'

[Microsoft][ODBC Driver Manager] Driveren understøtter ikke denne parameter.

/mysql/privat/gem_ny_admin.asp, linje 46
linie 46 er :     id = rs(\"id\")
så det kunne jo tude på at jeg ikke kan få fat på \"ID\" hvad gør jeg

min kode er:
Set Conn = Server.CreateObject(\"ADODB.Connection\")
Conn.Open \"driver={MySql};server=\"& SQLserveradr &\";database=\"& SQLdatabase &\";uid=\"& SQLlogin &\";pwd=\"& SQLpassword
       


SQLstmt = \"INSERT INTO Users (dage_frem,mail_kode,mail_login,mail_server,bruger_efternavn,bruger_navn,Username,Password,opdate_tid)\"
SQLstmt = SQLstmt & \" VALUES (\" & request.form(\"dage_frem\") & \",\'\" & request.form(\"mail_kode\") & \"\',\'\" & request.form(\"mail_login\") & \"\',\'\" & request.form(\"mail_server\") & \"\',\'\" & request.form(\"bruger_efternavn\") & \"\',\'\" & request.form(\"bruger_navn\") & \"\',\'\" & request.form(\"Username\") & \"\',\'\" & request.form(\"Password\") & \"\',\" & request.form(\"opdate_tid\") & \")\"

response.write sqlstmt

Conn.Execute (SQLstmt)

SQL =\"SELECT  LAST_INSERT_ID() AS id\"
Conn.Execute (SQL)
Set rs = conn.Execute(SQL)

    id = rs(\"id\")

response.write id
conn.Close
Set conn = nothing
Set SQLstmt = nothing
Set SQL = nothing

Avatar billede erikjacobsen Ekspert
18. marts 2001 - 22:21 #25
perla: der er ikke transaktioner i MySqls nuværende versioner. Du kan låse
tabellen, men når der nu er indbygget en \"gratis\" funktion, er det den der
skal bruges.
Avatar billede perla Nybegynder
18. marts 2001 - 22:24 #26
Kender desværre ikke MySQL
Avatar billede sth Novice
18. marts 2001 - 22:25 #27
nogen med en go ide\' ?
Avatar billede erikjacobsen Ekspert
18. marts 2001 - 22:27 #28
øv også .... hvor kører du det henne, sth? Ved du hvilken version af
driveren, der bruges? Jeg kan ikke afprøve det lige nu.
Avatar billede sth Novice
18. marts 2001 - 22:30 #29
jeg køre det hjemme ved mig selv på win ME og med pws odbc.driveren er ver.myodbc-2.50.36

Avatar billede erikjacobsen Ekspert
18. marts 2001 - 22:37 #30
OK, jeg har lige afprøvet det uden om ASP, og der virker det - naturligvis.
Det ser ud til at være den nyeste MyODBC. Noget med PWS???

Er der andre, der kan afprøve det?
Avatar billede sth Novice
18. marts 2001 - 23:10 #31
jeg fandt denne løsning, jeg kunne godt nok ikke finde måde hvor med jeg kunne se det nye id-nr men denne løsning kunne i det mindste smide det nye nummer in i den anden tabel
Avatar billede sth Novice
18. marts 2001 - 23:12 #32
i får 5 point hver, det var en der ledte mig på sporet her: http://www.eksperten.dk/spm/57727
han få så de 100 point.

ellers tak for kampen
Avatar billede erikjacobsen Ekspert
19. marts 2001 - 14:54 #33
Nu fik jeg lejlighed til at afprøve det, og jeg får nedenstående lidt omskrevne
til at virke perfekt. Den indsætter, og jeg får id-et ud hver gang, det bliver
bare større og større.... Det er også på en PWS (fra 1997 til Win95). Jeg har
ingen anelse om hvad der er galt hos dig...

<html>
<head>
<title>ASP/Mysql</title>
</head>

<body bgcolor=\"#FFFFFF\">
<%
Set Conn = Server.CreateObject(\"ADODB.Connection\")
Conn.Open \"driver={MySql};server=10.70.1.2;database=test_ej\"
SQLstmt = \"INSERT INTO navne (navn) values (\'Peter\')\"
response.write sqlstmt
Conn.Execute (SQLstmt)
SQL =\"SELECT  LAST_INSERT_ID() AS id\"
Conn.Execute (SQL)
Set rs = conn.Execute(SQL)
id = rs(\"id\")
response.write id
conn.Close
Set conn = nothing
Set SQLstmt = nothing
Set SQL = nothing
%>
</body>
</html>
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