Avatar billede sublimegirl Nybegynder
22. august 2003 - 12:10 Der er 127 kommentarer og
1 løsning

Tidsperiode på feltværdi i database

Jeg har et "true/false" felt i en access database. Default står den på "false".

Min plan er så, at jeg skriver feltet til "true" med ASP, hvorefter feltet skal skifte til "false" igen efter 1 sekund. Jeg har fundet ud af, at databasen kræves åben (http://www.eksperten.dk/spm/390935), hvis det laves i en formular i ACCESS, men jeg vil helst ikke have databasen skal være åben.

Hvordan kan jeg få feltet til at skifte til "false" efter 1 sekund ved brug af ASP?
Avatar billede nmh Nybegynder
22. august 2003 - 12:45 #1
Du kan vle bruge SetTimeOut-proceduren (jeg tror nok, det er det den hedder) til at aktivere en procedure efter det ønskede tidsrum, og derefter rette værdien i det ønskede felt
Avatar billede nmh Nybegynder
22. august 2003 - 12:47 #2
Så ideen er: du åbner og sætter værdien til true, og lukker så. Efter 1 sek startes så den procedure, der åbner og igen sætter værdien til falsk.
Avatar billede nmh Nybegynder
22. august 2003 - 12:53 #3
Avatar billede sublimegirl Nybegynder
22. august 2003 - 14:22 #4
tak nmh, jeg kigger lige nærmere på det i morgen eller mandag.
Avatar billede sublimegirl Nybegynder
25. august 2003 - 15:28 #5
nmh, det ser ret fornuftigt ud, vil lige teste om jeg kan integrere det i mit site.
Avatar billede sublimegirl Nybegynder
25. august 2003 - 15:48 #6
Jeg kan se at scriptet skal skrives en hel del om. Det som scriptet gør nu, er at tælle ned, og komme med en promtp "Time Out" når tiden er = 0. Findes der nogle scripts som ligger nærmere mit behov, eller skal jeg til at skrive scriptet lidt om? Jeg er sq ikke særlig ferm til avanceret VBScript.
Avatar billede nmh Nybegynder
25. august 2003 - 15:51 #7
Nu har jeg tænkt mere over det. Der er jo et lille problem, for hvad skal der ske, mens der ventes, og hvem er det, der skal vente?
Er det denne situation:
1. Brugeren anmoder om en asp-side.
2. Serveren behandler side:
  a) Feltet sættes til true.
  severen venter 1 sek (og hvad skal der ske her, mens der ventes??)
  b) Feltet sættes til false
  siden behandles færdig og sendes til brugeren.

eller er det dette

1. Brugeren beder om en asp-side.
2. Serveren behandler den
  a) feltet sættes til true
  siden sendes til brugeren
efter 1 sek vil et script hos brugeren bede om en ny side, uanset, hvad brugeren gør.
3. Serveren behandler den nye side.
  a) feltet sættes til false
  siden sendess til brugeren
Avatar billede nmh Nybegynder
25. august 2003 - 15:53 #8
Jeg kan sagtnes lave et script, der klarer pausen, men problemet er ventetiden, som jeg lige har skrevet. Hvem skal vente?
Avatar billede sublimegirl Nybegynder
25. august 2003 - 16:01 #9
Jeg vil tro at det er den første procedure, som vil blive bedst. Så vil der ikke opstå komplikationer, hvis nu brugeren går andre steder hen i mellemtiden... Brugeren må vente til tiden er gået, før han kan foretage sig andet.

Kan man eventuelt vise et billede (en htm-side) i mellemtiden? eller kan man eventuelt skrive "Vent mens nulstilling foretages..."

Faktisk vil jeg gerne have tiden stillet op til 30 sekunder... men det er vel underordnet?
Avatar billede sublimegirl Nybegynder
25. august 2003 - 16:12 #10
Jeg ved ikke om jeg har forstået scriptet 100% korrekt, men kunne man gøre noget lignende:

<%
'** her skriver jeg til databasen, at feltet skal skifte til "True" hvorefter timerscriptet køres:

Sub HandleTime
    if hr=0 and min=0 and sec=0 then
        EndTime
    elseif min>=0 and sec>0 then
        sec=sec-1
        status=hr & ":" & min & ":" & sec
        '**Whenever the second changes the Status of the window has to be changed.
        intTimerID=setTimeOut("HandleTime",950, "VBScript")
        '**setTimeOut function returns a unique timer id that is used to keep track of the time.
        '**When the time is up the timer id is destroyed automatically.
    elseif min>0 and sec=0 then
        min=min-1
        sec=59
        status=hr & ":" & min & ":" & sec
        intTimerID=setTimeOut("HandleTime",2850, "VBScript")
    elseif hr>=0 and min=0 then
        hr=hr-1
        min=59
        sec=59
        status=hr & ":" & min & ":" & sec
        intTimerID=setTimeOut("HandleTime",2850, "VBScript")
    end if
End Sub

Sub EndTime
'**her skriver jeg at databasen skal ændres tilbage til false
End Sub

'**1 sekund = 950 millisekunder
'**30 sek = 28500 ms
%>

Hvor jeg nødagtigt skriver "Vent...." på siden, det kan jeg ikke lige se...
Avatar billede sublimegirl Nybegynder
25. august 2003 - 16:13 #11
Jeg kigger nærmere på det i morgen fra kl ca 8.
Avatar billede nmh Nybegynder
25. august 2003 - 16:15 #12
Ok, jeg er i gang nu, og jeg vil komme med noget i løbet af aftenen.
Avatar billede nmh Nybegynder
25. august 2003 - 19:52 #13
Hvad skal du egentlig bruge pausen på på fra 1 til 30 sekunder til?

