webForumDet fria alternativet

Databas - ID

8 svar · 473 visningar · startad av koltrasten

koltrastenMedlem sedan okt. 2002272 inlägg
#1

Hej!
Jag skall lägga till en ny post i min databas (Access).
RecSet.AddNew o.s.v

Posten ID är en räknare som räknar uppåt. Detta värde kommer, som ni säkert vet, då databasen uppdaterats - RecSet.Update.
Jag vill få fram den för jag vill skriva ut den siffran i min applikation.

Alltså:
<%
RecSet.AddNew
RecSet("Namn") = "Namnet"
RecSet("Meddelande") = "Meddelandet"
RecSet("Rubrik") = "Rubriken"
RecSet.Update
%>
Ditt ID är <%=variabel%>

Hur gör jag?

@ndersMedlem sedan juni 200032 969 inlägg
#2

Om jag inte helt missminner mig kan du skriva ut räknarvärdet direkt efter .Update när du lägger till data på det sättet.

Response.Write RecSet("ID")

Annars kan du ställa en SQL-fråga direkt efter insert, där du frågar efter värdet @@IDENTITY. Den SQL-frågan kan se ut så här:

SELECT @@IDENTITY

Men, som sagt, det första alternativet torde duga.

Mvh,

koltrastenMedlem sedan okt. 2002272 inlägg
#3

Hej Anders,
Tack så mycket för ditt svar.
Alternativ 1 med att skriva ut Response.Write RecSet("ID") fungerade inte. Det visade ingenting.

Hur fungerar Alternativ 2 med IDENTITY?

Tack än en gång för all hjälp.

@ndersMedlem sedan juni 200032 969 inlägg
#4

Jag förespråkar inte varianten att lägga till data som du använder, och vet ärligt talat inte exakt hur den används. Det är bättre ur de flesta synpunkter att lägga till, ändra och ta bort poster med SQL-frågor (INSERT, UPDATE, DELETE) istället för att göra det med ADO-metoder.

Jag hade gjort så här:

  1. Skrivit en insert-fråga som lägger till informationen i databasen och exekvera denna. Exempel:
strSQL = "INSERT INTO tabellen (Namn, Meddelande, Rubrik) VALUES ('Namnet', 'Meddelandet', 'Rubriken')"
connectionobjekt.execute (strSQL)
  1. Exekverat frågan för att hämta ut räknarvärdet:
strSQL = "SELECT @@IDENTITY"
Set objRS = connectionobjekt.execute (strSQL)
Response.write "ID: " & objRS(0)

Du får se till att byta ut så dina objekt får rätt namn.

Mvh,

koltrastenMedlem sedan okt. 2002272 inlägg
#5

Hej,
Tack för svaret. Hur använder jag SQL? Vad har den annars för fördelar? Går applikationen snabbare med SQL?

Skriver jag:

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("medd.mdb")&";"
Set RecSet = Server.CreateObject("ADODB.Recordset")
strSQL = "INSERT INTO tabellen (Namn, Meddelande, Rubrik) VALUES ('Namnet', 'Meddelandet', 'Rubriken')"
connectionobjekt.execute (strSQL)

?

@ndersMedlem sedan juni 200032 969 inlägg
#6

Hej!

Ja, du tjänar prestanda om du använder SQL-frågor för att lägga till och ändra data. Det blir ofta färre rader kod också, och jag tycker personligen att koden blir mer överskådlig, men just det är en smaksak.

Det finns dock ett par saker man måste tänka på när man använder SQL, och det är att alla fältvärden måste anges på rätt sätt. Apostrofer runt värden av texttyp, osv.

Den kod du visar ser rätt ut. Men du behöver inte ha med skapandet av recordsetet. Jag utgick ifrån att alla tre fälten var av texttyp, därför satte jag apostrofer runt fältvärdena.

Mvh,

OveRRidEMedlem sedan feb. 200112 078 inlägg
#7

Om jag får tillägga, efter @nders mycket utförliga beskrivning; använd Jet-drivrutinen istället för Access-drivern när du arbetar med Access. Samt ta bort ditt skapande at recordset:et.

set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider=Microsoft.OLEDB.Jet.4.0;Data Source=" & Server.MapPath("medd.mdb")
strSQL = "INSERT INTO tabellen (Namn, Meddelande, Rubrik) VALUES ('Namnet', 'Meddelandet', 'Rubriken')"
Connect.execute (strSQL)
icaaqMedlem sedan okt. 20005 273 inlägg
#8

Om jag får tillägga, efter @nders och OveRRides mycket utförliga beskrivning; lägg till ,,128 så skapas inte ett tomt recordset heller ;)

[red]set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider:Microsoft.OLEDB.Jet.4.0;Data Source=" & Server.MapPath("medd.mdb")
strSQL = "INSERT INTO tabellen (Namn, Meddelande, Rubrik) VALUES ('Namnet', 'Meddelandet', 'Rubriken')"
Connect.execute (strSQL),,128[/red]
OveRRidEMedlem sedan feb. 200112 078 inlägg
#9

Haha! :D

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