webForumDet fria alternativet

Unique Identifier på nyinlagd post?

ASP

10 svar · 308 visningar · startad av TainEvil

Medlem sedan aug. 2002106 inlägg
Frågan#1

Någon som vet hur man enklast tar reda på unique identifiern på en nyupplagd post (för att direkt kunna använda den nyckeln för uppläggning av kopplade poster i en anna tabell)??

Första inserten är:

SQL = "INSERT INTO cardseries (Owner, FirstCard, LastCard, SubscriptionStart, SubscriptionEnd) " & _
				" VALUES ('" & Request.Form("fldCompany") & "' , '" & Request.Form("fldFirstCard") & "', " & _
				" '" & Request.Form("fldLastCard") & "' , '" & Request.Form("fldStartDate") & "', " & _
				" '" & Request.Form("fldEndDate") & "')"

Denna post får alltså en unique identifier som jag vill använda direkt i nästa insert (istället för XXXXXXXX):

SQL = "INSERT INTO Cards (CardNumber, CardSeries, Owner) VALUES ('" & Counter & "', '" & Request.Form("fldCompany") & "', '" & XXXXXXXX & "')"

Några tips?

Medlem sedan dec. 200012 464 inlägg
#2

Vilken dbms använder du?

Medlem sedan aug. 2002106 inlägg
#3

Vet inte vad DBMS är en förkortning av?? Men kanske det är Access2000 som du är ute och fiskar efter... :q

Medlem sedan dec. 200012 464 inlägg
#4

Jo, det svaret duger.

SQL = "INSERT INTO cardseries (Owner, FirstCard, LastCard, SubscriptionStart, SubscriptionEnd) " & _
				" VALUES ('" & Request.Form("fldCompany") & "' , '" & Request.Form("fldFirstCard") & "', " & _
				" '" & Request.Form("fldLastCard") & "' , '" & Request.Form("fldStartDate") & "', " & _
				" '" & Request.Form("fldEndDate") & "')"
connect.execute sql

set rs = connect.execute("select @@identity")
SQL = "INSERT INTO Cards (CardNumber, CardSeries, Owner) VALUES ('" & Counter & "', '" & Request.Form("fldCompany") & "', " & rs(0) ")"

Varför hade du apostrofer kring XXXXXXX? Den kolumnen skall vara numerisk.

DBMS = database management system.

Medlem sedan aug. 2002106 inlägg
#5

:(

set rs = connect.execute("select @@identity")

Ovanstående rad returnerar en nolla...

Select @@identity är alltså en standard SQL-fråga som bör fungera i de flesta dbms (kolla vad man lär sig ;) ) och ska returnera id för den senast inlagda posten, right?

Mitt id fält i access är uppsatt som en räknare med räknartypen replikerings-id (liknar unique identifier i MS-SQL).

Vet du att ovanstående select sats fungerar med Access?

Bifogar hela subben...

	Sub NewCardSeries()
		
		Set Connection = Server.CreateObject("ADODB.Connection") 
		Connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath(".") & "../db/helpline.mdb"

		Set Cmd = Server.CreateObject("ADODB.Command")
		Set Cmd.ActiveConnection = Connection

		SQL = "INSERT INTO cardseries (Owner, FirstCard, LastCard, SubscriptionStart, SubscriptionEnd) " & _
		" VALUES ('" & Request.Form("fldCompany") & "' , '" & Request.Form("fldFirstCard") & "', " & _
		" '" & Request.Form("fldLastCard") & "' , '" & Request.Form("fldStartDate") & "', " & _
		" '" & Request.Form("fldEndDate") & "')"
			
		Connection.Execute(SQL)

		set rs = connection.execute("select @@identity")
		
		'## Also post all the individual cards in card db
		
		cmpFirstCard = Trim(Request.Form("fldFirstCard"))
		cmpLastCard = Trim(Request.Form("fldLastCard"))
					
		For Counter = cmpFirstCard to cmpLastCard
			SQL = "INSERT INTO Cards (CardNumber, CardSeries, Owner) VALUES ('" & Counter & "', '" & Request.Form("fldCompany") & "', " & rs(0) & ")"
			Connection.Execute(SQL)
		Next
				
		'## Send the users back the entryform, giving them a chance to enter another series

		Call ShowHeader
		Call ShowCardSeries

	End Sub
Medlem sedan dec. 200012 464 inlägg
#6

select @@identity är inte sql-standard.

Den fungerar bara med numerisk räknare inte med replikeringsid. Varför har du sådant otyg för?

Medlem sedan aug. 2002106 inlägg
#7

Vet inte, tyckte det såg coolt ut med långa id... :p

Du menar att om jag sätter en vanlig stigande räknare på id-fältet så kan jag använda @@indentity??

Finns det inget sätt att returnera ett replikerings-id då?

Medlem sedan dec. 200012 464 inlägg
#8

Du menar att om jag sätter en vanlig stigande räknare på id-fältet så kan jag använda @@indentity??

ja.

Finns det inget sätt att returnera ett replikerings-id då?

Kanske, men jag har inte sett något (liknande @@identity).

I sql server fungerar det så att man skapar ett replikeringsid innan man gör insert. Det verkar inte vara helt fullständigt genomtänkt i Access.

Medlem sedan aug. 2002106 inlägg
#9

Ok, jag labbar vidare... Återkommer om jag kommer på något.

Tack för hjälpen i alla fall!

Medlem sedan juni 200032 967 inlägg
#10

Man borde ju kunna ha både replikerings-id och en vanlig räknare? Då kan man lätt lista ut vilket replikerings-id som tillhör posten vars id har värdet i @@identity.

mvh,

Medlem sedan aug. 2002106 inlägg
#11

Förvisso, men det känns lite som kaka på kaka. Just i det här fallet så har det ingen egentlig betydelse vilken typ av räknare jag använder. Därför skrev jag om hela klabbet med vanliga räknare i alla tabeller och nu fungerar allt geschwint.

Men...man kan ju ändå inte riktigt släppa problemet med replikerings-id...

Nåja, det fungerar, så vi nöjer oss med det!

254 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
117 ms — ändringar (db)