Just nu i M3-nätverket
Gå till innehåll

Vad blir ID-numret?


Sasja

Rekommendera Poster

Hur får jag reda på vad ID-numret kommer bli på en post jag kommer att skapa i en databas?

 

Jag vill nämligen att den post som kommer skapas ska ha ID-numret i två kolumner. I en som heter 'id' och en som heter 'thread', det har alltså med ett trådforum att göra. Hur bär jag mig åt?

 

 

Poäng delas givetvis ut till lösande svar!

 

[inlägget ändrat 2004-10-04 14:18:32 av Sasja]

Länk till kommentar
Dela på andra webbplatser

[color="#0000ff"]Select[/color] MAX(ID) as max_id from Tabell 

 

 

Sedan visar du bara nästa nr:

 

Response.write("nästa ID_nr är:" & rs("max_id")+1)

 

 

 

//Mentor

Den högsta formen av intelligens är sunt förnuft

 

Länk till kommentar
Dela på andra webbplatser

Jo, jag tänkte också på det. Men är det så smart?

 

Ponera att en annan ska åta databasen samtidigt och stoppar in en post precis efter att man räknat ut MAX-id:t. Då blir det ju galet... eller kan det inte bli så? Hur ligger det till?

 

Länk till kommentar
Dela på andra webbplatser

Select @@IDENTITY

Tex:

conn.[color="#0000ff"]Execute[/color]([GRÅ]"INSERT INTO medlemmar (fnamn, enamn) VALUES('"[/GRÅ]&[b]Request[/b].Form([GRÅ]"fnamn"[/GRÅ])&[GRÅ]"', '"[/GRÅ]&[b]Request[/b].Form([GRÅ]"fnamn"[/GRÅ])&[GRÅ]"')"[/GRÅ])
[color="#0000ff"]Set[/color] RS=conn.[color="#0000ff"]Execute[/color]([GRÅ]"SELECT @@IDENTITY"[/GRÅ])
nyMedlemId=RS(0)
[color="#0000ff"]Set[/color] RS=[color="#0000ff"]Nothing[/color]

OBS at-tecknen är bilder...

 

/Cluster

----------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

-----> http://unic.serveftp.com/eforum <-----

 

[inlägget ändrat 2004-10-04 14:38:00 av Cluster]

Länk till kommentar
Dela på andra webbplatser

Nej självklart kan du inte göra som jag skrev innan, utan du måste ange i tabellen att Id_nr ska vara en räknare annars kan det bli komplikationer.

 

 

//Mentor

Den högsta formen av intelligens är sunt förnuft

 

Länk till kommentar
Dela på andra webbplatser

Du ska få en poäng om jag får din kod att fungera, den ser konstig ut. Men det tycker jag om de flesta SQL-kommandon som inte är grundläggande. :)

 

Snabel-a i en SQL-sträng låter för mig väldigt främmande, någon som håller med/inte med?

[inlägget ändrat 2004-10-05 13:22:51 av Sasja]

Länk till kommentar
Dela på andra webbplatser

Access är databasen... så det fungerar inte då?

 

Hur tusan gör man då för att få fram ID:t på den post som kommer att skapas?

 

Poäng fortfarande till det lösande svaret!

 

Länk till kommentar
Dela på andra webbplatser

Det beror på sättet du använder, kör du med ett recordset direkt får du det gratis:

 

Låt säga att din databas innehåller

 

Table1

--------

ID,

Text1

 

Där ID är en counter, om du nu gör detta:

 

Set rs = Server.CreateObject("ADODB.Recordset")

rs.Open "Table1", "conn_str", 1, 3

 

rs.AddNew

rs("Text1") = "blaha"

rs.Update

 

id = rs("ID")

 

Nu kommer id innehålla ditt nya id.

 

 

[inlägget ändrat 2004-10-05 13:32:42 av PBL]

Länk till kommentar
Dela på andra webbplatser

