05. maj 2003 - 00:39Der 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?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
' 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 '-----------------------------------------------------------
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..
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?
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
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
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).
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..
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?
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.. :) )
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
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.
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.
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?
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.
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 :)
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.
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?
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.