Funktionen SetTimeOut virker ikke på server-side.

Jeg kommer her med et andet forslag:

Man henter først en html-side, som fortæller, at om lidt vil asp-siden blive hentet. Når man lige har haft tid til at læse dette (3 sek f.eks), hentes asp-siden.
Sådan kunne html-siden laves:
<html>
<script language=VBscript>
Option Explicit
dim skift
sub hent
  if skift then
    self.location="ASPsiden.asp"
  end if
  skift=true
  SetTimeOut "hent",3000
end sub
</script>
<body onLoad="hent">
<h1>Vent lidt</h1>
Om 3 sekunder hentes asp-siden<p>
Den vil sætte et felt i databasen til true,<br>
den holder pause i 5 sek<br>
så sættes feltet igen til false,<br>
og html-delen sendes til brugeren.
</body>
</html>

ASP-siden kunne laves således:

<%
Sub Delay(DelaySeconds)
  dim SecCount, Sec1, Sec2
  SecCount = 0
  Sec2 = 0
  While SecCount < DelaySeconds + 1
    Sec1 = Second(Time())
    If Sec1 <> Sec2 Then
      Sec2 = Second(Time())
      SecCount = SecCount + 1
    End If
  Wend
End Sub

'Åben databasen og sæt feltet til true
'Luk databasen

Delay(5) 'Nu holdes der pause i 5 sek

'Åben databasen og sæt feltet til falsk
'Luk databasen
%>
<html>
....
</html>

Det vil belaste serveren at holde pause (den kører i en lykke og måler til stadighed tiden). Hvis det er et problem, kunne man sende en side ud til klienten istedetfor, og så lade klienten holde pausen, mens serveren gjorde nyttige ting. Når pausen var slut sendte klienten besked til serveren om at sætte databasefeltet til false igen. Ulempen ved dette er, at klienten måske bliver afbrudt, og så bliver database-feltet aldrig sat til false igen.
Avatar billede nmh Nybegynder
25. august 2003 - 19:56 #14
ups: lykke -->løkke
Avatar billede sublimegirl Nybegynder
26. august 2003 - 08:13 #15
Det er fordi jeg er igang med at lave den ene del af et system, - siden med ASP og design. Den anden side leveres af en kunde. I den anden ende ligger et system, hvor nulstilling kan foretages, når systemet opdager at feltet står til true i nogle sekunder.

Jeg ved egentligt ikke præcist hvilket system der ligger i den anden ende, men det registrerer energiforbrug i form af varmt vand, koldt vand og EL. De data kommer så ned i databasen, og dem skriver jeg så ud på et lille lokalt web, så folk kan holde øje med forbruget.

Jeg kigger lige nærmere på dit script...
Avatar billede sublimegirl Nybegynder
26. august 2003 - 14:38 #16
mnh > hvordan skulle løkken puttes ind?
Avatar billede nmh Nybegynder
26. august 2003 - 15:57 #17
Løkken: Når jeg taler om løkken,så mener jeg while-løkken i proceduren Delay(DelaySeconds) i asp-siden.
Det er her severen vil stå at køre mens tiden går (5 sek, eller hvad det nu måtte være).
Men det gør vel egentlig ikke noget. Serveren blive jo ikke hængende her i 5 sek, men vil betjene andre ind i mellem.
Hvis du vil have pausen til at være hos klienten, så skal klienten først starte en side, som sætter database-feltet til true og lukker databasen.
Klienten får så en side i hovedet, som 5 sek (det klares så med enten delay-proceduren placeret her, eller med settimeout-metoden) efter kalder en ny asp-side, der sætter database-feltet til false igen.
Ulempen her er, at brugerens maskine bliver slukket, og så bliver database-feltet aldrig sat til false.
Avatar billede sublimegirl Nybegynder
26. august 2003 - 16:27 #18
Hmmm... det kunne nu være smart nok. Selvom det nok er træls for brugeren at få en side smidt i hovedet som kun tager tid, så kunne man jeg jo måske smede et stykke kode sammen, som laver en nedtællingseffekt. Måske i javascript, - f.eks.: 20, 19, 18, 17, ... o.s.v. alt efter hvor lang tid der skal gå. Tester det lige af i aften.
Avatar billede nmh Nybegynder
26. august 2003 - 16:30 #19
Men du skal lige høre hos de andre der arbejder på projektet, om det gør noget, hvis database-feltet aldrig bliver sat tilbage til false.
Brugeren kan jo finde på at slukke for sin maskine.

Men hvis det ikke gør noget så er da let at lave en nedtællingseffekt.
Avatar billede sublimegirl Nybegynder
26. august 2003 - 16:37 #20
Kan man ikke bare skrive "Advarsel, Sluk ikke for maskinen før tiden er udløbet"? OK, jeg må lige forhøre mig.

Hvis nu jeg i stedet benyttede mig af denne procedure:
1. Brugeren beder om en asp-side.
2. Serveren behandler den
  a) feltet sættes til true
  siden sendes til brugeren
efter 1 sek vil et script hos brugeren bede om en ny side, uanset, hvad brugeren gør.
3. Serveren behandler den nye side.
  a) feltet sættes til false
  siden sendess til brugeren

