Just nu i M3-nätverket
Jump to content

Få ID


Miljarder

Recommended Posts

Tjingeling,

 

När jag sparat en post, hur gör jag snabbast för att få id:et(räknare) på den posten och vara säker på att det är samma, det får inte bli fel..

 

Jag skulle ha gjort:

SQL = "SELECT TOP 1 ID From Tabell WHERE Phone=" & request.form("phone") &" ORDER BY ID DESC""

 

Blir det bra eller är det för omständigt?

 

Ha det bra..

 

//Tomas

 

[inlägget ändrat 2004-08-24 22:10:24 av Miljarder]

Link to comment
Share on other sites

Mikael Ericsson

Ditt förslag fungerar bara i en enanvädarmiljö.

 

Förlåt om jag är dum nu, men har du testat sökfunktionen här på e-forum?

Frågan är besvarad många gånger.

Sök efter IDENTITY eller SCOPE_IDENTITY; dessutom talar du inte om vilken databas du använder: Access, MS-SQL, Informix, C-ISAM, DB2 eller vad...

 

En variant som jag använt är att lägga till ett fält i tabellen (tmpid varchar(255)) där jag sparar ett unikt känt värde.

 

Ex:

 

insert into ttabell (rubrik,annat,tmpid) values ('Hej','Hopp','"&session.sessionid&now&"')

 

Och hittar posten med:

select id from ttabell where tmpid='"session.sessionid&now&"'"

 

Link to comment
Share on other sites

Min måste fungera den också för hur många användare som helst så vida inte 2st med samma telnr lyckas trycka på "skicka" exakt samtidigt då..!??! Då behöver jag ingen till col om jag gör så..

 

Spelar det nån roll vilken db jag använder? Jaja, jag kör SQL i alla fall..

 

Det jag funderade på var om det gick att få ID:t omedelbums men men.. går troligtvis inte. =)

 

Tack för "hjälpen" i alla fall..

 

//Tomas

 

Link to comment
Share on other sites

Miljarder - du måste specificera databas. Det ÄR skillnad på den sql som används idag

 

TILLÄGG: Eller snarare, uppbyggnaden av dbm-systemet är det som skiljer. SQL är bara ett samtal med databasen, vet du inte hur din dbms arbetar så är ord som "queries" ganska meningslösa...

[inlägget ändrat 2004-08-25 02:22:39 av Anjuna Moon]

Link to comment
Share on other sites

Mikael Ericsson

För att få ID:et direkt efter en INSERT kan du skapa en procedur som skapar posten och returnerar ID:et.

Exempel:

 

CREATE PROCEDURE spAddPost @falt1 int, @falt2 varchar(255)

AS

insert into ttabell (falt1,falt2)

values (@falt1,@falt2)

select @@identity

GO

 

 

Link to comment
Share on other sites

Enkel lösning på dylika problem är att skippa låta databasen bestämma vilket id du vill ha, genera det själv istället.

 

I klassiska ASP kan man genera en GUID med:

 

[color="#0000ff"]Function[/color] getGuid()
[color="#0000ff"]Dim[/color] TypeLib, strGuid

[color="#006400"]' Scriptlet.Typelib[/color]
[color="#0000ff"]Set[/color] TypeLib = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"Scriptlet.TypeLib"[/GRÅ])

[color="#006400"]' Get GUID[/color]
strGuid = TypeLib.Guid

[color="#006400"]' Since a string terminator seem to be at the end[/color]
[color="#006400"]' let's parse out and return the string up to the ending '}'[/color]
getGuid = [color="#0000ff"]Mid[/color]( strGuid, 1, [color="#0000ff"]InStrRev[/color](strGuid,[GRÅ]"}"[/GRÅ]) )

[color="#0000ff"]Set[/color] TypeLib = [color="#0000ff"]Nothing[/color]
[color="#0000ff"]End[/color] [color="#0000ff"]Function[/color]

 

i ASP.NET är det ännu enklare:

 

[color="#0000ff"]String[/color] sGuid = (System.Guid.NewGuid()).ToString();

 

 

Link to comment
Share on other sites

Jag har redan gjort så för icke registrerade men om de registrerar sig så ska alla idn bytas ut mot räknarens id.. det är där problemet är. =)

 

Link to comment
Share on other sites

select @@identity

 

I SQLServer används säkrast :

SELECT IDENT_CURRENT('TabellNamn') AS NewId

 

@@identity skall inte användas i ett fleranvändarsystem då det returnerar det sista id:t som genererats oavsett tabell (du kan då alltså få id från en insert som utförts av någon annan i)

 

Link to comment
Share on other sites

I SQLServer används säkrast :

SELECT IDENT_CURRENT('TabellNamn') AS NewId

Finns ngt liknande för Access?

 

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

 

Link to comment
Share on other sites

Finns ngt liknande för Access

 

Det vet jag tyvärr inte (tar emot att behöva säga den meningen ;)

 

Link to comment
Share on other sites

Först vill jag säga att det är farligt att förlita sig på en räknare, särskilt i Access där man lätt kan sabba räknar värdena.

 

Gör du en "komprimera reparera databas" så räknar den om alla värden och då är dina medlems id helt snurriga sedan.

 

Det hela beror väl på hur du lägger in dina records, använder du "batch uppdateringar" får du id:t helt gratis:

 

<%

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

 

connstr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("test.mdb")

 

rs.Open "SELECT TOP 1 ID,Name FROM tabell1", connstr, 1, 3

 

rs.AddNew

rs("Name") = "test"

rs.Update

 

' Hämta nya id värdet

id = rs("ID")

 

Response.Write id

%>

 

Kör du med sql frågorna direkt (dvs conn.Execute(..) ) så blir det jobbigare och då är nog förslaget som tidigare gavs att generera ett unikt id som du använder som temp id det bästa förslaget, använd sedan temp id:t för att få räknar id:t.

 

 

Link to comment
Share on other sites

Mikael Ericsson

Så här ska det naturligtvis vara (klantade till det):

 

tmpid=session.sessionid&now

 

insert into ttabell (rubrik,annat,tmpid) values ('Hej','Hopp','"&tmpid&"')

 

Och hittar posten med:

select id from ttabell where tmpid='"&tmpid&"'"

 

session.sessionid&now kan ju ändra sig (now) mellan sqlsatserna.

 

[inlägget ändrat 2004-08-26 16:30:03 av Mikael Ericsson]

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...