18. juni 2001 - 19:20Der 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
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
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
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
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.
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
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...
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
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.
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 ....
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..
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...
Sikke en dejlig diskussion for alle 15 points :) Jeg står med Icedox & tdaugaard. hihihihihihi
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.