Avatar billede thomas-k Nybegynder
27. september 2008 - 16:06 Der er 12 kommentarer og
1 løsning

Form tjek i database

Jeg har en access database, hvor jeg har en kolonne defineret som en tal datatype som jeg kalder indeks.

Jeg har lavet en form der ser sådanne ud:
Response.write "<input size='76' type='text' name='indeks'>"

Jeg jeg skal indsætte i databasen, vil jeg gerne tjekke om en tilsvarende værdi allerede findes i kolonnen indeks. Dette gør jeg således:

strSQL = "Select * From db"
Set rs = Conn.Execute(strSQL)
indeks = Upload.Form("indeks")
Do While Not rs.EOF
if indeks = rs("indeks") THEN
response.write "Indekset findes allerede"
end if
rs.MoveNext
Loop

- men ovenstående virker kun hvis kolonnen indeks f.eks. er af datatypen tekst, og ikke tal. Hvorledes kan jeg få ovennævnte til at virke, hvis kolonnen skal forblive en tal datatype?
Avatar billede w13 Novice
27. september 2008 - 16:46 #1
Du kan bare rette:

if indeks = rs("indeks") then

til:

if cstr(indeks) = cstr(rs("indeks")) then

Så sikres, at der bruges string.

Derudover er det en meget tung løsning, du bruger, hvis der er mange poster i databasen. Normalt vil man bare tjekke det med SQL-sætningen:

"SELECT id FROM db WHERE indeks = '"&indeks&"'"
Avatar billede thomas-k Nybegynder
27. september 2008 - 22:23 #2
Tak for svaret w13. Men forstår ikke helt dit forslag med select sætningen. Jeg er vel stadig nødt til at gøre nedenstående:

strSQL = "SELECT id FROM db WHERE indeks = '"&indeks&"'"
Set rs = Conn.Execute(strSQL)
indeks = Upload.Form("indeks")
Do While Not rs.EOF
if indeks = rs("indeks") THEN
response.write "Indekset findes allerede"
end if
rs.MoveNext
Loop

- er fordelen så her at jeg kun tjekker på kolonnen indeks i stedet for alle kolonner?
Avatar billede thomas-k Nybegynder
27. september 2008 - 23:00 #3
- smider du i øvrigt ikke et svar.
Avatar billede w13 Novice
28. september 2008 - 12:26 #4
Nej, hvis du tjekker i SQL-sætningen efter poster, hvor indeks = '"&indeks&"', så får du jo kun returneret dem, hvor indeks = '"&indeks&"' :)

Og på den måde er der jo ingen grund til bagefter at løbe dem igennem og tjekke med:
if indeks = rs("indeks") then
Det blev jo gjort i SQL'en.

Du kan derimod bare teste med .EOF

For hvis der blev fundet noget, vil .EOF være false - og så ved du, at indeks fandtes i databasen.
Ellers vil .EOF være true.

Du kan faktisk bare skrive det sådan her:

if Conn.Execute("SELECT id FROM db WHERE indeks = '"&indeks&"'").EOF then
  Response.Write "Indekset findes allerede!"
end if

Grunden til, at jeg henter "id" (i "SELECT id") er at hvis man bare henter det hele (med "SELECT *"), vil det selvfølgelig tage længere tid.

Og her er et svar. =)
Avatar billede w13 Novice
28. september 2008 - 12:27 #5
Hov, jeg mente:

if not Conn.Execute("SELECT id FROM db WHERE indeks = '"&indeks&"'").EOF then
  Response.Write "Indekset findes allerede!"
end if
Avatar billede thomas-k Nybegynder
28. september 2008 - 13:23 #6
ahh, ok. Tak for en god forklaring.
Avatar billede w13 Novice
28. september 2008 - 13:24 #7
Og tak for points. =)
Avatar billede thomas-k Nybegynder
28. september 2008 - 14:22 #8
Det var så lidt. Hvis jeg nu gerne vil have 2 kriterier med i forespørgelsen, hvorledes kan jeg så gøre dette. Jeg har prøvet med følgende uden held:

if not Conn.Execute("SELECT id FROM db WHERE indeks = '"&indeks&"' AND indeksfarve = '"&indeksfarve&"'").EOF then

- men den tager stadig kun det første kriterie med i forespørgelsen. Hvad gør jeg forkert?
Avatar billede w13 Novice
28. september 2008 - 14:42 #9
Det er ellers rigtigt lavet. Noget andet må være galt.
Avatar billede thomas-k Nybegynder
28. september 2008 - 15:05 #10
Ja ikke. Nå, jeg må bakse lidt med det og se om jeg kan få det til at spille.
Avatar billede thomas-k Nybegynder
28. september 2008 - 17:24 #11
Har fundet ud af at det er min indeks forespørgelse som fejler, da denne som sagt er af datatypen tal. Hvorledes kan jeg dreje denne, når jeg ikke kan anvende cstr i SQL forespørgelsen?
Avatar billede w13 Novice
28. september 2008 - 17:40 #12
Du kan nok bare fjerne apostrofferne '
Avatar billede thomas-k Nybegynder
28. september 2008 - 17:51 #13
Sørme ja. Tusind tak igen igen... Nu virker alt som det skal.
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