Men varför skapa ett reccordset när man bara vill lägga (eller ändra ngt för den delen) till något i db? Nu måste man ju i detta fall (när man vill ha ut id't) iof ändå göra en selektering... men ändå.

 

/Cluster

----------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

-----> http://unic.serveftp.com/eforum <-----

 

Länk till kommentar
Dela på andra webbplatser

Det sköter ju sig självt, dessutom får du andra grejer gratis med denna metod som att du slipper parsa ut single qoutes i det du stoppar in, det sköter sig självt också.

 

Länk till kommentar
Dela på andra webbplatser

Står inte ett ord i Access hjälpen men det betyder ju inte att du kan ha rätt för det.
Det är ju just det det betyder. Dvs att jag kan ha rätt även om det inte står med i Accesshjälpen.

Huruvida det står eller inte har jag ingen aning om. MEN det funkar, det vat jag. Testa själv vetja. :)

 

/Cluster

----------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

-----> http://unic.serveftp.com/eforum <-----

 

Länk till kommentar
Dela på andra webbplatser

Ok :-)

 

Glöm dock inte att det kan hinnas ändras mellan två frågor, ska man göra på detta sätt bör man köra SELECT @@INDENTITY direkt samtidigt som man gör INSERT.

 

En insert kan enligt standarden innehålla en select sats i slutet dvs:

 

Set rs = conn.Execute("INSERT INTO medlemmar (fnamn, enamn) VALUES('"&Request.Form("fnamn")&"', '"&Request.Form("fnamn")&"') SELECT @@IDENTITY" )

 

 

[inlägget ändrat 2004-10-05 13:45:34 av PBL]

Länk till kommentar
Dela på andra webbplatser

Helt rätt, klart bättre att lägga till IDENTITY i slutet av insert-satsen.

*Poäng*

 

/Cluster

----------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

-----> http://unic.serveftp.com/eforum <-----

 

Länk till kommentar
Dela på andra webbplatser

Vad har du för aktivitet på din aplikation. Jag menar hur många anrop har du per millisekund. Om det är riktigt många så är ju knappast Access rätta "databasservern" ändå.

 

/Cluster

----------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

-----> http://unic.serveftp.com/eforum <-----

 

Länk till kommentar
Dela på andra webbplatser

Jaha, läste för hastigt ditt förra inlägg PBL.

 

[color="#0000ff"]Set[/color] rs = conn.[color="#0000ff"]Execute[/color]([GRÅ]"INSERT INTO medlemmar (fnamn, enamn) VALUES('"[/GRÅ]&[b]Request[/b].Form([GRÅ]"fnamn"[/GRÅ])&[GRÅ]"', '"[/GRÅ]&[b]Request[/b].Form([GRÅ]"fnamn"[/GRÅ])&[GRÅ]"') SELECT IDENTITY"[/GRÅ] )

fungerar?

 

Det kan inte komma någon mellan och göra så detta blir coco-bang?

 

[inlägget ändrat 2004-10-05 13:55:47 av Sasja]

Länk till kommentar
Dela på andra webbplatser

Nej det borde fungera bra.

 

Det enda du bör tänka på är att plocka ut single qoutes ur formulär postningarna med Replace.

 

Länk till kommentar
Dela på andra webbplatser

 

Så här ser mitt SQL-uttryck nu...

  SQL = [GRÅ]"INSERT INTO threads(subject) VALUES('"[/GRÅ]& [b]Request[/b].form([GRÅ]"message"[/GRÅ]) &[GRÅ]"') SELECT @@IDENTITY As idnummer"[/GRÅ]

  [color="#0000ff"]Set[/color] RS = Connection.[color="#0000ff"]Execute[/color](SQL)

 

Men servern klagar på SQL:en med följande felmeddelande:

Feltyp:

Microsoft JET Database Engine (0x80040E14)

Semikolon saknas i slutet av SQL-uttryck.

 

 

Vad innebär det nu då? Vad har jag gjort för knasigt?

 

 

Länk till kommentar
Dela på andra webbplatser

Skumt, jag testade i Access och hade inga problem att få det att fungera.

 

Vilken version av Access kör du med och hur ser din connection sträng ut ?

 

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...