07. april 2002 - 20:36Der er
26 kommentarer og 3 løsninger
netop indrykket
Hej
Jeg bruger følgende kode til at identificere det unikke id for noget netop indrykket : Set rs = Conn.Execute("select max(id) from tabel") strLastInsertID = rs(0) Men hvis der er flere brugere der indrykker noget samtidigt vil det jo ikke nødvendigvis den netop indrykkede, som returneres af strLastInsertID?! Hvordan kan jeg finde det id som den netop oprettede post har?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
excession > Så det godt - det var mig der svarede på den første version af den - netop med Set rs = Conn.Execute("select max(id) from tabel") strLastInsertID = rs(0)
Den med select max() er ikke holdbar i længden, der kunne komme 2 samtidig brugere, den eneste rigtige metode er den som ncp anvender i det spm. ezolu nævner.
du kunne også give dem et id samtidig med oprettelse istedet for autonummerering..
nu ved jeg ikke hvor mange brugere der skal bruge sitet, men sandsynligheden for at der er 2 der indrykker nøjagtig samtidig er smal
du kunne også hente det sidste id og checke om et eller 2 felter er lig med det netop indrykket.. hvis det er så er det id'et, hvis ikke så kan du prøve den lige før.. osv
-- xs
Synes godt om
Slettet bruger
09. april 2002 - 21:50#10
excession > Jeg vil meget nødigt undvære autonummeringen.. Der kommer til at være en del brugere, så teoretisk set kan problemet opstå, men selvom det ikke skulle være tilfældet, vil jeg gerne ha' hentet det ID som netop er indrykket - og det id SKAL være det aktuelle...
jeg mener at primær nøglen ikke behøver at være et tal..
det kunne f.eks være en sammensat nøgle af 2 felter som du så ved aldrig findes 2 ens af..
du kunne smide noget data i databasen som du gør nu, og derefter hente det sidste record og checke om de felter i recordsettet passer med de felter du lige har smidt op på databasen..
i teorien kan det være der er flere records som er ens, hvis det ikke var for primær nøglen, men den kender du jo ikke..
giver det mening?
-- xs
Synes godt om
Slettet bruger
09. april 2002 - 22:15#13
xs > Det gør det måske, men jeg er ret sikker på at det må være muligt at finde en løsning, uden at jeg skal lave min velfungerende db struktur om?!
ezolu >> Du bliver nød til at bruge .addNew metoden, hvis det er access du bruger, hvis du vil være 100% procent sikker, men du kan også være 99% sikkert på at select max metoden holder, det sker kun at 2 brugere rammer nøjagtig det samme tidspunkt hvis du har rigtig mange brugere.
Synes godt om
Slettet bruger
09. april 2002 - 23:00#15
netsrac > Jeg bruger MySQL...
Synes godt om
Slettet bruger
09. april 2002 - 23:10#16
hvor det bedste (så vidt jeg ved) er at bruge INSERT INTO metoden?!
den bruger en INSERT sætning og derefter henter ID vha SELECT.. og så af en eller anden grund sletter det igen..
men det ser ud til at det er noget man kan gøre uden problemer..? Jeg forstår det ihvertfald sådan.. :)
<% Dim strDatabaseType
'Choose one of the following two lines, and comment out the other strDatabaseType = "Access" 'strDatabaseType = "MSDE"
'Now we use this selection to specify the connection string If strDatabaseType = "Access" Then strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\datastores\Movie2000.mdb;" & _ "Persist Security Info=False" Else strConnect = "Provider=SQLOLEDB;Persist Security Info=False;" & _ "User ID=sa;Initial Catalog=Movie;" & _ "Initial File Name=C:\MSSQL7\Data\Movie2000.mdf" End If
Dim objRS, objComm, intNoOfRecords Set objComm = Server.CreateObject("ADODB.Command")
objComm.ActiveConnection = strConnect objComm.CommandText = "INSERT INTO Movies(MovieId, Title) VALUES (331, 'Psycho')" objComm.CommandType = adCmdText objComm.Execute intNoOfRecords Response.Write "The INSERT command has been executed; " & _ "Number of records inserted = " & intNoOfRecords & "<HR>"
objComm.CommandText = "SELECT * FROM Movies WHERE Title LIKE 'Psycho'" Set objRS = objComm.Execute Response.Write "The SELECT command has been executed, " & _ "and has selected the following records: <BR>" While Not objRS.EOF Response.Write "MovieID = " & objRS("MovieID") & _ "; Title = " & objRS("Title") & "<BR>" objRS.MoveNext Wend
objRS.Close Set objRS = Nothing
objComm.CommandText = "DELETE FROM Movies WHERE Title LIKE 'Psycho'" objComm.Execute intNoOfRecords Response.Write "<HR>The DELETE command has been executed, " & _ "Number of records deleted = " & intNoOfRecords & "<BR>"
Set objComm = Nothing %>
--xs
Synes godt om
Slettet bruger
09. april 2002 - 23:22#18
Der tager den da SELECT * FROM Movies WHERE Title LIKE 'Psycho'" altså gående på Title og ikke på ID
excession > Jeg har ikke fundet ud af noget endnu - bruger stadig select max(id) metoden - og det irriterer mig ): Så derfor håber jeg stadig på respons i dette spm
en anden ting du kan gøre er måske at generere en eller anden tilfældig kode..
så hver post får en tilfældig kode som f.eks:
jk34h589hDf
sandsynligheden for at samme kode kommer flere gange er minimal.. hvis du så også checker efter dato samtidig er der usandsynlig lidt chance for at der er 2 ens koder..
-- xs
Synes godt om
Slettet bruger
21. april 2002 - 15:14#26
Det var måske en ide - bruger en sådan funktion til en del andre ting også... Vil lige overveje det.
steen > Det huer mig ikke, men jeg bruger i øjeblikket en autogenereret kode som id...
Synes godt om
Slettet bruger
21. juni 2002 - 23:02#29
Og gør det stadig, men har lært at leve med det...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.