/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Kontrol om bruger findes i DB
Fra : Klaus Egebjerg


Dato : 21-10-01 19:09

Hej

Jeg er ved at lave et lille kartotek hvor folk kan tilmeldes. Siden linker
op til en Access DB. Det fungere også meget fint, men hvordan laver jeg en
kontrol af om folk allerede findes i databasen inden den indsætter dem.

Jeg er godt klar over, at jeg kan lave det med en primær nøgle i DB, men det
giver sådan en grim fejlmeddelse. Jeg har forsøgt mig med følgende, men det
går ikke:

strQ = "Select Navn From Bryggere Where Email = strEmail"
If strQ <> " " Then
objRS.Update
Else
Response.Write ("Tror du ikke du har fået en hjemmebryg for meget")
End IF

Er der nogen der har forslag til hvordan det kan gøres ?

Klaus Egebjerg
klausegebjerg@get2net.dk




 
 
Jesper Stocholm (22-10-2001)
Kommentar
Fra : Jesper Stocholm


Dato : 22-10-01 09:04

Klaus Egebjerg wrote in dk.edb.internet.webdesign.serverside.asp:
> Hej
>
> Jeg er ved at lave et lille kartotek hvor folk kan tilmeldes. Siden linker
> op til en Access DB. Det fungere også meget fint, men hvordan laver jeg en
> kontrol af om folk allerede findes i databasen inden den indsætter dem.
>
> Jeg er godt klar over, at jeg kan lave det med en primær nøgle i DB, men
det
> giver sådan en grim fejlmeddelse. Jeg har forsøgt mig med følgende, men det
> går ikke:
>

Du kan vælge at gøre det på følgende måde:

Prøv blot at indsætte en bruger i databasen, der er der i forvejen. Når der
så kommer en fejl, så fang den med følgende kode:

strSQL = "INSERT INTO ..."
on error resume next
obj.Execute(strSQL)
response.write Err.Number
response.end
on error goto 0

Den kode du får er noget i retning af -21657532 (jeg kan ikke huske den pt.)

Når du så på din rigtige side skal indsætte brugeren gør du således:

strSQL = "INSERT INTO ..."
on error resume next
obj.execute(strSQL)
if Err.Number = -21657532 then
response.write "Du er allerede i databasen"
else
response.write "noget andet"
end if
on error goto 0


Jesper Stocholm
http://stocholm.dk

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

MacMan (22-10-2001)
Kommentar
Fra : MacMan


Dato : 22-10-01 17:11

I brevet "9r0jts$h5$1@sunsite.dk" skrev Jesper Stocholm (spam@stocholm.dk)
den 22/10/01 10:04:

> Den kode du får er noget i retning af -21657532 (jeg kan ikke huske den pt.)
>
> Når du så på din rigtige side skal indsætte brugeren gør du således:
>
> strSQL = "INSERT INTO ..."
> on error resume next
> obj.execute(strSQL)
> if Err.Number = -21657532 then
> response.write "Du er allerede i databasen"
> else
> response.write "noget andet"
> end if
> on error goto 0

Det er en mildest talt temmelig uelegant løsning af være afhænging af
bestemte fejl koder. Lav i stedet et opslag i databasen vha. en normalt
SELECT.

- Morten


Klaus Egebjerg (22-10-2001)
Kommentar
Fra : Klaus Egebjerg


Dato : 22-10-01 18:08

Hej Morten

Jamen det er entlig også det jeg har forsøg ed følgende:

strQ = "Select Navn From Bryggere Where Email = strEmail"
If strQ <> " " Then
objRS.Update
Else
Response.Write ("Tror du ikke du har fået en hjemmebryg for meget")
End IF

Kan du se hvor det går galt ?

Klaus


--
Med venlig hilsen

Klaus Egebjerg
Brygladen I/S
www.brygladen.dk
info@brygladen.dk

