Avatar billede idiotbarn Nybegynder
18. juni 2001 - 19:20 Der er 28 kommentarer og
2 løsninger

rs.EOF

...ElseIf Not Nick = rs.EOF Then
Response.Write \"Dit Nickname findes allerede.\"
Else...
Problemet er at hvis der ikke er nogle poster i ens database skriver den bare \"Dit Nickname findes allerede.\", hvordan undgår man det?
-Brian
Avatar billede tdaugaard Nybegynder
18. juni 2001 - 19:23 #1
What ? hvad bruger du Rs.EOF for ?

If Not Rs.BOF Then
  Response.Write \"Brugernavn eksisterer!
Else
  Response.Write \"Findes ikke\"
End If
Avatar billede orca Nybegynder
18. juni 2001 - 20:07 #2
Der findes garanteret en \"pænere\"  metode men denne virker.

<%
\'din connection string her

set rs = Conn.Execute(\"SELECT COUNT(brugernavnsfelt) AS recordcount FROM tabelnavn\')

If recordcount > 0 then
\'tjek om bruger findes eller ej
end if
%>

Desuden, hvorfor ikke bare lave en enkelt record i databasen fra starten? - så er du ude over det problem...

www.fotx.net/orca
Avatar billede tdaugaard Nybegynder
18. juni 2001 - 20:10 #3
orca:> Rs.BOF skal bruges her .. et COUNT(*) kald er helt unødvendigt :-)
Avatar billede icedox Nybegynder
18. juni 2001 - 20:19 #4
Jeg kender problemet godt!
Det sker fordi, :
If (rs.eof or rs.bof)  så kan den jo ikke vise
rs(\"noget\")

Derfor:  Lav en \"select * from tabel where navn=\'\" & strNavn & \"\'\"
set rs = conn.execute (sql)

if not (rs.eof or rs.bof) then \' den findes i db.
response.write \" Hallo! navnet er optaget\"
else
INSERT
J.
Avatar billede tdaugaard Nybegynder
18. juni 2001 - 20:20 #5
icedox:> .BOF er nok...
Avatar billede jakobandersen Nybegynder
18. juni 2001 - 21:56 #6
tdaugaard>> Istedet for bare at postulere at er Count kald er unødvendigt hvorfor så ikke overbevise os(dokumentation ,hastighedstests e.lign.)
Avatar billede tdaugaard Nybegynder
18. juni 2001 - 21:58 #7
moonduck:> det siger sig selv ..

1 SQL kald vs. 2 .. hvad tror du din udbyder er mest glad for hvis du har mange hits om dagen ?
Avatar billede jakobandersen Nybegynder
18. juni 2001 - 22:27 #8
Jeg kan da lave det med et kald:

Set objRS = objConn.Execute(\"SELECT COUNT(Username) WHERE username = \'\" & Request.Querystring.Item(\"username\")\")
if objRS(0) > 0 Then
\'Brugeren var der
Else
\'brugeren var der ikke
End if

\'luk og sluk Connection + RS
Avatar billede jakobandersen Nybegynder
18. juni 2001 - 22:28 #9
Jeg kan da lave det med et kald:

Set objRS = objConn.Execute(\"SELECT COUNT(Username) WHERE username = \'\" & Request.Querystring.Item(\"username\") & \"\'\")
if objRS(0) > 0 Then
\'Brugeren var der
Else
\'brugeren var der ikke
End if

\'luk og sluk Connection + RS
Avatar billede tdaugaard Nybegynder
18. juni 2001 - 22:38 #10
moonduck:> nej nej .. der kan du ikke trække nogle data ud fra tabellen (which you are missing in you SQL stmnt. BTW!) det kan du med

sql: \"SELECT * FROM tabel WHERE username=\'whatever\';\"
If rsref.BOF Then
\' no records
Else
  sname = rsfre(\"username\")
End If
Avatar billede tdaugaard Nybegynder
18. juni 2001 - 22:40 #11
hvis du skulle lave det samme ville du stadig skulle bruge 2 SQL\'s.:

Set objRS = objConn.Execute(\"SELECT COUNT(Username) WHERE username = \'\" & Request.Querystring.Item(\"username\") & \"\'\")
if objRS(0) > 0 Then
\'Brugeren var der
set ... (\"select * from tabel where username=\'...\'\")
\'udtræk data.
Else
\'brugeren var der ikke
End if
Avatar billede jakobandersen Nybegynder
18. juni 2001 - 22:44 #12
Han ville jo ikke have navnet skrevet ud.. Blot tjekke om det findes!
Avatar billede tdaugaard Nybegynder
18. juni 2001 - 22:46 #13
moonduck:> det er underordnet .. min pointe er, BRUG dog .BOF når den er der !!! For crying out loud .. how fu*king hard can it be !?
Avatar billede orca Nybegynder
18. juni 2001 - 22:47 #14
Modificeret citat fra tdaugaard\'s svar:

sql: \"SELECT * FROM tabel WHERE username=\'whatever\';\"
If rsref.BOF Then
\'Der findes ingen brugere, hermed har han fundet ud af at brugeren _ikke_ findes
Else
\'Brugeren findes! Hermed har han fundet ud af at brugeren findes...
End If

Her skriver han heller ikke noget, han finder blot ud af om brugeren findes eller ej.
Avatar billede tdaugaard Nybegynder
18. juni 2001 - 22:49 #15
orca:> yeps .. og HVIS nu at idiotbarn vil trække data ud samtidigt så dutter moonduck\'s COUNT(*) (som man BTW bruger .. og ikke COUNT(felt) da det er totalt irrelevant ..) ikke
Avatar billede jakobandersen Nybegynder
18. juni 2001 - 22:53 #16
Det var sådan set et diskret vink med en vognstang til dig.. Mange gange begrunder du ikke dine svar tilstrækkeligt og siger \"SÅDAN ER DET\" med store bogstaver, for at vi alle sammen kan lære lidt ville det være rart hvis du sagde hvorfor du gjorde lige præcis sådan istedet for sådan, er det f.eks. kunne du have sagt at det var en fordel at bruge Count da det kun returnerer en reference til et recordset med et felt (intreger) hvorimod at din select xx from xx where xx returnerer et recordset med minimum to rækker af datafelttypen varchar e.lign og derfor bruger mere af serverens hukommelse på at have dette alt for unædigt store recordset åbent i alt for lang tid..

PS: Den helt optimale løsning ville være et kald med command objektet og aflæsning af en parameter. Llæs mere om commandobjektet i ADO dokumentationen og spørg hvis der er problemer...
Avatar billede jakobandersen Nybegynder
18. juni 2001 - 22:55 #17
orca>>Uddyb hvorfor Count(felt) er totalt irrelevant, jeg syntes da det er en fordel at undgå et full tabel scan?
Avatar billede jakobandersen Nybegynder
18. juni 2001 - 22:56 #18
Hov undskyld ovenståede var til dig tdaugaard og ikke orca.
Avatar billede jakobandersen Nybegynder
18. juni 2001 - 22:57 #19
orca:> Nu holder du op :-) En select * er da ikke sagen i denne sammenhæng...
Avatar billede tdaugaard Nybegynder
18. juni 2001 - 23:01 #20
moonduck:> Jeg kender GODT til AffectedRows, tak!

SELECT COUNT(*) FROM table;
SELECT COUNT(id) FROM table;

Der er INGEN forskel. Der scannes ikke flere rows af hverken den ene eller anden måde.

ROW1: felt1 - felt2 - felt3
ROW2: felt1 - felt2 - felt3
ROW3: felt1 - felt2 - felt3

COUNT(felt1) tæller felt1 i rækker hvor en WHERE clause matcher
COUNT(*) tæller rows -||- ^

hvori ligger forskellen ? ingen steder.

SELECT COUNT(felt1) FROM table WHERE field=\'noget\';
SELECT id FROM table WHERE field=\'noget\';

COUNT() vil give dig en integer.
SELECT id.. vil give dig \'id\' feltet fra tabellen (forudsat at der er et ..) hvilket også er et talfelt.

hmm .. jeg kan ikke umiddelbart se fordel i COUNT(felt) vs. SELECT [felt] .. dog kan jeg godt COUNT(felt) vs. SELECT *..

Men hvis du samtidigt skal trække data ud .. og det kan jo godt være han vil det senere ..
Avatar billede orca Nybegynder
18. juni 2001 - 23:02 #21
Hvis nu vi lige vender tilbage til det originale spørgssmål. Brugeren vil gerne tjekke om et brugernavn findes i databasen. Til dette virker denne kode fint:

sql: \"SELECT * FROM tabel WHERE username=\'whatever\'\"
If rsref.BOF Then
\'Der findes ingen brugere, hermed har han fundet ud af at brugeren _ikke_ findes
Else
\'Brugeren findes! Hermed har han fundet ud af at brugeren findes...
End If

Idiotbarn\'s problem var bare at der skete fejl hvis databasen var tom - dette løses ved at bruge .BOF i stedet for .EOF
Avatar billede jakobandersen Nybegynder
18. juni 2001 - 23:10 #22
Tdaugaard>> Som Databaseadministrator må jeg desværre sige at det du siger om Count er fuldstængig forkert.. En Count(felt) filtrer WHERE caluse data fra og tæller hvor mange rækker den har i det nuværende rowset. En Count(*) deimod vil hvis der er data blive nødt til at lave en forespøgsel på kolonnerfor derefter at finde ud af hvilken der er Unique index og derefter tælle forekomster af denn i rowsettet.
Jeg kan sagtens se pointen i at bruge \"SELECT x,y,z \" hvis man skal bruge Dataene først

orca>> Det er jo ikke bare et spørgsmål om at finde en løsning der virker, at bruge SELECT * i denne sammenhæng er ikke bare at sende folk som mig på overarbejde, men også spild af maskinkraft. Det er rigtigt at løsningen skal virke men det er også essentielt at den er optimeret til formålet.
Avatar billede tdaugaard Nybegynder
18. juni 2001 - 23:13 #23
moonduck:> ehm .. og al denne diskution om noget du vidste i forvejen ? Se hvis nu du havde skrevet det for noget tid siden så have vi undgået denne store diskution ....

Men så må jeg jo give dig ret :-)
Avatar billede orca Nybegynder
18. juni 2001 - 23:14 #24
moonduck -> Du må ikke opfatte dette spørgssmål som om jeg ikke tror på dig eller noget. Hvad ville være bedre at bruge end Select *?
Avatar billede jakobandersen Nybegynder
18. juni 2001 - 23:15 #25
Er det ikke meningen at vi skal diskutere her på ekseperten eller skal jeg efter bare en uge i jeres selskab forlade jer igen :-(
Avatar billede tdaugaard Nybegynder
18. juni 2001 - 23:17 #26
moonduck:> jow da .. man diskuterer forskellige teknikker osv., men når nu een teknik er bedre end en anden, i en given situation, og en ved det med sikkerhed er der jo igen grund til at diskutere..
Avatar billede orca Nybegynder
18. juni 2001 - 23:17 #27
vil du ikke nok? plz! ;o)))
Avatar billede jakobandersen Nybegynder
18. juni 2001 - 23:23 #28
orca>>Det håber jeg ikke du mener, jeg har da bidraget med lidt godt hist og pist. Bl.a. har jeg fået løst et DB-problem for tdaugaard.. Og fra plads ca. 4000 til 382 siden i onsdags(svjh.) må da betyde at jeg har hjulpet nogle folk...
Avatar billede orca Nybegynder
19. juni 2001 - 00:56 #29
hehe... jeg lavede også en tre-mundet smiley (;o)))) bagved... Det var en joke :)
Avatar billede icedox Nybegynder
19. juni 2001 - 07:51 #30
Sikke en dejlig diskussion for alle 15 points :)
Jeg står med Icedox & tdaugaard. hihihihihihi
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

IT-JOB

Netcompany A/S

IT Consultant

Capgemini Danmark A/S

Java Engineer

Forsvarsministeriets Materiel- og Indkøbsstyrelse

DevOps Engineer (AI) til Forsvarets nye IT-platform