Så er jeg udenom problemet, med hvis brugeren slukker maskinen - er jeg ikke?
Avatar billede sublimegirl Nybegynder
26. august 2003 - 16:39 #21
Kan man ikke også sætte en nedtællingsfunktion på den?
Avatar billede nmh Nybegynder
26. august 2003 - 16:42 #22
Jo detmed advarslen er ok, med mindre det er fatalt, hvis databsen ikke bliver opdateret.
Hvis brugeren slukker for maskinen bliver der aldrig startet et script, der kan bede om en ny side. Det er der ikke noget der kan modvirke.
Men gør det egentlig noget om serveren holder pausen?
Avatar billede sublimegirl Nybegynder
26. august 2003 - 17:50 #23
ja, det ved jeg først i morgen.

Men kunne jeg sætte en nedtællingsfunktion på metode 2?
Avatar billede nmh Nybegynder
26. august 2003 - 19:05 #24
Ja det kunne du sagtens.
Avatar billede sublimegirl Nybegynder
26. august 2003 - 20:00 #25
Ville den ikke være mere sikker mht. hvis brugeren lukker maskinen?
Avatar billede nmh Nybegynder
26. august 2003 - 20:06 #26
Jo, brugeren vil næppe lukke, hvis hun kan se, der sker noget på skærmen, men man kan jo kludre (jeg har da ved en fejltagelse kommet til at slukke for, da jeg ville tænde lyset). Hvis fejl kan ske, vil de nok ske på et tidspunkt. Hvis det er fatalt, at brugeren lukker maskinen, så er man nødt til at sørge for, at det er serveren, der holder pausen.
Avatar billede sublimegirl Nybegynder
26. august 2003 - 20:31 #27
Hvilken metode vil du så anbefale? jeg er lidt forvirret... :~}
Avatar billede nmh Nybegynder
26. august 2003 - 20:36 #28
Ja, men jeg ved jo ikke hvor vigtigt det er altid at få sat dadatbase-feltet tilbage til false.
Jeg tror jeg vil anbefale, at serveren venter. Formentlig er det jo ikke ret mange brugere der er tale om, så det skulle nok fungere.
Og så bygger systemet ikke på, om brugeren opfører sig manerligt.
Avatar billede sublimegirl Nybegynder
26. august 2003 - 20:41 #29
OK, der er max 6 klienter på systemet samtidigt. Så vidt jeg har forstået det, så er der tale om skoleklasser, opdelt i grupper, som skal foretage nogle forsøg med energiforbrug. Det er nok bedst at lave det på den måde som er sikrest...
Avatar billede nmh Nybegynder
26. august 2003 - 20:44 #30
ja bestemt. Med så få brugere burde der ikke komme problemer.
Men det er meget let at lave om.
Avatar billede sublimegirl Nybegynder
26. august 2003 - 20:46 #31
1. Brugeren anmoder om en asp-side.
2. Serveren behandler side:
  a) Feltet sættes til true.
  severen venter 1 sek (og hvad skal der ske her, mens der ventes??)
  b) Feltet sættes til false
  siden behandles færdig og sendes til brugeren.

Denne metode anvender jeg så. Det jeg nødagtigt er i tvivl om nu, er bare det med hvordan jeg får serveren til at vente i x antal sekunder, mens en tæller vil tælle nedad på siden, som brugeren kigger på...
Avatar billede nmh Nybegynder
26. august 2003 - 20:58 #32
Du kunne arbejde med frames. Så kunne du blot bede om at få udskiftet en af rammerne med asp-siden. Mens der ventes kan en af de andre rammer vise nedtælling og ting og sager.
Avatar billede nmh Nybegynder
26. august 2003 - 21:02 #33
Det kunne f.eks. styres ved at bruge settimeout i den ramme, der ikke bliver udskiftet.
Avatar billede sublimegirl Nybegynder
26. august 2003 - 21:36 #34
Pyha, er træt. Jeg vender stærkt tilbage i morgen. Torsdag morgen er deadline, så i morgen tager jeg ordentligt fat.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 12:39 #35
Kunne man ikke køre settimeout på samme side som nedtællingsuret?
Avatar billede nmh Nybegynder
27. august 2003 - 12:44 #36
Jo, man kan lade settimeout styre nedtællingsuret i en ramme, mens der ventes på at asp-siden hentes ind i en anden ramme.
Har du tænkt dig en løsning med rammer?
Avatar billede nmh Nybegynder
27. august 2003 - 12:57 #37
Her er et eksempel på en side, hvor en tæller begynder at tælle ned fra 5 til 0.
Når man starter kunne man samtidig bede om at få en anden ramme udskiftet med asp-siden.
ASP-siden skulle så dukke op nogenlunde samtidig med at nedtællingen var færdig, men der kan selvfølgelig være forsinkelser på nettet.

<html>
<script>
var N=5
function FFF(){
  alert( "Nu starter FFF")
}
function count() {
if (N==0){
    FFF()
  }else{
    tmp=setTimeout("count()",1000);
    document.getElementById('counter').innerText = N;
    N=N-1
  }
}
</script>
<body>
<input type=button value=start onClick="count()"> <p>
<div id="counter"></div>
</body>
</html>
Avatar billede sublimegirl Nybegynder
27. august 2003 - 13:08 #38
Hmm... jeg havde ikke tænkt mig en løsning med rammer. Hvordan mener du helt præcist forløbet kommer til at se ud på brugersiden med rammer?

Hvad laver <input type=button value=start onClick="count()">?


Jeg havde forestillet mig:
1) Man trykker på en knap i en form
2) Der køres en asp-script, som sætter feltet til "true" lign rs.update
3) Brugeren ser en nedtælling
4) Efter nedtællingen aktiveres et asp-script, som sætter feltet til "false"
5) Med en redirect kommer brugeren til en startside

