Avatar billede chrisrj Forsker
31. august 2002 - 16:26 Der er 54 kommentarer og
1 løsning

Timeout problem

Jeg har noget kode som ellers virker fint, men nu da jeg har ændret på det, virker det ikke mere...

Jeg har en form med nogle data jeg har hentet fra db, brugeren kan så opdatere disse dataer og/eller oprette nye og gemme dem igen.

Men når der trykkes på gem, kommer der en timeout, og vi taler her om 2(!) dvs. to poster der skal opdateres!!

Dette vil nok sige at der er fejl i min kode.

Og tadaa... her er den så:

if request.querystring("knap")="Opdater profil" then
tal = 1
SQLservice = ""
opdater = false
antal_felter = request.form("antal")
    response.write antal_felter & "<br>"
    for i = 1 to antal_felter
        service = Request.form("service"& i)
        konto = Request.form("konto"& i)
        pris_service = Request.form("pris-service"& i)
        servicesid = Request.form("serviceid")
        opslag.movefirst
        do while not opslag.eof
        if opslag("id") = servicesid then
            opdater = true
        else
        end if
        loop
        if opdater = false then
            SQLservice = SQLservice & "insert into services (service, konto, brugerid, [pris-service]) values('" & service & "', " & "'" & konto & "', " & "'" & id & "', " & "'" & pris_service & "');"
        else
            SQLservice = SQLservice & "update services set service='" & service & "', konto='" & konto & "', brugerid='" & id & "', [pris-service]='" & pris_service & "' where id=" & servicesid &";"
        end if
        opdater = false
        response.write sqlservice & "<br>"
    next

Hvad er der galt med min kode??
Avatar billede eagleeye Praktikant
31. august 2002 - 16:44 #1
Der mangler en movenext i dette loop:

        do while not opslag.eof
        if opslag("id") = servicesid then
            opdater = true
        else
        end if
        loop


Sådan her:
        do while not opslag.eof
        if opslag("id") = servicesid then
            opdater = true
        else
        end if
        opslag.MoveNext
        loop
Avatar billede eagleeye Praktikant
31. august 2002 - 16:45 #2
For at optimere mere på tid ville jeg også lave en exit do inde i if sætningen når du har fundet ID'et for ikke at løbe resten af dit recordset igennem når man ved man har fundet ud af man skal updater og ikke indsætte sådan her:


        if opslag("id") = servicesid then
            opdater = true
            exit do
        else
        end if
Avatar billede chrisrj Forsker
31. august 2002 - 16:53 #3
Stort!! det virker!!!

Men der er en fejl i min sql:

update services set service='oral', konto='', brugerid='12', [pris-service]='500' where id=7, 8;update services set service='testeron', konto='', brugerid='12', [pris-service]='2000' where id=7, 8;

Som du kan se står der "id=7, 8" !?!?
Avatar billede eagleeye Praktikant
31. august 2002 - 16:54 #4
Skal denne som hender ID ikke hogså havde & i på så den kun hendter en ID??

servicesid = Request.form("serviceid" & i)
Avatar billede chrisrj Forsker
31. august 2002 - 16:57 #5
nej, id kommer fra db og er unik
Avatar billede chrisrj Forsker
31. august 2002 - 16:58 #6
sorry!!

du har ret.
Avatar billede chrisrj Forsker
31. august 2002 - 17:00 #7
nu er id det samme i begge update's...
Avatar billede eagleeye Praktikant
31. august 2002 - 17:06 #8
Det virker underligt... de skulle da være forskellige, når de hentes en af gangen er de to SQL sætninger helt ens eller er det kun id som er ens.
Avatar billede chrisrj Forsker
31. august 2002 - 17:08 #9
det er godt nok lidt flovt det her.... jeg havde skrevet 1 istedet i... :(

Hvor dum kan man være....
Avatar billede chrisrj Forsker
31. august 2002 - 17:21 #10
Men, hvordan får jeg den til at lave en insert?

Når jeg laver en ny post, kommer der ikke en insert med sql strengen.
Avatar billede chrisrj Forsker
31. august 2002 - 20:08 #11
Hvaa' er du gået i seng eller noget??
Avatar billede eagleeye Praktikant
31. august 2002 - 20:12 #12
Nej... hmm jeg har ikke fået mail fra eksperten de sidte timer hmmm så det måske derfor jeg syntes det har været en stille dag :)

Får du to updates ???
Avatar billede chrisrj Forsker
31. august 2002 - 20:16 #13
Det sidste jeg har fået er kl. 20:15, vedr din kommentar. :-)
Såå, ja! det gør jeg.

Hvad siger du til mit "nye" problem?
Avatar billede eagleeye Praktikant
31. august 2002 - 20:22 #14
Nå mit spørgsmål var til om du får to UPDATE og inden INSERT eller kun en UPDATE?
Avatar billede chrisrj Forsker
31. august 2002 - 20:26 #15
Nååh, ;-)

Jeg har 2 poster der bliver UPDATE'et og så laver jeg en ny, der skal INSERT'es

