Avatar billede boenne Nybegynder
05. maj 2003 - 00:39 Der er 50 kommentarer og
2 løsninger

BOF eller EOF?

Hej igen..

Jeg har en kalender, og en tilknyttet database med oprettede aktiviteter.

Problemet er at jeg har en "DO While Not EOF"-"Loop" sætning der skal udskrive samtlige rækker fra tabellen. Umidelbart virker det som om at min Løkke - kun udskriver hvis der er flere rækker - Jeg kan ikke gennemskue problemet og håber at nogle af jer kan hjælpe mig?
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 00:40 #1
det kan vi - men vi skal have lidt kode
Avatar billede boenne Nybegynder
05. maj 2003 - 00:43 #2
fint kommer her:

                       
                        ' SQL forespørgsel fra tabellen Husk
                        strSQL = "Select * from Husk Where Udførelsesdato =#" & test2 & "#"
                        '#" & test2 & "# ORDER BY udførelsesdato"
                        ' Udfører forespørgsel (rs indeholder nu resultatet recordset gemt i hukommelsen)
                        Set rs = Conn.Execute(strSQL)
                        '-----------------------------------------
                        If rs.BOF Or rs.EOF Then
                        Response.Write " "
                        Else
                        '------------------------------------------
                        ' Gennemløb Recordset (rs) med en løkke
                        Do While Not rs.EOF
                          ' Udskriv værdien af kolonnen Linknavn
                          Response.Write rs("Beskrivelse") & "<br>"
                          ' Gå til næste Record i rs
                          rs.MoveNext
                               
                        ' Fortsæt indtil rs er gennemløbet (EOF = End Of File)
                        Loop
                        End If
'-----------------------------------------------------------
Avatar billede boenne Nybegynder
05. maj 2003 - 00:45 #3
Koden ligger inde i en html-tabel..
dvs. der bliver oprettet en tabel for hver dag der er i måneden.
Og inden i denne tabel køres så løkken..
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 00:45 #4
Og reaktionen er, siger du, at hvis der er 1 række udskrives den
ikke, men hvis der er flere udskrives de alle?
Avatar billede boenne Nybegynder
05. maj 2003 - 00:47 #5
Ja, det er min umidelbare mistanke - jeg har f.eks. aktiviteter fra d. 01-05-2003 til den  12-05-2003 som ikke bliver skrevet ud .. men
den 17-05-2003 vil den godt skrive ud.. og det forstår jeg ikke en brik af..
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 00:48 #6
Du siger, at der laves rigtig mange SQL-kald - pr. dag i en
kalender. Du rydder ikke op ved at sige rs.close - kunne det
være et simpelt kapacitetsproblem?
Avatar billede boenne Nybegynder
05. maj 2003 - 00:48 #7
På hver af ovennævnte er der kun 1. stk. aktivitet..
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 00:50 #8
Datoproblem? Når den kun går til den 12. maj så er det måske fordi den
tror det er december. Kan det være rigtigt? Datoer i mange MS applikationer
er lidt svære at takle korrekt
Avatar billede boenne Nybegynder
05. maj 2003 - 00:50 #9
hmm tjekker lige rs.close... Nej den har jeg ikke men jeg har en
Conn.Close
Set connection = Nothing
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 00:51 #10
Du bør have en rs.close når du er blevet færdig med et rs.
Men jeg tror det er et datoproblem
Avatar billede boenne Nybegynder
05. maj 2003 - 00:51 #11
Selve koden er på 212 linier, tænkte at det ville fylde lidt for meget her på siden.. skal jeg sende det hele?
Avatar billede roenving Novice
05. maj 2003 - 00:52 #12
Har du en DO while efter din nye forespørgsel?

                        Set rs = Conn.Execute(strSQL)
                        '-----------------------------------------
                        'her skal du vel kigge i alle oplysningerne fra dagen
                        If rs.BOF Or rs.EOF Then
                        Response.Write " "
                        Else
Avatar billede boenne Nybegynder
05. maj 2003 - 00:54 #13
Ser ikke ud til at det virker.
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 00:55 #14
Nej, du skal ikke sende noget.

Du skal checke i dine data om der er forskel på datoer før og efter
den 12. i månederne. Er der det skal vi til at finde ud af hvordan
datoer du putter ind og tager ud ser ud.

