/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
fremtidige datoer i access
Fra : Simon Kibsgård


Dato : 16-05-03 23:55

Hej
Jeg er ved at lave en vagtplan og udtrækker nogle data med denne
streng:
"SELECT * FROM vagtplan WHERE Dato BETWEEN Dateserial(" &
strfromyear & ", " & strfrommonth & ", " & strfromday & ") AND
Dateserial(" & strtoyear & ", " & strtomonth & ", " & strtoday &
") ORDER BY Dato"

Lige nu er der inputs i min database hver dag mellem 16.05.2003
og 20.05.2003
Hvis jeg nu skriver en dato der rækker ud over posterne i min
database fejler den ikke, men viser til gengæld de poster der
stadig passer kriteriet.
MEN jeg vil gerne have access (eller som 2. prioritet vbscript)
til at oprette posterne jeg beder om hvis de ikke eksisterer.
Altså alle datoer fra f.eks. 17.05.2003 - 13.06.2003 og så lade
de tilhørende felter i databasen stå med nullængde.
Jeg forestiller mig at det er en funktion access har, men jeg er
ny i det her og ved ikke rigtigt hvor jeg skal lægge kræfterne.
Nogen forslag ?
pft.
Venlig hilsen Simon K

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Torben Brandt (17-05-2003)
Kommentar
Fra : Torben Brandt


Dato : 17-05-03 01:30

Simon Kibsgård wrote:
> Hej
> Jeg er ved at lave en vagtplan og udtrækker nogle data med denne
> streng:
> "SELECT * FROM vagtplan WHERE Dato BETWEEN Dateserial(" &
> strfromyear & ", " & strfrommonth & ", " & strfromday & ") AND
> Dateserial(" & strtoyear & ", " & strtomonth & ", " & strtoday &
> ") ORDER BY Dato"
>
> Lige nu er der inputs i min database hver dag mellem 16.05.2003
> og 20.05.2003
> Hvis jeg nu skriver en dato der rækker ud over posterne i min
> database fejler den ikke, men viser til gengæld de poster der
> stadig passer kriteriet.
> MEN jeg vil gerne have access (eller som 2. prioritet vbscript)
> til at oprette posterne jeg beder om hvis de ikke eksisterer.
> Altså alle datoer fra f.eks. 17.05.2003 - 13.06.2003 og så lade
> de tilhørende felter i databasen stå med nullængde.
> Jeg forestiller mig at det er en funktion access har, men jeg er
> ny i det her og ved ikke rigtigt hvor jeg skal lægge kræfterne.
> Nogen forslag ?

Jeg forstår ikke helt, hvad det er du vil opnå.
Som jeg læser det så vil du have at hvis du trækker ud på 17.05.2003 -
13.06.2003, så skal databasen først oprette poster i alle "hullerne" og
derefter returnere alle poster indenfor datoerne.
Grunden skulle så være at du kunne vise en kalender "uden huller".

I så fald er løsningen ikke at oprette tomme poster i databasen, men i
stedet ændre på den måde du viser posterne på.
Eksempel i pseudokode:
startdato = 17.05.2003
slutdato = 13.06.2003
rs = udtræk poster fra database mellem startdato og slutdato
sorter efter dato
sålænge (startdato <= slutdato) {
hvis (rs.eof) {
udskriv tom dag
} ellers hvis (startdato = rs(dato)) {
udskriv posten fra rs
} ellers {
udskriv tom dag
}
startdato = startdato + 1
}

Dette duer kun hvis der maksimalt er en post i databasen pr. dato, men
kan nemt ændres til at kunne klare flere.

Hvis det ikke var det du mente i dit indlæg, så forklar gerne hvad de
tomme poster i databasen skal bruges til...

mvh Torben


Simon Kibsgård (17-05-2003)
Kommentar
Fra : Simon Kibsgård


Dato : 17-05-03 11:02

Torben Brandt wrote in dk.edb.internet.webdesign.serverside.asp:
> Grunden skulle så være at du kunne vise en kalender "uden huller".
>
> I så fald er løsningen ikke at oprette tomme poster i databasen, men i
> stedet ændre på den måde du viser posterne på.
> Eksempel i pseudokode:
> startdato = 17.05.2003
> slutdato = 13.06.2003
> rs = udtræk poster fra database mellem startdato og slutdato
> sorter efter dato
> sålænge (startdato <= slutdato) {
> hvis (rs.eof) {
> udskriv tom dag
> } ellers hvis (startdato = rs(dato)) {
> udskriv posten fra rs
> } ellers {
> udskriv tom dag
> }
> startdato = startdato + 1
> }
>
> Dette duer kun hvis der maksimalt er en post i databasen pr. dato, men
> kan nemt ændres til at kunne klare flere.
> Hvis det ikke var det du mente i dit indlæg, så forklar gerne hvad de
> tomme poster i databasen skal bruges til...
Det var præcis ovenstående jeg mente. Desværre kan jeg ikke helt forstå
din pseduokode (hvad betyder de der "}" ?) . Nedenstående er min nuværende
kode - og jeg skal gerne bruge den til alle poster (i).

strSQL = "SELECT * FROM vagtplan WHERE Dato BETWEEN Dateserial(" &
strfromyear & ", " & strfrommonth & ", " & strfromday & ") AND
Dateserial(" & strtoyear & ", " & strtomonth & ", " & strtoday & ") ORDER
BY Dato"

Set rs = Conn.Execute(strSQL)

Response.Write ("<table>")
Response.Write ("<tr>")
For i = 1 To RS.Fields.Count - 1
Response.Write ("<td>" & RS(i).Name & "</td>")
Next
Response.Write("</tr>")

Do while Not RS.Eof
Response.Write ("<tr>")
For i = 1 To RS.Fields.Count - 1
Response.Write ("<td>" & RS(i) & "</td>")
Next
Response.Write ("</tr>")
RS.Movenext
Loop

Response.Write ("</table>")

Jeg kan forestille mig at det ikke gør det nemmere at jeg bruger
dateserial til datoformatet (det gør det selvf. nemmere i andre
henseender).
Vil du prøve at vise mig det med ovenstående eksempel?

pft. Simon K

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Torben Brandt (17-05-2003)
Kommentar
Fra : Torben Brandt


Dato : 17-05-03 11:30

Simon Kibsgård wrote:
> Torben Brandt wrote in dk.edb.internet.webdesign.serverside.asp:
>
>>Grunden skulle så være at du kunne vise en kalender "uden huller".
>>
>>I så fald er løsningen ikke at oprette tomme poster i databasen, men i
>>stedet ændre på den måde du viser posterne på.
>>Eksempel i pseudokode:
>> startdato = 17.05.2003
>> slutdato = 13.06.2003
>> rs = udtræk poster fra database mellem startdato og slutdato
>> sorter efter dato
>> sålænge (startdato <= slutdato) {
>> hvis (rs.eof) {
>> udskriv tom dag
>> } ellers hvis (startdato = rs(dato)) {
>> udskriv posten fra rs
>> } ellers {
>> udskriv tom dag
>> }
>> startdato = startdato + 1
>> }
>>
>>Dette duer kun hvis der maksimalt er en post i databasen pr. dato, men
>>kan nemt ændres til at kunne klare flere.
>>Hvis det ikke var det du mente i dit indlæg, så forklar gerne hvad de
>>tomme poster i databasen skal bruges til...
>
> Det var præcis ovenstående jeg mente. Desværre kan jeg ikke helt forstå
> din pseduokode (hvad betyder de der "}" ?) . Nedenstående er min nuværende
> kode - og jeg skal gerne bruge den til alle poster (i).

{...} skulle være i stedet for Then...End If eller Do While...Loop.
Jeg prøver at skrive noget "rigtig" kode :)

> strSQL = "SELECT * FROM vagtplan WHERE Dato BETWEEN Dateserial(" &
> strfromyear & ", " & strfrommonth & ", " & strfromday & ") AND
> Dateserial(" & strtoyear & ", " & strtomonth & ", " & strtoday & ") ORDER
> BY Dato"
>
> Set rs = Conn.Execute(strSQL)
>
> Response.Write ("<table>")
> Response.Write ("<tr>")
> For i = 1 To RS.Fields.Count - 1
> Response.Write ("<td>" & RS(i).Name & "</td>")
> Next
> Response.Write("</tr>")

Hertil ser dt fint ud. Jeg er dog i tvivl om, om man kan bruge
RS.Fields.Count hvis RS er tomt - men det har du vel testet :)