Den laver fint UPDATE, men der er ikke skyggen af en INSERT..
Avatar billede eagleeye Praktikant
31. august 2002 - 20:30 #16
PAsser antal_felter med 2 ?? måske den kun var 1 hvis der kun var en record som skulle opdateres.-
Avatar billede eagleeye Praktikant
31. august 2002 - 20:32 #17
Hvis den ikke kommer med når du udskriver SQL sætningen så må der være noget andet for det bliver enten til en INSERT eller UPDATE med :
if opdater = false then
Avatar billede chrisrj Forsker
31. august 2002 - 20:46 #18
Antal_felter blev ikke talt rigtigt op. Det gør den nu, men den laver ikke en INSERT til sidst som den skal, men en UPDATE istedet.

Det er som om den ikke registrere:

.
.
.
->opdater = false
response.write sqlservice & "<br><br>"

Men det må den jo gøre siden RESPONSE'n bliver udskrevet.
Avatar billede eagleeye Praktikant
31. august 2002 - 20:48 #19
Hvad er  servicesid  lig i den hvor den skulle lave en INSERT ??
Avatar billede chrisrj Forsker
31. august 2002 - 20:51 #20
den er tom dvs. =""
Avatar billede chrisrj Forsker
31. august 2002 - 20:54 #21
servicesid er autonummer id fra services tabellen.

derfor er den tom...
Avatar billede eagleeye Praktikant
31. august 2002 - 20:57 #22
Den må kommer ind og sætte opdater til true ellers skulle den jo lave en INSERT. ID i din database er autonumemr??
Så det virker lidt underlidt at den får ID til at være =""...
Avatar billede eagleeye Praktikant
31. august 2002 - 20:59 #23
HVad vis du prøver at udskrive servicesid lige efter den er hendte fra formen og se hvad den skriver..

Response.write "servicesid = " & servicesid
Avatar billede chrisrj Forsker
31. august 2002 - 21:03 #24
Jeg tror du har misforstået problem lidt:

Det jeg vil, er at opdater OG indsætte i db på samme tid, via samme form og samme sql-kald.

Derfor er servicesid lig med ingenting i tre af mine indtastnings felter, da de jo IKKE findes i db.
Avatar billede eagleeye Praktikant
31. august 2002 - 21:09 #25
Måske men du skriver du får en uvendtet UPDATE i SQL strengen hvor du skulle havde haft en INSERT... Det som afgøre om det er INSERT eller UPDATER er denne if sætning:

if opdater = false then
  INSERT
else
  UPDATE
end if


Det eneste sted hvor opdater bliver sat til true er når servicesid findes i recordsetet opslag("id") .... Det kunne så tyde på at servicesid ikke var tom "" afligevel.
Avatar billede eagleeye Praktikant
31. august 2002 - 21:10 #26
Så prøv at at tilføje et tjek på servicesid inden do...:


        servicesid = Request.form("serviceid")
        if isNumeric(servicesid) then
        opslag.movefirst
        do while not opslag.eof
        if opslag("id") = servicesid then
            opdater = true
        else
        end if
        opslag.MoveNext
        loop
        end if
Avatar billede chrisrj Forsker
31. august 2002 - 21:11 #27
Jeg har afprøvet din "Response.write "servicesid = " & servicesid" og den skriver den korrekt ud.
Dvs. der er et tal ved de 2 der skal opdateres og intet tal ved de/den der skal indsættes.
Avatar billede chrisrj Forsker
31. august 2002 - 21:15 #28
YYEESSS jeg fandt ud af det!!!!
Avatar billede chrisrj Forsker
31. august 2002 - 21:16 #29
Her er løsningen:

if servicesid <> "" then
    SQLservice = SQLservice & "update services set service='" & service & "', kondom='" & kondom & "', brugerid='" & id & "', [pris-service]='" & pris_service & "' where id=" & servicesid &";"
else
    SQLservice = SQLservice & "insert into services (service, kondom, brugerid, [pris-service]) values('" & service & "', '" & kondom & "', '" & id & "', '" & pris_service & "');"
end if

dvs. bare teste på servicesid... smukt ikke? ;-)
Avatar billede eagleeye Praktikant
31. august 2002 - 21:16 #30
jeps...
Avatar billede eagleeye Praktikant
31. august 2002 - 21:18 #31
Hvis du ikke skal bruge nogel oplysniger fra tabellen  opslag("id")  og servicesid kommer fra samme tabel er det bedre på den sidste måde ...
Avatar billede chrisrj Forsker
31. august 2002 - 21:19 #32
Det skal jeg ikke.

Men ;-)

Nu har jeg et andet problem...
Avatar billede eagleeye Praktikant
31. august 2002 - 21:20 #33
Ja..?
Avatar billede eagleeye Praktikant
31. august 2002 - 21:21 #34
AT den indsætter i databasen selv for de felter som man ikke har indtastet noget i ??
Avatar billede chrisrj Forsker
31. august 2002 - 21:23 #35
næ! :-)

at der er et semikolon efter den sidst sætning... Men jeg tror jeg ved hvad jeg skal gøre.... :-)
Avatar billede eagleeye Praktikant
31. august 2002 - 21:25 #36
Hvis det altid skal fjeren altså det sidste ; så kan du bruger left.:

SQLservice = Left(SQLservice, len(SQLservice)-1)
Avatar billede chrisrj Forsker
31. august 2002 - 21:28 #37
hmm, jeg må have glemt hvordan man laver en INSERT.

Er det ikke sådan:

insert into services (service, konto, brugerid, [pris-service]) values('test', 'Med', '12', '654')
Avatar billede chrisrj Forsker
31. august 2002 - 21:29 #38
den siger:

"Der er fundet tegn efter slutningen af SQL-sætningen."
Avatar billede eagleeye Praktikant
31. august 2002 - 21:33 #39
Jo det ser rigtigt ud .. Der skal ikke ' omkring tal, men det giver en helt anden fejl så jeg antger det er rigtigt.
Avatar billede eagleeye Praktikant
31. august 2002 - 21:34 #40
Bruger du Access ?
Avatar billede chrisrj Forsker
31. august 2002 - 21:34 #41
ja
Avatar billede eagleeye Praktikant
31. august 2002 - 21:35 #42
Access understytter ikke flere SQL sætninger i samme SQL streng...

Så.. "UPDATE ... ;INSERT ... "  virker ikke. Man skal udføre en afgangen.
Avatar billede chrisrj Forsker
31. august 2002 - 21:37 #43
nej, nej... det er ikke rigtigt???

mand, SÅDAN NOGET L*** :-(
Avatar billede chrisrj Forsker
31. august 2002 - 21:38 #44
Jamen, hov! Det passer ikke!!

Det virker da når jeg bare har haft 2 UPDATEs!!
Avatar billede eagleeye Praktikant
31. august 2002 - 21:41 #45
har du fjernet det sidste ; det kan være det skal med afligevel... Jeg har eller ikke kunne få det til at virker med Access97.
Avatar billede chrisrj Forsker
31. august 2002 - 21:41 #46
Jeg bruger Access 2000...
Avatar billede eagleeye Praktikant
31. august 2002 - 21:42 #47
Det kan være der er håb forude for Access :)

Havde du det sidste ; med ??
Avatar billede chrisrj Forsker
31. august 2002 - 21:46 #48
jeg har prøvet både med og uden og det virker ikke. Hvordan det var dengang, kan jeg desværre ikke huske. Men jeg tror det var med...
Avatar billede eagleeye Praktikant
31. august 2002 - 21:49 #49
Jeg har lige prøvet igen og selv med to UPDATE i samme kommer fejlen:

Characters found after end of SQL statement.

Og begge UPDATEs virker hver for sig..
Avatar billede chrisrj Forsker
31. august 2002 - 21:49 #50
ok, det kan da godt være jeg husker forkert...
Avatar billede chrisrj Forsker
31. august 2002 - 21:53 #51
jeg må nok bide i det sure æble og lave 1.000.000 enkelt kald til db'en...

Jeg siger mange tak for hjælpen!!

Det er ærgeligt at der ikke er mulighed for at gøre andre brugere til "Æres-eksperter".

Min stemme ville tilfalde dig!!! :-)
Avatar billede eagleeye Praktikant
31. august 2002 - 21:57 #52
Ja der er nok ikke nogen anden udvej...

Mange tak :)
Avatar billede chrisrj Forsker
31. august 2002 - 22:01 #53
Selv tak, Æres-ekspert. (bukker ydmygt) :-)

Forresten, hvis jeg liige må snige et tillægs spørgsmål ind?

Hvorledes laver man det så en bestemt "option", i en select på en form, er valgt ud fra hvad der står i db?

Hvis vi går ud fra denne select:

<SELECT name="konto<%=tal%>">
    <option value="">Med eller uden</option>
    <option value="">-------------------</option>
    <option value="Med">Med konto</option>
    <option value="Uden">Uden konto</option>
    <option value="Ikke relevant">Ikke relevant</option>
</select>
Avatar billede eagleeye Praktikant
31. august 2002 - 22:06 #54
kommer Value og beskrivelse fra en database ?? så kan man flette det ind i et loop eller må man for hvor linie tjekke om recordset tilsvarne kolonne er = den value vil sætte i value:


<SELECT name="konto<%=tal%>">
    <option value="">Med eller uden</option>
    <option value="">-------------------</option>
    <option value="Med"
<% if rs("kolonnenavn") = "Med" then Response.write " SELECTED " %>
      >Med konto</option>
    <option value="Uden"
<% if rs("kolonnenavn") = "Uden" then Response.write " SELECTED " %>
      >Uden konto</option>
    <option value="Ikke relevant"
<% if rs("kolonnenavn") = "Ikke relevant" then Response.write " SELECTED " %>
      >Ikke relevant</option>
</select>
Avatar billede chrisrj Forsker
31. august 2002 - 22:11 #55
Stort!!!! det virker perfekt!!!

Tak Æres-ekspert!! (bukker endnu engang ydmygt) :-)
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