Avatar billede Slettet bruger
07. april 2002 - 20:36 Der 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?
Avatar billede steen_hansen Forsker
07. april 2002 - 20:38 #1
SQL = "SELECT TOP 1 * FROM DinTabel ORDER BY ID DESC"
Avatar billede steen_hansen Forsker
07. april 2002 - 20:39 #2
Ups, 1 skulle ikke have været med:

SQL = "SELECT TOP * FROM DinTabel ORDER BY ID DESC"
Avatar billede Slettet bruger
07. april 2002 - 20:41 #3
steen_hansen > Øhmmm - jeg skal ikke bruge et SQL kald, men en streng, som returnerer id'et for den netop oprettede post.
Avatar billede Slettet bruger
07. april 2002 - 20:42 #4
Det skal komme efter en INSER INTO streng, som har indsat data fra en form...
Avatar billede excession Nybegynder
07. april 2002 - 21:18 #5
bare kig på dette spørgsmål fra tidligere idag.. :

http://www.eksperten.dk/spm/194889

-- xs
Avatar billede Slettet bruger
08. april 2002 - 08:26 #6
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)

Jeg formoder at der i http://www.eksperten.dk/spm/194889 kun kan anvendes rs.AddNew metoden - og ikke INSERT INTO?
Avatar billede netsrac Praktikant
08. april 2002 - 09:17 #7
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.
Avatar billede Slettet bruger
09. april 2002 - 21:30 #8
netsrac > Men vil det virke med INSERT INTO?
Avatar billede excession Nybegynder
09. april 2002 - 21:43 #9
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
Avatar billede 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...
Avatar billede Slettet bruger
09. april 2002 - 21:53 #11
ex > Er ikke helt med på det sidste du skriver...
Avatar billede excession Nybegynder
09. april 2002 - 21:59 #12
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
Avatar billede 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?!
Avatar billede netsrac Praktikant
09. april 2002 - 22:43 #14
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.
Avatar billede Slettet bruger
09. april 2002 - 23:00 #15
netsrac > Jeg bruger MySQL...
Avatar billede Slettet bruger
09. april 2002 - 23:10 #16
hvor det bedste (så vidt jeg ved) er at bruge INSERT INTO metoden?!
Avatar billede excession Nybegynder
09. april 2002 - 23:17 #17
hmm jeg fandt lige et eksempel i min wrox bog..:

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
Avatar billede 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
Avatar billede excession Nybegynder
09. april 2002 - 23:34 #19
ja ja men du kan også bare ændre det..

SELECT id FROM tabelNavn WHERE dato = datoFraDetDuLigeHarSmidtOpPåDatabase
Avatar billede Slettet bruger
10. april 2002 - 11:35 #20
excession > Sidstnævnte er vel i teorien lige så "usikkert" som select max?
Avatar billede excession Nybegynder
10. april 2002 - 11:59 #21
måske, men det undrer mig bare at der ikke findes en anden metode så..

jeg tror ikke på at det er så usikkert igen..

men jeg desværre ikke flere forslag :|


-- xs
Avatar billede excession Nybegynder
19. april 2002 - 00:23 #22
har du fundet ud af noget?

-- xs
Avatar billede excession Nybegynder
21. april 2002 - 15:01 #23
skal vi ikke få afsluttet spørgsmålet?
Avatar billede Slettet bruger
21. april 2002 - 15:03 #24
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
Avatar billede excession Nybegynder
21. april 2002 - 15:10 #25
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
Avatar billede 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.
Avatar billede steen_hansen Forsker
06. maj 2002 - 23:36 #27
Fandt du ud af det, ezolu?
Avatar billede Slettet bruger
07. maj 2002 - 20:55 #28
steen > Det huer mig ikke, men jeg bruger i øjeblikket en autogenereret kode som id...
Avatar billede Slettet bruger
21. juni 2002 - 23:02 #29
Og gør det stadig, men har lært at leve med det...
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester