Avatar billede zaydn Nybegynder
22. september 2008 - 13:41 Der er 12 kommentarer

Når en uerfaren prøver :o)

Hej

Er der nogen der kan tilrette dette så det virker?

Jeg får nogle værdier "post" fra noget flash og det skal så lige behandles lidt inden det skal i databasen.

Jeg forsøger at tælle på hvor mange gange email adressen findes i databasen. 0 gange "insert" på normal vis, hvis den findes skal der "update" ved at tælle antal 1 op. Dette må ske op til 25 gange.

Hvis jeg fjerner hele count delen fungerer det hele fint!

Connectionstring og DoQuotes er sat op i seperat fil.

Er der nogle eksperter der kan hjælpe?  :o)



    dim checkSQL
    dim rs
    dim sAntal
    dim sUge
    dim sSQL
    dim sNavn
    dim sEmail
    dim sNyhed
    dim sCompetition
   
    if Request.Form <> "" then   
        sNavn = Request.Form("navn")
        sEmail = Request.Form("email")
        sNyhed = Request.Form("nyhed")
   
    sCompetition = "test"
        sUge = "39"
    sAntal = "1"


   
    checkSQL = "SELECT COUNT (Email) FROM Results WHERE Email=" & sEmail
    set rs = cnnTarget.execute(checkSQL)   
   
   
          if rs = 0 then
            sSQL = "INSERT INTO Results (Navn, Email, Nyhedsbrev, Antal, Uge, Konkurrence) VALUES ("
            sSQL = sSQL & "'" & Left(DoQuotes(sNavn), 200) & "',"
            sSQL = sSQL & "'" & Left(DoQuotes(sEmail), 200) & "',"
            sSQL = sSQL & "'" & Left(DoQuotes(sNyhed), 50) & "',"           
            sSQL = sSQL & "'" & Left(DoQuotes(sAntal), 50) & "',"       
            sSQL = sSQL & "'" & sUge & "',"
            sSQL = sSQL & "'" & Left(DoQuotes(sCompetition), 200) & "')"
            cnnTarget.execute sSQL
            response.write("<OK />")
        else if rs > 0 and rs < 26
            sSQL = "UPDATE Results SET Antal = "rs + 1" WHERE Email= " & sEmail
            cnnTarget.execute sSQL
            response.write("<OK />")
        else
            response.write("ERROR")
        end if
       
    else
        response.write("ERROR")
    end if
       

   
    cnnTarget.close
    set cnnTarget = nothing
Avatar billede michael_stim Ekspert
22. september 2008 - 13:49 #1
Nu har jeg ikke checket alt igennem, men skal email ikke i ' eller "?
checkSQL = "SELECT COUNT (Email) FROM Results WHERE Email='" & sEmail &"'"
Avatar billede Spotgun Seniormester
22. september 2008 - 14:00 #2
Prøv at skifte SQL sætningen ud med: "SELECT COUNT(Email) AS EmailCount..." , og check på RS("EmailCount") de steder hvor du blot checker RS for en værdi.

RS er dit recordset object, og ikke den specifikke count du får retur, som findes inden i dit recordset.
Avatar billede zaydn Nybegynder
22. september 2008 - 14:15 #3
Så ser det sådan ud, men det virker forsat ikke:

<%@ Language=VBScript %>
<!--#include file="dataaccess.asp"-->
<%

    dim checkSQL
    dim rs
    dim sAntal
    dim sUge
    dim sSQL
    dim sNavn
    dim sEmail
    dim sNyhed
    dim sCompetition
   
    if Request.Form <> "" then   
        sNavn = Request.Form("navn")
        sEmail = Request.Form("email")
        sNyhed = Request.Form("nyhed")
   
    sCompetition = "test"
    sUge = "39"
    sAntal = "1"


    checkSQL = "SELECT COUNT(Email) AS EmailCount FROM Results WHERE Email='" & sEmail &"'"
    set rs = cnnTarget.execute(checkSQL)   
   
   
          if rs > 0 then
            sSQL = "INSERT INTO Results (Navn, Email, Nyhedsbrev, Antal, Uge, Konkurrence) VALUES ("
            sSQL = sSQL & "'" & Left(DoQuotes(sNavn), 200) & "',"
            sSQL = sSQL & "'" & Left(DoQuotes(sEmail), 200) & "',"
            sSQL = sSQL & "'" & Left(DoQuotes(sNyhed), 50) & "',"           
            sSQL = sSQL & "'" & Left(DoQuotes(sAntal), 50) & "',"       
            sSQL = sSQL & "'" & sUge & "',"
            sSQL = sSQL & "'" & Left(DoQuotes(sCompetition), 200) & "')"
            cnnTarget.execute sSQL
            response.write("<OK />")
        else if rs > 0 and rs < 26
            sSQL = "UPDATE Results SET Antal = " & RS("EmailCount") & " WHERE Email = '" & sEmail &"'"
            cnnTarget.execute sSQL
            response.write("<OK />")
        else
            response.write("ERROR")
        end if
       
    else
        response.write("ERROR")
    end if
       

   
    cnnTarget.close
    set cnnTarget = nothing

%>
Avatar billede Spotgun Seniormester
22. september 2008 - 14:30 #4
Så langt så godt, så mangler du bare at rette:
if rs > 0 then
til
if rs("EmailCount") > 0 then

og
else if rs > 0 and rs < 26
til
else if rs("EmailCount") > 0 and rs("EmailCount") < 26

...så vil jeg tro det virker.
Avatar billede zaydn Nybegynder
22. september 2008 - 19:58 #5
Så ser det sådan ud:

<%@ Language=VBScript %>
<!--#include file="dataaccess.asp"-->
<%

    dim checkSQL
    dim rs
    dim sAntal
    dim sUge
    dim sSQL
    dim sNavn
    dim sEmail
    dim sNyhed
    dim sCompetition
   
    if Request.Form <> "" then   
        sNavn = Request.Form("navn")
        sEmail = Request.Form("email")
        sNyhed = Request.Form("nyhed")
   
    sCompetition = "test"
'    sUge = datepart("ww", now, 2, 2)
    sUge = "39"
    sAntal = "1"


    checkSQL = "SELECT COUNT(Email) AS EmailCount FROM Results WHERE Email='" & sEmail &"'"
    set rs = cnnTarget.execute(checkSQL)   
   
   
          if rs("EmailCount") > 0 then
            sSQL = "INSERT INTO Results (Navn, Email, Nyhedsbrev, Antal, Uge, Konkurrence) VALUES ("
            sSQL = sSQL & "'" & Left(DoQuotes(sNavn), 200) & "',"
            sSQL = sSQL & "'" & Left(DoQuotes(sEmail), 200) & "',"
            sSQL = sSQL & "'" & Left(DoQuotes(sNyhed), 50) & "',"           
            sSQL = sSQL & "'" & Left(DoQuotes(sAntal), 50) & "',"       
            sSQL = sSQL & "'" & sUge & "',"
            sSQL = sSQL & "'" & Left(DoQuotes(sCompetition), 200) & "')"
            cnnTarget.execute sSQL
            response.write("<OK />")
        else if rs("EmailCount") > 0 and rs("EmailCount") < 26
            sSQL = "UPDATE Results SET Antal = " & rs("EmailCount") & " WHERE Email = '" & sEmail &"'"
            cnnTarget.execute sSQL
            response.write("<OK />")
        else
            response.write("ERROR")
        end if
       
    else
        response.write("ERROR")
    end if
       

   
    cnnTarget.close
    set cnnTarget = nothing

%>


Men der kommer forsat ikke noget i database :oS
Avatar billede Spotgun Seniormester
22. september 2008 - 20:36 #6
Prøv at udskrive RS("EmailCount") og se hvad den indeholder.
Sammenhold det evt. med hvad du har af data i databasen, som matcher din SQL og se om de to værdier stemmer overens.
Avatar billede thomas_yde Nybegynder
22. september 2008 - 22:36 #7
prøv at rette dette:
else if rs("EmailCount") > 0 and rs("EmailCount") < 26
            sSQL = "UPDATE Results SET Antal = " & rs("EmailCount") & " WHERE Email = '" & sEmail &"'"
            cnnTarget.execute sSQL

Til:
else if rs("EmailCount") > 0 and rs("EmailCount") < 24 Then
sSQL = "UPDATE Results SET Antal = " & cInt(rs("EmailCount"))+1 & " WHERE Email = '" & sEmail &"'"
            cnnTarget.execute sSQL
Avatar billede thomas_yde Nybegynder
23. september 2008 - 10:12 #8
det skal være
elseif rs("EmailCount") > 0 and rs("EmailCount") < 24
sSQL = "UPDATE Results SET Antal = " & cInt(rs("EmailCount"))+1 & " WHERE Email = '" & sEmail &"'"
            cnnTarget.execute sSQL
Avatar billede zaydn Nybegynder
23. september 2008 - 21:30 #9
<%@ Language=VBScript %>
<!--#include file="dataaccess.asp"-->
<%

    dim checkSQL
    dim rs
    dim sAntal
    dim sUge
    dim sSQL
    dim sNavn
    dim sEmail
    dim sNyhed
    dim sCompetition
   
    if Request.Form <> "" then   
        sNavn = Request.Form("navn")
        sEmail = Request.Form("email")
        sNyhed = Request.Form("nyhed")
   
    sCompetition = "test"
    sUge = "39"
    sAntal = "1"


    checkSQL = "SELECT COUNT(Email) AS EmailCount FROM Results WHERE Email='" & sEmail &"'"
    set rs = cnnTarget.execute(checkSQL)   
   
   
          if rs("EmailCount") > "0" then
            sSQL = "INSERT INTO Results (Navn, Email, Nyhedsbrev, Antal, Uge, Konkurrence) VALUES ("
            sSQL = sSQL & "'" & Left(DoQuotes(sNavn), 200) & "',"
            sSQL = sSQL & "'" & Left(DoQuotes(sEmail), 200) & "',"
            sSQL = sSQL & "'" & Left(DoQuotes(sNyhed), 50) & "',"           
            sSQL = sSQL & "'" & Left(DoQuotes(sAntal), 50) & "',"       
            sSQL = sSQL & "'" & sUge & "',"
            sSQL = sSQL & "'" & Left(DoQuotes(sCompetition), 200) & "')"
            cnnTarget.execute sSQL
            response.write("<OK />")
        elseif rs("EmailCount") > "0" and rs("EmailCount") < "26"
            sSQL = "UPDATE Results SET Antal = " & cInt(rs("EmailCount"))+1 & " WHERE Email = '" & sEmail &"'"
                    cnnTarget.execute sSQL
        else
            response.write("ERROR")
        end if
       
    else
        response.write("ERROR")
    end if
       
   
    cnnTarget.close
    set cnnTarget = nothing

%>


Virker desværre heller ikke!  :o(
Avatar billede thomas_yde Nybegynder
23. september 2008 - 21:52 #10
prøv at skriv sSQL ud. og fjern din execute
Avatar billede zaydn Nybegynder
29. september 2008 - 10:07 #11
Så virker det, skal skal prøve et svar for at kunne give point :)
Avatar billede Spotgun Seniormester
29. september 2008 - 10:16 #12
Her er et svar hvis du kunne bruge mine forslag til noget. Deler gerne med de andre deltagere i spørgsmålet.
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