"MacMan" <nospam@nospam.com> wrote in message
news:B7FA11A3.B812%nospam@nospam.com...
> I brevet "9r0jts$h5$1@sunsite.dk" skrev Jesper Stocholm (spam@stocholm.dk)
> den 22/10/01 10:04:
>
> > Den kode du får er noget i retning af -21657532 (jeg kan ikke huske den
pt.)
> >
> > Når du så på din rigtige side skal indsætte brugeren gør du således:
> >
> > strSQL = "INSERT INTO ..."
> > on error resume next
> > obj.execute(strSQL)
> > if Err.Number = -21657532 then
> > response.write "Du er allerede i databasen"
> > else
> > response.write "noget andet"
> > end if
> > on error goto 0
>
> Det er en mildest talt temmelig uelegant løsning af være afhænging af
> bestemte fejl koder. Lav i stedet et opslag i databasen vha. en normalt
> SELECT.
>
> - Morten
>



Jesper Stocholm (22-10-2001)
Kommentar
Fra : Jesper Stocholm


Dato : 22-10-01 20:42

Klaus Egebjerg wrote in news:kxYA7.6$BZ1.1011@news000.worldonline.dk:

> Hej Morten
>
> Jamen det er entlig også det jeg har forsøg ed følgende:
>
> strQ = "Select Navn From Bryggere Where Email = strEmail"

Din opbygning af SQL-strengen er forkert. Prøv evt med.

strEmail = request.form("email")
strQ = "SELECT Navn FROM Bryggere WHERE Email = '" & strEmail & "';"

> If strQ <> " " Then

men dette kan du ikke checke noget i databasen med. Du checker på, om strQ
er lig " " - men den vil altid være mindst "SELECT Navn FROM Bryggere WHERE
Email ='"

> objRS.Update

jeg er ikke helt sikker på Recordset-måden at løse det på ... men hvis du
vil gøre det på Mortens måde, så skal du forespørge serveren med den SQL du
laver herovenfor. Du skal så checke på, om den record du får tilbage er tom
eller ej. Jeg mener, at det fx kan gøres med

if isnull(objRS("navn")) then
something
else
somethingelse
end if

--
I wrote to George W. Bush - see why at
http://stocholm.dk/emailgeorgewbush.asp
- Jesper Stocholm - http://stocholm.dk

Anders Holbøll (22-10-2001)
Kommentar
Fra : Anders Holbøll


Dato : 22-10-01 18:57

MacMan wrote:
> Jesper Stocholm skrev:
> > strSQL = "INSERT INTO ..."
> > on error resume next
> > obj.execute(strSQL)
> > if Err.Number = -21657532 then
> > response.write "Du er allerede i databasen"
> > ...
>
> Det er en mildest talt temmelig uelegant løsning af være
> afhænging af bestemte fejl koder. Lav i stedet et opslag i
> databasen vha. en normalt SELECT.

Det er måske ikke så smukt med et magic number, men så kan man jo blot
kigge i dokumentationen (
http://msdn.microsoft.com/library/en-us/ado270/htm/mdcsterrorvalueenum.asp
) og det er da klart bedre end den race condition, der ellers ville
forekomme. Hvis vi ikke vil låse hele applicationen (og det vil vi
ikke), så er databasen den eneste, der ved om der opstår en konflikt.

--
Anders

Jesper Stocholm (22-10-2001)
Kommentar
Fra : Jesper Stocholm


Dato : 22-10-01 20:35

MacMan wrote in news:B7FA11A3.B812%nospam@nospam.com:

> I brevet "9r0jts$h5$1@sunsite.dk" skrev Jesper Stocholm
> (spam@stocholm.dk) den 22/10/01 10:04:
>
>> Den kode du får er noget i retning af -21657532 (jeg kan ikke huske
>> den pt.)
>>
>> Når du så på din rigtige side skal indsætte brugeren gør du således:
>>
>> strSQL = "INSERT INTO ..."
>> on error resume next obj.execute(strSQL)
>> if Err.Number = -21657532 then
>> response.write "Du er allerede i databasen" else
>> response.write "noget andet"
>> end if
>> on error goto 0
>
> Det er en mildest talt temmelig uelegant løsning af være afhænging af
> bestemte fejl koder. Lav i stedet et opslag i databasen vha. en normalt
> SELECT.
>