Det punkt 3 og 4 jeg er i tvivl om... hvordan det scriptes...
Avatar billede nmh Nybegynder
27. august 2003 - 13:18 #39
<input type....>: Den satte jeg på for at teste. Trykker man på knappen starter nedtællingen.
Grunden til at jeg foreslog rammer er, at i det øjeblik hvor brugeren trykker på knappen i formen, så  man brugerens side mister evnen til at styre nedtællingen. Nu har man jo bedt om at få en ny side.
Derfor skal der være en ramme tilbage, som hele tiden har kontrollen. Denne side starter med at bede om asp-siden. Den tæller ned, og den aktivere igen en asp-side, som sætter feltet til false.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 13:36 #40
Jamen er det ikke meningen at brugeren ikke har mulighed for at styre nedtællingen? Jeg havde forestillet mig at brugeren bare fik en side med et nedtællingsur smidt i hovedet, uden mulighed for at gøre noget....
Avatar billede nmh Nybegynder
27. august 2003 - 13:46 #41
Jeg tror vi taler forbi hinanden.
Hvis det kører uden rammer og brugeren trykker på en knap, som får en asp-side til at køre, så vil brugerens side ikke kunne lave nogen form for nedtælling. Den stopper, fordi der er bedt om en ny side.
Hvis man bygger det op med rammer, så er der hele tiden en side hos brugeren, der kan styre. Det er ikke brugeren, der styrer, men siden, der tæller ned. Og det er denne side, der når nedtællingen er slut aktiverer asp-siden, som sætter feltet til false.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 13:53 #42
Okay...

Den nye side som der bliver bedt om når der trykkes på knappen, kan den ikke vise en tæller?

Når så sidens tæller har nået 0 aktiveres et nyt script som sætter feltet til "false" igen...
Avatar billede nmh Nybegynder
27. august 2003 - 13:59 #43
Jo, det var da en god ide.
Så først 1 side med en knap.
Denne knap henter asp-siden, som sætter feltet til true.
siden kommer ned og en tæller starter.
Når den slutter hentes asp-siden, der sætter feltet til false og redirecter til et eller andet.

Og den html-side, jeg sendte for lidt siden kan bruges som et udgangspunkt for tælle-ned siden.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 14:05 #44
Hvad mener du med "siden kommer ned"?

Måske er vi nået til enighed :o)
Avatar billede nmh Nybegynder
27. august 2003 - 14:07 #45
siden kommer ned:
Det var blot en måde at sige at sine kommer ned til brugeren fra serveren og starter.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 14:13 #46
YES, så er vi jo helt absolut enige om forløbet.

Det består altså af 3 dokumenter:
1) form.htm (hvor knappen er)
2) taeller_stop.asp (som viser en tæller efter at feltet er sat til "true")
3) taeller_stop.asp (som sætter feltet til "false" og redirecter)

Det er dokument 2 jeg er i tvivl om.
Hvordan får jeg lavet tælleren?
Hvordan ved serveren når der er gået x antal sekunder?
Hvordan ved serveren, at efter der er gået x antal sekunder, så skal dokument 3 hentes?
Avatar billede sublimegirl Nybegynder
27. august 2003 - 14:14 #47
undskyld, dokument 2 hedder naturligvis taeller_start.asp.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 14:20 #48
Kan man i realiteten ikke bare bruge <META HTTP-EQUIV="Refresh" CONTENT="30;URL=taeller_stop.asp">?
Avatar billede nmh Nybegynder
27. august 2003 - 14:44 #49
Jo. det vil jeg tro du også kunne gøre. jeg har ikke prøvet det.

Men her er i hvert fald noget, som kunne være udgangspunkt for taeller_start.asp. Der bliver talt ned fra 8 til 0.

<html>
<script>
var N=8
function FFF(){
  alert( "Nu hentes taeller_stop.asp")
  //skriv her den kode som henter taeller_stop.asp
  //og fjern alert-sætningen
}
function count() {
if (N==0){
    FFF()
  }else{
    tmp=setTimeout("count()",1000);
    document.getElementById('counter').innerText = N;
    N=N-1
  }
}
</script>
<body onLoad="count()">
<h1>Dette er taeller_start.asp</h1>
<h1>Når dette vises har serveren sat database-feltet til true</h1>
<h1>Når tælleren stopper hentes taeller_stop.asp</h1>
<div id="counter"></div>
</body>
</html>
Avatar billede nmh Nybegynder
27. august 2003 - 14:49 #50
Den løsning, vi nu har valgt sikrer altså ikke imod at brugeren slukker for sin maskine, og så bliver database-feltet ikke ændret tilbage til false.
Sådan som det nu kører er der ikke ventetid hos serveren.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 14:50 #51
ok, tester lige lidt.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 14:52 #52
Kan man gøre det så der er ventetid hos serveren, og alligevel samme procedure for brugeren?
Avatar billede sublimegirl Nybegynder
27. august 2003 - 14:54 #53
Ellers holder jeg mig bare det den metode vi lige er blevet enige om... så må det blive den midlertidige løsning.
Avatar billede nmh Nybegynder
27. august 2003 - 14:57 #54
ja, men det var derfor jeg begyndte at tale om frames.
Hvis brugeren beder om asp-siden, der sætter database-feltet til false, så er der ikke noget der kan tælle hos brugeren før serveren har sendt noget tilbage. Og hvis der så går 10 sek så har brugeren intet at kigge på, der tæller ned.
Men hvis der er en ramme tilbage, så er der mulighed for at skabe tælling hos brugeren, mens der ventes på at serveren bliver færdig.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 14:58 #55
ok, kan den frame så åbne som en lille pop-op side, hvor der står "Serveren arbejder"? Eller kan det kun laves i frames?
Avatar billede sublimegirl Nybegynder
27. august 2003 - 14:59 #56
undskyld jeg er lidt langsom opfattende :o)
Avatar billede nmh Nybegynder
27. august 2003 - 15:05 #57
den kunne godt åbne et sådant vindue,
men den kunne jo lige så godt vise en tælle proces.
du kunne også vise en alert-box.
Pointen er, at der skal være noget hos brugeren, der kan gøre noget. Hvis der ikke var rammer, men kun en enlig side, så er det ikke til at styre hvad der skal vises, indtil den nye side er loadet.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 15:09 #58
Kunne der være en tæller i en alertbox? Det ville jo være totalt smart!
Avatar billede nmh Nybegynder
27. august 2003 - 15:13 #59
så ville det ikke være en alertbox, men et nyt lille vindue. Det kan sikkert godt laves, men mon ikke det burde vente til en senere version. :)
Avatar billede sublimegirl Nybegynder
27. august 2003 - 15:19 #60
OK, det med en alertbox der siger Vent... er måske bedre?
Avatar billede nmh Nybegynder
27. august 2003 - 15:22 #61
det er en smagssag.
Hvis det er en alertbox, skal brugeren jo selv aktivt lukke den.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 15:24 #62
hvordan skulle proceduren se ud med med frames?
Avatar billede nmh Nybegynder
27. august 2003 - 15:51 #63
Hvis du f.eks. laver en side med 2 rammer. Så kan du lade f.eks. den venstre indeholde knap og info om aktivitet på server. Den højre kommer fra asp-siderne.
Når man trykker på knappen beder man man så om at få den anden ramme udskiftet med den asp-side på serveren, der skal gøre database-tingene. Samtidig vil den venstre side starte en tæller, eller vise en meddelelse i en box, om at serveren arbejder. Efter nogen tid (det er den tid serveren skal holde pause), vil den højre ramme være udskiftet med asp-sidens inhold.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 16:10 #64
Kunne man ikke gøre framen så lille at den ikke er til at se?
Avatar billede nmh Nybegynder
27. august 2003 - 16:11 #65
jo, det kan man. Men hvad skulle der så vises, mens der ventes på serveren får gjort sine ting?
Avatar billede sublimegirl Nybegynder
27. august 2003 - 16:15 #66
En tæller?
Avatar billede nmh Nybegynder
27. august 2003 - 16:17 #67
Ok, men så skal den tilbageværende ramme jo være stor nok, til at den kan blive vist.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 16:38 #68
Ok kan man så gøre den modsatte ramme "usynlig"? Er der ikke en af rammerne der kan gøres usynlig?
Avatar billede sublimegirl Nybegynder
27. august 2003 - 16:42 #69
Undskyld...
Hvad er forskellen i, at lave en ramme og så lave en ny (target="_blank") side hvor tælleren ligger?
Avatar billede nmh Nybegynder
27. august 2003 - 16:48 #70
Jeg er ikke helt klar over hvad du mener.
Den tomme side, skulle det være en en ramme?
Avatar billede sublimegirl Nybegynder
27. august 2003 - 16:51 #71
Du siger jo, at der skal laves frames, hvis systemet skal være sikkert,- den procedure hvor der er ventetid hos serveren...
Avatar billede sublimegirl Nybegynder
27. august 2003 - 16:53 #72
Den løsning med frames, hvordan er det helt præcist det skal køre i punkter?
Avatar billede nmh Nybegynder
27. august 2003 - 17:03 #73
ramme 1: den venstre side, ramme 2: den højre side.
1. Ramme 1 har en knap. Når man trykker bliver den højre ramme udskiftet med asp-siden (den side, der laver arbejdet med databasen, og hvor det tager tid at levere siden). Så der går måske 5 sek eller mere før der sker noget.
2. I ventetiden kan ramme 1 så f.eks. tælle ned. Når de 5 sekunder er gået kommer asp-siden så frem i højre ramme, og så har serveren gjort hvad den skulle.
3. På højre ramme står nu en besked til brugeren om hvad der videre skal ske.

Ramme 1 kunne f.eks. være så lille at man kun kan se en tæller og en knap.

Jeg vil lave nogle forsøg iaften. Nu er jeg jo blevet "grebet" af det her.
Avatar billede nmh Nybegynder
27. august 2003 - 17:07 #74
Jeg kører hjem nu. Men går "på" hjemmefra senere.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 17:12 #75
Det er ok! Vi snakkes ved senere så.
Avatar billede nmh Nybegynder
27. august 2003 - 19:36 #76
Så nu er jeg på igen, og jeg har lavet et par forsøg.
Det viser sig, at man godt kan få en side til at være aktiv og vise en tæller, også selv om man er ved at hente en asp-side.
Du kan se det i funktion ved at besøge følgende sted:
http://dlg.ghg.dk/dlg-web/test3.asp
Når du trykker på den knap, der viser sig vil en tæller begynde at tælle ned (10 sek).
Mens dette sker er serveren igang med sine ting.
Det tager også 10 sek, men det er serveren der agerer selv.
Derfor:
Lav kun 1 side, ikke noget med rammer.
Serveren sørger selv for det hele og klientens side er pæn og nydelig  med en tæller, mens der tælles ned.
Avatar billede nmh Nybegynder
27. august 2003 - 20:05 #77
Her er koden til siden test3.asp:
</html>
<html>
<script>
var N=10
function count() {
if (N==0){
    FFF()
  }else{
    tmp=setTimeout("count()",1000);
    document.getElementById('counter').innerText = N;
    N=N-1
  }
}
function Hent(){
  self.location="http://dlg.ghg.dk/dlg-web/test5.asp"
  count()
}
</script>
<body>
<input type=button value="tryk her" onClick="Hent()"><p>

<div id="counter"></div>
</body>
</html>
Avatar billede nmh Nybegynder
27. august 2003 - 20:16 #78
Med hensyn til forsinkelsen på serveren kan du bruge det jeg forslog i mit indlæg ovenfor på tidspunktet 25/08-2003 19:52:15.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 20:22 #79
Ej hvor super! Jeg har lovet lige at se FCK - Glasgow Rangers sammen med min kæreste :o) Håber FCK vinder!!!

Jeg leger med dine scripts efter kampen.
Avatar billede nmh Nybegynder
27. august 2003 - 20:29 #80
Ja, jeg sidder også og ser den.
Avatar billede nmh Nybegynder
27. august 2003 - 20:37 #81
Jeg har prøvet at have 3 browsere igang med siden test3.asp hentet ind. Jeg trykkede på de 3 knapper med nogle sekunders mellemrum, og serveren reagerede som den skulle. Det spiller altså ikke nogen rolle, om man holder pause på serveren.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 21:54 #82
Har lige plogget dit script fra 27/08-2003 20:05:37 ind på min formular side, hvad ligger der i test5.asp, som du refererer til?
Avatar billede nmh Nybegynder
27. august 2003 - 22:00 #83
har du prøvet at klikke på
http://dlg.ghg.dk/dlg-web/test3.asp
test5.asp, er den side der hentes. Det er den, der har en tidsforsinkelse på serveren på 10 sek (den er i øvrigt nu rettet og hedder test6.asp). Den indeholder netop delay-funktionen fra tidligere.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 22:04 #84
ok,
test6.asp ser altså sådan ud:

<%
Sub Delay(DelaySeconds)
  dim SecCount, Sec1, Sec2
  SecCount = 0
  Sec2 = 0
  While SecCount < DelaySeconds + 1
    Sec1 = Second(Time())
    If Sec1 <> Sec2 Then
      Sec2 = Second(Time())
      SecCount = SecCount + 1
    End If
  Wend
End Sub

'Åben databasen og sæt feltet til true
'Luk databasen

Delay(5) 'Nu holdes der pause i 5 sek

'Åben databasen og sæt feltet til falsk
'Luk databasen
%>
<html>
....
</html>
Avatar billede sublimegirl Nybegynder
27. august 2003 - 22:05 #85
Det ser godt ud på: http://dlg.ghg.dk/dlg-web/test3.asp, det er lige sådan noget i den stil jeg har forestillet mig.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 22:19 #86
Hmm... det fungerer fint, indtil den har talt ned til 0, - så forsvinder siden - og bliver helt blank. Måske skal der en redirect i bunden af delay-siden?
Avatar billede nmh Nybegynder
27. august 2003 - 22:29 #87
Du skal sørge for at sende noget html-kode ud til brugeren.
Det kunne være noget redirect, men det kunne også være siden med delay, der endte med en html-side.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 22:32 #88
jeg lagt en redirect på, så nu går det som smurt, bortset fra at ... jeg ikke rigtigt kan få det tilpasset til 30 sekunder. Skal jeg ikke ændre i begge scripts sådan her:

Delay(30)

og

var N=30
function count() {
if (N==0){
    FFF()
  }else{
    tmp=setTimeout("count()",3000);
    document.getElementById('counter').innerText = N;
    N=N-1
  }
}
function Hent(){
  self.location="delay.asp"
  count()
}

?
Avatar billede sublimegirl Nybegynder
27. august 2003 - 22:33 #89
Der kommer nemlig syntaxfejl, når jeg gør det på den måde...
Avatar billede sublimegirl Nybegynder
27. august 2003 - 22:36 #90
falsk alarm, det med syntaxfejlene, var en tastefejl.

Men den tæller temmelig langsomt... måske er 30 sekunder lige i overkanten?
Avatar billede sublimegirl Nybegynder
27. august 2003 - 22:41 #91
ok, delay skal bare se sådan ud:

var N=30
function count() {
if (N==0){
    FFF()
  }else{
    tmp=setTimeout("count()",1000);
    document.getElementById('counter').innerText = N;
    N=N-1
  }
}
function Hent(){
  self.location="delay.asp"
  count()
}

Men der kommer en syntaxfejl, hver gang jeg når "0"... hvordan har jeg egentligt nogen mulighed for at checke at feltet rent faktisk skifter mellem true og fals?
Avatar billede nmh Nybegynder
27. august 2003 - 22:45 #92
Med den ændring du har lavet ovenfor bruger den 90 sek på at tælle ned. settimeout skal have 1000 som parameter.
N=30 øverst, betyder den tæller ned fra 30 og det tager 30 sek.
På server siden er der et kald til delay-funktionen.
Det skal være med samme værdi som du giver N ovenfor.
altså delay(30) eller hvad du nu synes.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 22:51 #93
ok, jeg fant ud af det, men jeg får stadig en syntaxfejl lige før jeg når "0"... præcis hver anden gang jeg trykker på knappen.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 22:52 #94
fejlen ligger på linje 8 i delayfunktionen:

Sub Delay(DelaySeconds)
  dim SecCount, Sec1, Sec2
  SecCount = 0
  Sec2 = 0
  While SecCount < DelaySeconds + 1
    Sec1 = Second(Time())
8>  If Sec1 <> Sec2 Then
      Sec2 = Second(Time())
      SecCount = SecCount + 1
    End If
  Wend
End Sub
Avatar billede sublimegirl Nybegynder
27. august 2003 - 23:02 #95
hov, nu er syntaxfejlen forsvundet... Jeg tror det fungerer 100%.
Tusind tak for tålmodighed i særklasse!
Avatar billede nmh Nybegynder
27. august 2003 - 23:05 #96
Ja, men det kan jeg ikke forstå.
I min test funker det da perfekt, og du kan gentage så mange gange du har lyst.
Prøv denne i stedet. Den fungerer bar ikke, hvis vi lige er ved at passere midnat:
sub delay(DelaySeconds)
  dim StartTid
  StartTid=timer
  while timer<StartTid+DelaySeconds
  wend
end sub
Avatar billede nmh Nybegynder
27. august 2003 - 23:06 #97
syntaksfejlen må have rod et andet sted end der hvor du har markeret.
Avatar billede nmh Nybegynder
27. august 2003 - 23:10 #98
Jeg håber du vil fortælle her, om hvordan projektet udvikler sig videre. Nu er jeg jo blevet interesseret i det.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 23:17 #99
Jamen jeg kan da lige melde tilbage om hvordan det går i morgen, når der er deadline, og det hele helst skal køre på skinder når det skal præsenteres for slut-kunden.

Jeg er igang med at teste det samlede værk igennem. Hvordan kan jeg egentlig vide om feltet reelt skifter mellem false og true under mit delay?
Avatar billede sublimegirl Nybegynder
27. august 2003 - 23:21 #100
min syntaxfejl har ikke vist sig siden jeg fjernede "hent()" i en udkommenteret html-linje.
Avatar billede nmh Nybegynder
27. august 2003 - 23:23 #101
ja, men er det ikke dig selv, der skal sørge for at database-feltet bliver ændret?
Jeg forstod, at DU skulle åbne databasen (det sædvanlige med et connection-object etc. etc.) og så sætte et bestemt felt til true.
Så hvis du gør det, så vil feltet jo skifte.
Jeg gætter på, at det er en måde at signalere på til nogle andre at nu er du på banen.
Avatar billede sublimegirl Nybegynder
27. august 2003 - 23:27 #102
jo bestemt! jeg regner også med at det fungerer. Ifølge scriptet så kører det som det skal :)
Avatar billede sublimegirl Nybegynder
27. august 2003 - 23:28 #103
Skal jeg lige poste hele mit delay-dokument?
Avatar billede nmh Nybegynder
27. august 2003 - 23:29 #104
OK
Avatar billede sublimegirl Nybegynder
27. august 2003 - 23:32 #105
<%
Sub Delay(DelaySeconds)
  dim SecCount, Sec1, Sec2
  SecCount = 0
  Sec2 = 0
  While SecCount < DelaySeconds + 1
    Sec1 = Second(Time())
    If Sec1 <> Sec2 Then
      Sec2 = Second(Time())
      SecCount = SecCount + 1
    End If
  Wend
End Sub


'definer hvilket felt der skal opdateres, alt efter hvilken streng der sendes.

Dim felt
If request.form("reset") = "Start" Then felt = "Start maalinger"
If request.form("reset") = "Stop" Then felt = "Stop maalinger"
If request.form("reset") = "Reset Opvask 1" Then felt = "Reset vasker1"
If request.form("reset") = "Reset Opvask 2" Then felt = "Reset vasker2"
If request.form("reset") = "Reset Lærere" Then felt = "Reset el laere"



'Åben databasen og sæt feltet til true
Dim Connect, connString
Set Connect = Server.CreateObject("ADODB.Connection")
connString = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("Reset.mdb")
Connect.Open connString

Dim Query, rs
Query = "SELECT * FROM [Knapper]"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open Query, Connect, 1, 2

rs.update
rs(felt)=true
rs.Update

Connect.Close
Set Connect = Nothing


Delay(30) 'Nu holdes der pause i 30 sek

'Åben databasen og sæt feltet til true
Dim Connect2, connString2
Set Connect2 = Server.CreateObject("ADODB.Connection")
connString2 = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("Reset.mdb")
Connect2.Open connString2

Dim Query2, rs2
Query2 = "SELECT * FROM [Knapper]"
Set rs2 = Server.CreateObject("ADODB.Recordset")
rs2.Open Query2, Connect2, 1, 2

rs2.update
rs2("Reset vasker1")=false
rs2.Update

Connect2.Close
Set Connect2 = Nothing


response.redirect "admin_index.asp"
%>
Avatar billede sublimegirl Nybegynder
27. august 2003 - 23:46 #106
Jeg har netop rettet linjen:
rs2("Reset vasker1")=false
til:
rs2(felt)=false


Det fungerer tilsyneladende.
God nat :)
Jeg vender tilbage i morgen tidlig eller hen ad aftenen.
Avatar billede nmh Nybegynder
27. august 2003 - 23:52 #107
Det ser da fornuftigt ud, men der er et par ting, jeg vil kommentere:

Du bør anbringe ordren Option Explicit allerøverst. Altså lige efter den første <%.
Det tvinger dig til at erklære alle variable i en dim-sætning. Det letter fejlfinding, hvis man har lavet stavefejl i et variabelnavn, og systemet kører en lille smule bedre, når asp-fortolkeren på forhånd får at vide hvilke variable, der er.

