Miljarder Posted August 24, 2004 Share Posted August 24, 2004 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 More sharing options...
Mikael Ericsson Posted August 24, 2004 Share Posted August 24, 2004 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 More sharing options...
Miljarder Posted August 24, 2004 Author Share Posted August 24, 2004 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 More sharing options...
Anjuna Moon Posted August 25, 2004 Share Posted August 25, 2004 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 More sharing options...
Mikael Ericsson Posted August 25, 2004 Share Posted August 25, 2004 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 More sharing options...
PBL Posted August 25, 2004 Share Posted August 25, 2004 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 More sharing options...
Miljarder Posted August 25, 2004 Author Share Posted August 25, 2004 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 More sharing options...
Anjuna Moon Posted August 25, 2004 Share Posted August 25, 2004 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 More sharing options...
Cluster Posted August 26, 2004 Share Posted August 26, 2004 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 More sharing options...
Anjuna Moon Posted August 26, 2004 Share Posted August 26, 2004 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 More sharing options...
PBL Posted August 26, 2004 Share Posted August 26, 2004 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 More sharing options...
Mikael Ericsson Posted August 26, 2004 Share Posted August 26, 2004 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 More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.