Du kan dog vistnok altid bruge datoer på formen "2003-05-12" i dine
forespørgsler (12. maj).
Avatar billede roenving Novice
05. maj 2003 - 00:58 #15
EOF forekommer, når poiteren i databasen/recordsettet står *efter* sidste record, hvordan er det nu med BOF ...
Avatar billede boenne Nybegynder
05. maj 2003 - 00:59 #16
Ja - jeg har faktisk to, den ene ligger i en if-sætning der udfører at hvis datoen er dagsdato så skal datofeltet hedde "5" og være rød
Og udskrives i venstre hjørne. i samme ligger så tabellen med forespørgslen.
Når datoen ikke er den samme mere skiftes til 6 og altså også en ny ramme med en tabel
Med den anden forespørgsel..
Avatar billede boenne Nybegynder
05. maj 2003 - 01:02 #17
--------
|5  ---  |
|  |SQL | |
|  ---  |
--------
Noget i den stil :)
Avatar billede boenne Nybegynder
05. maj 2003 - 01:06 #18
Problemet er at alle data i min access database står som 15-05-2003
Lige et øjeblik
DtmCurDate skulle være = dags dato

dtmCurDate = DateAdd("d", intLoopDay-intFirstDay, dtmFirstDate)
                If Month(dtmCurDate) = Month(dtmFirstDate) Then
                '------------------------------
                test2= dtmCurDate 
                '------------------------------
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 01:09 #19
Ja, det er noget rod Microsoft har lavet - i et sikkert
reelt ønske om at hjælpe os. Skal vi prøve at lave formatet
i test2 om til 2003-05-12, så vi kan se om problemet er der?
Avatar billede boenne Nybegynder
05. maj 2003 - 01:11 #20
Ja lad os prøve
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 01:13 #21
Prøv (mon jeg kan tælle)

  d = left(test2,2)
  y = right(test2,4)
  m = mid(test2,4,2)

  test2 = y & "-" & m & "-" & d

lige efter du har givet test2 sin værdi. Det er hurtigt prøvet, men
måske ikke den endelige løsning
Avatar billede roenving Novice
05. maj 2003 - 01:16 #22
>>erik

du tæller godt nk, men rækkefølgen er alternativ ;-]
Avatar billede boenne Nybegynder
05. maj 2003 - 01:19 #23
Ok - Resultatet er at jeg kun får fra d.1 til og med d.4 udskrevet
og resten bliver så ikke vist.. det ser ud som om Maj kun har 4 dage i måneden.. (nå, men så får jeg snart løn.. :) )
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 01:19 #24
dym ? Nåh, det er fordi left og right er de nemme, så
de sku' lige overstås.
Avatar billede roenving Novice
05. maj 2003 - 01:20 #25
*g*
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 01:20 #26
Bruger du test2 til noget andet end opslag i tabellen - den sql-sætning du har vist os?
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 01:21 #27
PS: Kan du lave en testudskrift af test2, så vi kan se det ikke er helt skørt :)
Avatar billede boenne Nybegynder
05. maj 2003 - 01:24 #28
Nej jeg bruger ikke test2 til andet
Og ja jeg laver en tester. øjeblik
Avatar billede boenne Nybegynder
05. maj 2003 - 01:26 #29
2003-05-01 er resultatet så det er jo ok..
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 01:28 #30
Ok, nu lægger jeg mærke til #....#, så er det Access. Det der med
2003-05-12 virker - så vidt jeg husker det - i MS SQL Server.
Avatar billede boenne Nybegynder
05. maj 2003 - 01:30 #31
Dataene er indsat på bagrund af en anden asp-side..
finder lige koden..
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 01:32 #32
Verdens grimmeste hack ...

  d = left(test2,2)
  y = right(test2,4)
  m = mid(test2,4,2)

  if d <= "12" then
  test2 = m & "-" & d & "-" & y
  end if
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 01:34 #33
og du behøver nok ikke if-sætningen.... men prøv med og uden
Avatar billede roenving Novice
05. maj 2003 - 01:35 #34
>> og erik dur den 1-1 så?~]
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 01:36 #35
1-1? Ja, da
Avatar billede boenne Nybegynder
05. maj 2003 - 01:38 #36
>>ERIK.. må bedrøve dig.. stadig kun 4 dage..
og Med if: sætningen vises indhold af dagene
Uden if-sætningen vise indholdet ikke..
Avatar billede boenne Nybegynder
05. maj 2003 - 01:40 #37
Skal jeg prøve at tjekke Access om det er sat til datoformat - for ellers kan jeg jo lave det om til tekst.. måske bedre..
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 01:40 #38
Jeg er ikke bedrøvet - en maj med 4 dage er fint nok til mig.
Så er vi allerede i juni, og det er en dejlig måned.

Det kan principielt være noget andet end datoer. Men jeg tror det
ikke. Jeg kan dog ikke nu se hvad der skal gøre, og jeg har en
anden vigtig ting der skal gøres. Jeg kigger måske ind igen i morgen
Avatar billede boenne Nybegynder
05. maj 2003 - 01:42 #39
ok.. takker indtil videre.. roder selv lidt..
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 01:43 #40
Mnjah, tekstformat bør normalt ikke bruges, men '2003-05-12' vil
da løse nogle problemer lige her.

Ellers er det indstillinger for dato i din access, din driver,
din webserver og din ASP-side (og jeg har en fornemmelse
for at der er komninationer af disse der umuliggør en
fornuftig håndtering af problemet). Men prøv dig frem.
Avatar billede roenving Novice
05. maj 2003 - 01:45 #41
Har du checket, at det ikke er fordi da mangler en løkke, som jeg skrev i
05/05-2003 00:52:58,
fik lige mistanke om, at du kun får uddata, når der er *mere* end en aktivitet.
Avatar billede boenne Nybegynder
05. maj 2003 - 01:46 #42
roen-- tjekker lige
Avatar billede boenne Nybegynder
05. maj 2003 - 01:51 #43
Altså mener du at når jeg bruger en SQL sætning
Selecet from * osv.
og senere bruger en Select from * osv
så får jeg uddata?
Kan det hjælpe at kalde den ene f.eks rs1 og den anden rs2
og huske at lukke dem efter løkken?
Avatar billede roenving Novice
05. maj 2003 - 02:01 #44
To ting:
Jeg gætter ud fra hvad du har skrevet, på, at du foretager to forespørgsler, først om der er aktiviteter(?) med givne karakteritika (bestemt bruger el. lign.), derefter pr. dato, om der er aktiviteter

-- anyway først een forespørgsel, som du looper igennem derefter en anden, som også skal loopes igennem;

Når du så når til (koden du refererede):

                        Set rs = Conn.Execute(strSQL)
                        '-----------------------------------------
                        If rs.BOF Or rs.EOF Then
 
så vil din if-sætning kun tage højde for om forespørgslen er tom (EOF) eller ?(BOF), så hvis der er kun er een record eller der er mere end en, vil een/nogle ikke blive gennemløbet.

Håber du forstår ...
Avatar billede roenving Novice
05. maj 2003 - 02:02 #45
Undskyld:

forespørgslen er tom

forespørgslen *ikke* er tom
Avatar billede boenne Nybegynder
05. maj 2003 - 02:10 #46
Mit ene loop er kun beregnet til at blive udført, hvis datoen er = dagsdato, dette loop ligger først. Hvis datoen ikke er dagsdato
tager den næste loop indtil rs er EOF osv..
Jo jeg forstår hvad du mener.. roder lidt videre med det  i morgen
Må jo også sove en gang i mellem :)
Avatar billede roenving Novice
05. maj 2003 - 02:15 #47
*g*
Avatar billede boenne Nybegynder
05. maj 2003 - 12:31 #48
Hmmm at sove hjælper altid :)
Det lykkedes for mig at få det til at virke..
Jeg lavede Access datofeltet fra datoformat om til tekstformat
Herefter fjernede jeg # og skrev ' istedet - derudover
Flyttede jeg Forespørgslen ud af Do While løkken så den kun blev kørt for hver dato og ikke blev brugt flere gange end nødvendigt.
Herudover en tilføjelse af rs.Close. Så jeg takker mange gange for gode råd og vejledning - jeg har brugt noget af det i hver har kommet med så derfor deler jeg pointene mellem jer :) øhh..
hvis i lige sender et svar altså..
Tak for hjælpen endnu en gang.
Avatar billede erikjacobsen Ekspert
05. maj 2003 - 12:35 #49
Det føles lidt forkert at få point for noget, der var så spændende,
ødelagde nattesøvnen, fik ungerne for sent i børnehaven, og en
skulende chef, der synes man kom for sent.

Men ok, hvad kan være bedre: have det sjovt og få point samtidigt?
Avatar billede roenving Novice
05. maj 2003 - 12:54 #50
Jo, jeg kan godt finde på noget, men man kan godt kalde det her kvalitetstid *g*
Avatar billede boenne Nybegynder
05. maj 2003 - 14:41 #51
Here comes - point, Erik.. hils din chef :)
Avatar billede roenving Novice
05. maj 2003 - 14:43 #52
Takker for points ;~}
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