Der er ingen grund til at lave nye variable connect2, rs2 etc.
rs(felt) står der et sted. Hvad er felt?
Er det ikke det samme som "reset vaskeri", som du bruger senere?
Avatar billede nmh Nybegynder
27. august 2003 - 23:54 #108
Ok, ja nu forstår jeg havd felt er, og jeg forstår din rettelse.
Avatar billede sublimegirl Nybegynder
28. august 2003 - 08:48 #109
Hej, jeg prøver lige at sætte Option Explicit øverst og checke igennem. Jeg får stadig en syntax error ca hver anden gang jeg tester knapperne.
Avatar billede sublimegirl Nybegynder
28. august 2003 - 09:15 #110
Det sker kun første gang jeg tester knapperne, alle knapperne. Anden gang er der ingenting. Fejlen ser sådan ud:

Der opstod en fejl under kørslen.
Vil du søge efter fejlen?

Linje 8
Fejl: Et objekt var ventet

[Ja] [Nej]
Avatar billede sublimegirl Nybegynder
28. august 2003 - 09:17 #111
OK... jeg har fundet ud af at det sker 1. gang efter jeg har været logget af min session logon.
Avatar billede sublimegirl Nybegynder
28. august 2003 - 09:29 #112
Hmm... nej fejlen kommer temmelig uregelmæssigt, men oftest efter jeg har genstartet min PC, eller har været logget ud. Ca hver 3. gang jeg trykker på knapperne.
Avatar billede sublimegirl Nybegynder
28. august 2003 - 09:43 #113
Hvis jeg ikke definerer variablerne til connect2, rs2 etc igen, så får jeg denne fejl:

Der opstod en Microsoft VBScript-kompileringsfejl (0x800A0411)
Navnet blev defineret igen
/delay.asp, line 60, column 4
Dim Connect, connString
---^
Avatar billede sublimegirl Nybegynder
28. august 2003 - 10:12 #114
Jeg forsøgte lige med denne i stedet, men jeg får stadig javascript fejl.
sub delay(DelaySeconds)
  dim StartTid
  StartTid=timer
  while timer<StartTid+DelaySeconds
  wend
end sub
Avatar billede sublimegirl Nybegynder
28. august 2003 - 10:20 #115
Mit javascript ligger i <head> det er vel ikke forkert?
Avatar billede nmh Nybegynder
28. august 2003 - 10:38 #116
dim connect...:
En variabel må kun erklære 1 gang. Mon ikke din fejl skyldes, at du to gange har skrevet 'dim connect'?
Men pyt med det, så bruge blot connect1, rs1, rs2, etc. etc.

Det er ok, at lægge JavaScript-koden i head.

Koden, der kører på serveren (det der er gemt bag <%.... %>) skal være VBscript.
Koden hos klienten plejer at være Javascript.
Delay-proceduren er VBscript, og den skal IKKE ligge i html-siden, der sendes til brugeren.

din linje 8 fejl må skyldes noget andet.
Avatar billede sublimegirl Nybegynder
28. august 2003 - 10:42 #117
Hele mit delay script ligger i et dokument for sig selv, i html-dokumentet ligger javascriptet og formularen med knapperne.
Avatar billede sublimegirl Nybegynder
28. august 2003 - 10:47 #118
Det sjove er, at der hverken i det ene eller det andet dokument er noget på linje 8...
Avatar billede sublimegirl Nybegynder
28. august 2003 - 10:49 #119
Skal jeg poste min html-formular side? (lang!)
Avatar billede sublimegirl Nybegynder
28. august 2003 - 11:03 #120
Jeg har søgt efter fejlen ved at trykke JA i promtp'en, og den viste det var linjen hvor der står FFF i javascriptet:

var N=30
function count() {
if (N==0){
    FFF()
  }else{
    tmp=setTimeout("count()",1000);
    document.getElementById('counter').innerText = N;
    N=N-1
  }
}
function Hent(){
  self.location="delay.asp"
  count()
}

men det er sq underligt det kun dukker op omkring hver 3. gang.
Avatar billede sublimegirl Nybegynder
28. august 2003 - 11:41 #121
Min deadline er blevet rykket til i morgen, da de andre parter ikke er færdige med deres forberedelser endnu. Så nu kan jeg sandsynligvis godt nå at få rettet javascriptfejlen.
Avatar billede nmh Nybegynder
28. august 2003 - 11:42 #122
FFF(): Fjern den helt. Det er en reminiscens fra noget andet, hvor det blot skulle markeres at tiden var udløbet.

Årsagen til den kun laver fejl af og til er, at din asp-side ofte når at komme på plads lige inden N bliver 0.
Lav det om til:
var N=30
function count() {
if (N>=0){
    tmp=setTimeout("count()",1000);
    document.getElementById('counter').innerText = N;
    N=N-1
  }
}
function Hent(){
  self.location="delay.asp"
  count()
}
Avatar billede nmh Nybegynder
28. august 2003 - 11:44 #123
Fejl, der afhænger af tidslige forløb er ofte meget vanskelige at opdage. Fejlen opstod, fordi funktionen FFF() ikke var med mere.
men det er jo godt, du nu har fået ekstra tid.
Avatar billede sublimegirl Nybegynder
28. august 2003 - 11:50 #124
Når jeg tester scriptet, på din side http://dlg.ghg.dk/dlg-web/test3.asp kommer samme scriptfejl.
Avatar billede sublimegirl Nybegynder
28. august 2003 - 11:53 #125
Den dukker frem uregelmæssigt, ca på hver 5. test.
Avatar billede sublimegirl Nybegynder
28. august 2003 - 11:54 #126
Hvordan sletter jeg funktionen?
Avatar billede sublimegirl Nybegynder
28. august 2003 - 11:55 #127
Sorry! havde ikke set dit indlæg, tester lige med dit nye script :)
Avatar billede sublimegirl Nybegynder
28. august 2003 - 12:00 #128
Fantastico! Det virker - Tusind tak for hjælpen! :)
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