CiliaxMedlem sedan jan. 2004170 inlägg Hallojsan...
Jag skulle behöva hämta ut ett id som jag strax innan lagt in i en tabell för att använda detta som en främmande nyckel i en annan insert i en annan tabell....
Först sätter jag in detta i en tabell..... i denna tabell genereras ett automatiskt id som jag direkt vill ha ut och använda som en främmande nyckel i en senare insertsats.........
"INSERT INTO LokalGrupp(namn,ou)VALUES('"&lokalNamn(i)&"','"&Lm.Name&"')"
Vad jag undrar.... vad är smidigast för att lösa detta? En select sats som hämtar det högsta numret av de Id:n som finnes å tar det... Är detta säkert? Finns det andra problem med detta?
Tacksam för svar är en novice på sql :)
MVH Ciliax
CiliaxMedlem sedan jan. 2004170 inlägg tilläggas bör att jag programmerar i vbscript och databashanteraren är Access! :)
LarsG skrev:
select @@identity
Kan man inte använda "Last_Insert_ID()" Jag har ingen koll på läget därför frågar jag :)
LarsGMedlem sedan dec. 200012 464 inlägg Nej. Den funktionen finns i Mysql.
LarsG skrev:
Nej. Den funktionen finns i Mysql.
Jaha okej, så
"select @@identity" i Access
och
"Select last_insert_id()" i mySQL
ger samma resultat?
CiliaxMedlem sedan jan. 2004170 inlägg hmmm Jag tackar för de svar jag fått.... Men måste göra nått vajsing... Får bara 0 som svar fast det finns massa id.
EXPR1000 som kolumnnamn och en nolla som resultat om jag kör som ni skrev.
skriver jag Select @@identity from LokalGrupp så får jag en radda med nollor......
Vad gör jag för fel.....
Jättetacksam för svar från dessa kunniga herrar! :)
MVH Ciliax
CiliaxMedlem sedan jan. 2004170 inlägg Är det nå fel att göra som jag gjorde nu med Select Max(id)??
MVH Ciliax
LarsGMedlem sedan dec. 200012 464 inlägg Du kan bara använda
select @@identity
direkt efter en insert i en tabell som har en räknarkolumn.
Att använda
select max(id) from t
är inte bra.
CiliaxMedlem sedan jan. 2004170 inlägg Jag är inte riktigt med..... skriver jag Select @@identity some n egen fråga direkt efter?? Iså fall så får jag bara 0 av nån anledning.... eller lägger jag till det efter insertsatsen i samma fråga?? Känne rmig lite trög! :)
Varför om jag törs fråga är inte Max(id) bra?
MVH Ciliax
spangoMedlem sedan juni 20008 205 inlägg
Ciliax skrev:
Jag är inte riktigt med..... skriver jag Select @@identity some n egen fråga direkt efter?? Iså fall så får jag bara 0 av nån anledning.... eller lägger jag till det efter insertsatsen i samma fråga?? Känne rmig lite trög! :)
Du gör en vanlig select från samma anslutning efter att du gjort din insert. Först insert, sen select.
När du säger SELECT @@identity as last_id får du fram det senaste id:t som automatgenererats och plockar sedan fram det med dinrecordset("last_id")
Ciliax skrev:
Varför om jag törs fråga är inte Max(id) bra?
Därför att du inte frågar efter det du vill ha. Resultatet blir förmodligen detsamma, men det du frågar efter är det högsta id-numret, inte det från inserten du körde. Teoretiskt sett finns det en möjlighet att det inte är samma. Anta t.ex. att det här ligger på en webbserver, och två personer arbetar samtidigt. Om båda begär att få lägga in varsin ny post samtidigt, måste naturligtvis arbetet fördelas. Anta då att person #1 gör sin insert, sen går turen över till tråden som sköter person #2 som gör sin insert. Efter detta går turen tillbaks till #1 som gör sin select för att hitta id:t från inserten. Använder man då max(id) får man id:t från person #2:s insert, @@identity funkar däremot som förväntat.
CiliaxMedlem sedan jan. 2004170 inlägg Jag tackar å bugar.... Problemet var att jag inte använde samma connection.... Nu funkar det klockrent...
Tackar även för den fina förklaringen om Max(id)....
MVH Ciliax
HejHej
Nu drar jag upp en gammal tråd, mest för att slippa skapa en ny om samma sak.
Jag har följande:
strSQL = "INSERT INTO tbl_hiss (" &_
"Hiss_Adress, Hiss_Gatunummer, Hiss_Ovr_Addr, Hiss_Portkod, Hiss_Nycklar, Hiss_Ovr_Info, " &_
"Hiss_Area, Hiss_Karta, Hiss_RegNr, Hiss_Omr_Ort, Hiss_BesOrg, Hiss_Ans_Montor, Hiss_Deleted" &_
") VALUES('" &_
strAD & "', '" &_
strGN & "', '" &_
strOA & "', '" &_
strPK & "', '" &_
strNR & "', '" &_
strOI & "', '" &_
strOE & "', '" &_
strMP & "', '" &_
strRN & "', '" &_
strPO & "', '" &_
strBO & "', '" &_
strSM & "', " &_
strHD & ")"
Set oRec = oConn.Execute(strSQL)
Set oRec = oConn.Execute("SELECT @@identity as Last_Id")
lastId = oRec("Last_Id")
Problemet är att Last_ID hela tiden blir 0 (noll)
Kan det här bero på att jag använder "Replikerings ID"? För på ett annat ställe kör jag samma grej, vilket funkar bra där, skillnaden är att jag kör en vanlig "räknare" med heltal.
Vore bra om jag kunde få hjälp med det här.
Tack!
Ahh, vilket skit.. ;)
Aja, får väl struna i det här då. Det är dåligt att det inte går att byta datatyp på ett sådant fält.
Det finns alltså inget annat sätt att ta reda på senast ilagda ID't i en tabell med rep. id?
@ndersMedlem sedan juni 200032 969 inlägg För att ta reda på det senaste ID:t måste du ha en räknarkolumn.
Du får lägga till en sådan, hämta ut @@identity, och sedan hämta ut replikerings-id:t som tillhör posten med uthämtat räknarvärde.
Varför använder du replikerings-ID?
mvh