> Do while Not RS.Eof
> Response.Write ("<tr>")
> For i = 1 To RS.Fields.Count - 1
> Response.Write ("<td>" & RS(i) & "</td>")
> Next
> Response.Write ("</tr>")
> RS.Movenext
> Loop

Ovenstående ville jeg lave således:
[Antag at startdato og slutdato er at typen dato]

Do While DateDiff("d", startdato, slutdato) >= 0
If RS.EOF Then
' Vi udskriver en blank dag
Response.Write "<tr><td>&nbsp;</td></tr>"
ElseIf DateDiff("d", startdato, RS("dato")) = 0 Then
' Der er noget i kalenderen denne dag
Response.Write "<tr>"
For i = 1 To RS.Fields.Count - 1
Response.Write "<td>" & RS(i) & "</td>"
Next
Response.Write "</tr>"
RS.MoveNext
Else
' RS er ikke tom (der er mere i kalenderen) men ikke noget denne dag
' Vi udskriver en blank dag
Response.Write "<tr><td>&nbsp;</td></tr>"
End If
startdato = DateAdd("d", 1, startdato)
Loop

>
> Response.Write ("</table>")
>
> Jeg kan forestille mig at det ikke gør det nemmere at jeg bruger
> dateserial til datoformatet (det gør det selvf. nemmere i andre
> henseender).

Nej nej, brug endelig DateSerial. Så går man aldrig galt i byen :)

En anden ting: Når du udskriver alle felterne i RS, så bruger du
For i = 1 To RS.Fields.Count - 1
Skal du ikke enten starte med i = 0 eller gå op til RS.Fields.Count
(uden -1)


mvh Torben


Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408946
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste