31. januar 2008 - 22:40Der er
15 kommentarer og 1 løsning
når rækken ikke eksisterer
Jeg bruger en sql sætning der bruger en where id=. Det er dog ikke altid id'en findes i databasen. Dette giver en fejl. Hvordan kan jeg tjekke om det eksisterer inden jeg udfører forespørgslen.
Jeg kan ikke spørge på rs.eof førjeg har eksekveret sql sætningen, og det er ved denne eksekvering, at der kommer en fejl, hvis ID ikke findes i databasen. Måske nielles forslag kan bruges????
OK, så er et check på rs.eof den helt rigtige måde at gøre det på.
Hvis du får en fejl i det du udfører din SQL-sætning, så er det højst sandsynligt fordi der er syntaksfejl i sætningen.
Hvor sikker er du på at det er manglende data der er årsagen? Kan det f.eks. være at det id du forsøger at finde, rent faktisk ikke er et tal (en typisk fejl, er at man forsøger at sammensætte en SQL-streng med en tom værdi fra f.eks. Request.QueryString)...?
Nej det giver ingen forskel på om det er et tal eller ej. Det med at lave en count i sql virker. Men synes bare ikke det virker smart at tilgå databasen to gange. altså
sql = "SELECT count(*) AS antal FROM dinTabel WHERE id=42" Set rs = Conn.Execute(sql)
If not rs("antal") = 0 Then sql = "SELECT * FROM dinTabel WHERE id=42" Set rs = Conn.Exetecute(sql)
Det du siger giver ikke mening ifht. normal funktion, for hvis du kan lave en count på tabellen og få et resultat tilbage, kan du også lave et opslag og checke på om rs.eof er sand. Derfor må din forespørgsel have en fejl, som bevirker at koden fejler på execute.
Hvad er det helt præcis for en fejl du oplever og hvad er det helt præcis for en SQL du forsøger at køre i det tilfælde koden fejler?
OK, men det sker vil først når du prøver at læse fra rs?? Og det er jo netop det du undgår at komme til ved at teste på rs.eof inden du læser noget som helst fra rs.
Er det mon fordi du ikke har set lyset ifht. hvordan det skal bruges, siden du har insisteret på, at du ikke kan bruge den foreslåede løsning...?
Dette skulle illustrere metoden:
tabel_rec = "select * from tabel where day(Dato)='" & ID & "';" set rs = objConn.execute(tabel_rec)
if not rs.eof then do while not rs.eof response.write "felt 1: " & rs(0) & "<br>" response.write "felt 2: " & rs(1) & "<br>" ' osv. osv. - du ved nok hvordan man henter de rigtige værdier ud af et recordset... rs.movenext loop else response.write "Der findes ikke nogen data for den angivne dag" end if
ok, nu virker det med rs.eof. Jeg har prøvet mange ting, så kan næsten ikke huske hvad der virkede og ikke virkede. Men mener fejlen forsvandt i forbindelse med, at jeg satte '' omkring ID nummeret. Så pointene må gå til dig softspot.
NB: Selvom der fungerer med apostrofferne omkring id'et, så vil jeg mene det er en symptombehandling på et andet problem. ID bør vel altid indeholde en gyldig talværdi, eller hvad?
Hvorom alt er, så bør du altid sikre dig, at dine variable indeholder værdier der har det rigtige format og den rigtige type, inden du sammensætter SQL-strenge, hvor variablen indgår. Jeg ved det er et stort arbejde, men alternativet er ustabile applikationer, der i værste fald sætter dine data's sikkerhed over styr og endnu værre, at personlige oplysninger om andre bliver tilgængelige for folk, som ikke burde have adgang til dem.
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.