webForumDet fria alternativet

Senaste ilagda id:t

15 svar · 616 visningar · startad av Ciliax

CiliaxMedlem sedan jan. 2004170 inlägg
#1

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
#2

tilläggas bör att jag programmerar i vbscript och databashanteraren är Access! :)

LarsGMedlem sedan dec. 200012 464 inlägg
#3
select @@identity
M.CheraghiMedlem sedan juli 20015 107 inlägg
#4

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
#5

Nej. Den funktionen finns i Mysql.

M.CheraghiMedlem sedan juli 20015 107 inlägg
#6

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
#7

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
#8

Är det nå fel att göra som jag gjorde nu med Select Max(id)??

MVH Ciliax

LarsGMedlem sedan dec. 200012 464 inlägg
#9

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
#10

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
#11

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
#12

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

MickeA.comMedlem sedan feb. 20034 441 inlägg
#13

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!

@ndersMedlem sedan juni 200032 969 inlägg
#14

Kan det här bero på att jag använder "Replikerings ID"?

Ja, det är därför.

MickeA.comMedlem sedan feb. 20034 441 inlägg
#15

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
#16

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

137 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)