hmrf ... :) ... kan du ikke forklare mig, hvordan det kan være mere
effektivt at lede efter en værdi i en tabel - og potentielt returnere denne
værdi til serveren - end det er at forsøge at indsætte - og derefter
returnere en integer til serveren ?

.... og nu er det heller ikke en hvilken som helst værdi jeg matcher på ...
det er værdien for fejlen "duplicate primary key" ... og den er så vidt jeg
ved konstant (ved brug af samme db-backend).

--
- Jesper Stocholm - http://stocholm.dk

Klaus Egebjerg (22-10-2001)
Kommentar
Fra : Klaus Egebjerg


Dato : 22-10-01 21:56

Det virker - Tak for hjælpen

Klaus Egebjerg

"Jesper Stocholm" <spam@stocholm.dk> wrote in message
news:Xns9142DB9A5927Espamstocholmdk@192.38.208.81...
> MacMan wrote in news:B7FA11A3.B812%nospam@nospam.com:
>
> > I brevet "9r0jts$h5$1@sunsite.dk" skrev Jesper Stocholm
> > (spam@stocholm.dk) den 22/10/01 10:04:
> >
> >> Den kode du får er noget i retning af -21657532 (jeg kan ikke huske
> >> den pt.)
> >>
> >> Når du så på din rigtige side skal indsætte brugeren gør du således:
> >>
> >> strSQL = "INSERT INTO ..."
> >> on error resume next obj.execute(strSQL)
> >> if Err.Number = -21657532 then
> >> response.write "Du er allerede i databasen" else
> >> response.write "noget andet"
> >> end if
> >> on error goto 0
> >
> > Det er en mildest talt temmelig uelegant løsning af være afhænging af
> > bestemte fejl koder. Lav i stedet et opslag i databasen vha. en normalt
> > SELECT.
> >
>
> hmrf ... :) ... kan du ikke forklare mig, hvordan det kan være mere
> effektivt at lede efter en værdi i en tabel - og potentielt returnere
denne
> værdi til serveren - end det er at forsøge at indsætte - og derefter
> returnere en integer til serveren ?
>
> ... og nu er det heller ikke en hvilken som helst værdi jeg matcher på ...
> det er værdien for fejlen "duplicate primary key" ... og den er så vidt
jeg
> ved konstant (ved brug af samme db-backend).
>
> --
> - Jesper Stocholm - http://stocholm.dk



Jesper Stocholm (23-10-2001)
Kommentar
Fra : Jesper Stocholm


Dato : 23-10-01 15:13

Jesper Stocholm wrote in
news:Xns9142DB9A5927Espamstocholmdk@192.38.208.81:

> hmrf ... :) ... kan du ikke forklare mig, hvordan det kan være mere
> effektivt at lede efter en værdi i en tabel - og potentielt returnere
> denne værdi til serveren - end det er at forsøge at indsætte - og
> derefter returnere en integer til serveren ?
>
> ... og nu er det heller ikke en hvilken som helst værdi jeg matcher på
> ... det er værdien for fejlen "duplicate primary key" ... og den er så
> vidt jeg ved konstant (ved brug af samme db-backend).
>

hvis man arbejder med et stort site med mange besøgende, så bør man måske
overveje konklusionen i dette indlæg fra dk.edb.database

<pan.2001.10.23.15.05.28.738.1048@datanom.net>

.... desværre er Michael ikke enig med mig ... :(

--

- Jesper Stocholm - http://stocholm.dk

Søg
Reklame
Statistik
Spørgsmål : 177554
Tips : 31968
Nyheder : 719565
Indlæg : 6408855
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste