/ 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
datoer i ASP/Access
Fra : Jimmy


Dato : 15-05-01 12:19

Hej

Jeg har nu bygget et system op i ASP/MS-Access, og har nu fundet ud af at
jeg måske har dummet mig lidt med hensyn til datoer. Jeg har nemlig gemt
datoerne som tekst!

Spørgsmålet er nu om der vil ske noget ved at definere mine tekstfelter om
til dato felter i access?
Vil jeg kunne beholde data?

Når jeg f.eks. har en SQL hvor der står:

"select felt from table where dato = '" & dato & "' and..."

Vil jeg kunne undgå at skulle ændre i dette statement?


Håber der er nogen der kan svare... :)
--



MVH Jimmy




 
 
Lauritz Jensen (15-05-2001)
Kommentar
Fra : Lauritz Jensen


Dato : 15-05-01 20:12

Jimmy wrote:
>
> Jeg har nu bygget et system op i ASP/MS-Access, og har nu fundet ud af at
> jeg måske har dummet mig lidt med hensyn til datoer. Jeg har nemlig gemt
> datoerne som tekst!

Det var ikke smart.

> Spørgsmålet er nu om der vil ske noget ved at definere mine tekstfelter om
> til dato felter i access?
> Vil jeg kunne beholde data?

Du kan jo tilføje en ny kolonne af typen dato, lave en
opdateringsforspørgsel, som kopierer/konverterer data over i den nye
kolonne, og tilsidst slette den gamle kolonne.

> Når jeg f.eks. har en SQL hvor der står:
>
> "select felt from table where dato = '" & dato & "' and..."
>
> Vil jeg kunne undgå at skulle ændre i dette statement?

Prøv at tage et kig her:
http://groups.google.com/groups?ic=1&selm=3ADAF1BD.AE9CB4B%40hotmail.com

--
Lauritz

Jimmy (16-05-2001)
Kommentar
Fra : Jimmy


Dato : 16-05-01 17:12

> > Jeg har nu bygget et system op i ASP/MS-Access, og har nu fundet ud af
at
> > jeg måske har dummet mig lidt med hensyn til datoer. Jeg har nemlig gemt
> > datoerne som tekst!
>
> Det var ikke smart.

Du har helt ret det var meget dumt gjort. Jeg tænkte ikke lige over at det
kunne være et problem, men så igen. Det fandt jeg hurtigt ud af. Den fejl
laver jeg nok ikke igen.

> > Spørgsmålet er nu om der vil ske noget ved at definere mine tekstfelter
om
> > til dato felter i access?
> > Vil jeg kunne beholde data?
>
> Du kan jo tilføje en ny kolonne af typen dato, lave en
> opdateringsforspørgsel, som kopierer/konverterer data over i den nye
> kolonne, og tilsidst slette den gamle kolonne.

Det er hermed gjort og sørme så om ikke det hele virker nu. Tusind tak for
hjælpen!

Det har dog ledt mig til et nyt problem
select sum(felt1), sum(felt2), sum(felt3), sum(felt4) from daglinier where
year(dato) = '2001' and dato >= #04-05-01# and dato < #05-05-01#
Med denne SQL får jeg summene for 03-04-01???

select sum(felt1), sum(felt2), sum(felt3), sum(felt4) from daglinier where
year(dato) = '2001' and dato >= #04-05-01# and dato < #30-05-01#
Med denne SQL får jeg ingenting???
Jeg har dog rodet mig lidt frem, og fundet ud af at hvis jeg skriver
select sum(felt1), sum(felt2), sum(felt3), sum(felt4) from daglinier where
year(dato) = '2001' and dato >= #04-05-01# and dato < #29-05-01#
så får jeg alt mellem 04-05-01 og 29-05-01
Det kan jeg simpelthen ikke regne ud hvorfor. Har du nogen ide?


MVH Jimmy



Lauritz Jensen (16-05-2001)
Kommentar
Fra : Lauritz Jensen


Dato : 16-05-01 18:47

Jimmy wrote:
>
> select sum(felt1), sum(felt2), sum(felt3), sum(felt4) from daglinier where
> year(dato) = '2001' and dato >= #04-05-01# and dato < #05-05-01#
> Med denne SQL får jeg summene for 03-04-01???
>
> select sum(felt1), sum(felt2), sum(felt3), sum(felt4) from daglinier where
> year(dato) = '2001' and dato >= #04-05-01# and dato < #30-05-01#
> Med denne SQL får jeg ingenting???
>
> Jeg har dog rodet mig lidt frem, og fundet ud af at hvis jeg skriver
> select sum(felt1), sum(felt2), sum(felt3), sum(felt4) from daglinier where
> year(dato) = '2001' and dato >= #04-05-01# and dato < #29-05-01#
> så får jeg alt mellem 04-05-01 og 29-05-01

Mon ikke det er fordi der går noget galt med danske og engelske datoer?
Prøv evt. at bruge funktionen her:
http://groups.google.com/groups?ic=1&selm=3ADAF1BD.AE9CB4B%40hotmail.com

Din sql kunne skrives som:
SELECT sum(felt1), sum(felt2), sum(felt3), sum(felt4)
FROM daglinier
WHERE dato BETWEEN DateSerial(2001, 5, 4)
AND DateSerial(2001, 5, 30)
--
Lauritz

Jimmy (17-05-2001)
Kommentar
Fra : Jimmy


Dato : 17-05-01 09:57

Hej


>
> Mon ikke det er fordi der går noget galt med danske og engelske datoer?
> Prøv evt. at bruge funktionen her:
> http://groups.google.com/groups?ic=1&selm=3ADAF1BD.AE9CB4B%40hotmail.com
>
> Din sql kunne skrives som:
> SELECT sum(felt1), sum(felt2), sum(felt3), sum(felt4)
> FROM daglinier
> WHERE dato BETWEEN DateSerial(2001, 5, 4)
> AND DateSerial(2001, 5, 30)

Hm... Det virker, men jeg er ikke helt sikker på at jeg forstår hvorfor. Jeg
har læst et sted at man skal bruge havelåger omkring datoer (#) Hvorfor skal
man egentlig det. Hvad gør de der havelåger?

Derudover forstår jeg ikke at der skulle være forskel på at returnere datoen
via din funktion (DateToSql(value)), og på at skrive det du skriver i din
funktion direkte i SQL'en. eks.

SELECT sum(felt1), sum(felt2), sum(felt3), sum(felt4)
FROM daglinier
WHERE dato <= DateSerial(Year(value), Month(value), Day(value))
AND DateSerial(Year(value), Month(value), Day(value))
Dette virker ikke! Men med havelåger om datoerne virker det. Så er det bare
at jeg ryger ind problemet med landekoder.

SELECT sum(felt1), sum(felt2), sum(felt3), sum(felt4)
FROM daglinier
WHERE dato <= DateToSql(value)
AND DateToSql(value)
Dette virker, da jeg bruger din funktion, men hvorfor skulle dette virke
bedre end ovenstående?
Det forstår jeg ikke?

Derudover er jeg lidt i tvivl om, om Between ikke tager begge datoer inkl.,
da jeg kun har brug for at den første dato er inkl., endelig ikke den
sidste?

Selvom det hele virker nu ville jeg blive glad om du ville svare på denne
mail alligevel?

....og så skal du selvfølgelig have 10.000 tak for hjælpen. Dette har jeg
brugt rigtig meget tid på, men så kom du til hjælps, og nu virker det. TAK!


MVH Jimmy



Lauritz Jensen (17-05-2001)
Kommentar
Fra : Lauritz Jensen


Dato : 17-05-01 16:01

Jimmy wrote:
>
> > [Lauritz's kode]
> Hm... Det virker,

Naturligvis

> men jeg er ikke helt sikker på at jeg forstår hvorfor.

Det er fordi funktionen DateSerial er en funktion, som givet 3 heltal
(år, måned og dag), retunerer en datoværdi.

> Jeg har læst et sted at man skal bruge havelåger omkring datoer (#)
> Hvorfor skal man egentlig det. Hvad gør de der havelåger?

Nummertegnene omkring en dato, svare nogenlunde til gåseøjnene (")
omkring en tekststreng. Dog er det en meget slet ide at bruge den måde
at angive datoer, da det datoformat, man skal bruge mellem
nummertegnene, afhænger af sprogopsætningen for den bruger, der er
logget ind på serveren. Det vil sige at hvis du flytter din kode til en
anden server, risikerer du at din kode ikke virker som planlagt. Dette
problem har du ikke, hvis du bruger DateSerial/TimeSerial.

> Derudover forstår jeg ikke at der skulle være forskel på at returnere datoen
> via din funktion (DateToSql(value)), og på at skrive det du skriver i din
> funktion direkte i SQL'en. eks.
>
> SELECT sum(felt1), sum(felt2), sum(felt3), sum(felt4)
> FROM daglinier
> WHERE dato <= DateSerial(Year(value), Month(value), Day(value))
> AND DateSerial(Year(value), Month(value), Day(value))
> Dette virker ikke!

Jo, det virker, hvis du allerede har fået variablen "value" helskindet
over til database-serveren, men så har du jo klaret det og så er der jo
ikke grund til at konverterer mere på det.

> Men med havelåger om datoerne virker det. Så er det bare
> at jeg ryger ind problemet med landekoder.

Nemlig.

> SELECT sum(felt1), sum(felt2), sum(felt3), sum(felt4)
> FROM daglinier
> WHERE dato <= DateToSql(value)
> AND DateToSql(value)
> Dette virker, da jeg bruger din funktion, men hvorfor skulle dette
> virke bedre end ovenstående?
> Det forstår jeg ikke?

Det er basalt fordi, sql er almindelig, flad, død tekst, som bliver
genereret i asp, sendt til databaseserveren, for der at blive tolket. Da
der kan opstå tvetydigheder, når databaseserveren prøver at tolke en
dato, gør min funktion det, at den laver sql, der ikke indeholder
datoer, men kun indeholder heltal, som ikke kan misforstås af
databaseserveren.

> Derudover er jeg lidt i tvivl om, om Between ikke tager begge datoer inkl.,
> da jeg kun har brug for at den første dato er inkl., endelig ikke den
> sidste?

"between" er begge inklusive (se evt. i sql-dokumentationen). Husk
iøvrigt at de dato vairable, der bliver brug også indeholder tid
(default er kl. 00:00 om morgenen, så vidt jeg husker). Du kan evt.
bruge DateAdd til at trække en enkelt dag fra slutdatoen, hvis du ikke
vil have resultater fra denne dag med.

--
Lauritz

Jimmy (16-05-2001)
Kommentar
Fra : Jimmy


Dato : 16-05-01 17:15

Hej

dato er defineret som dato/tid kort format.

Jeg glemte måske lige at sige at dato er defineret som dato/tid kort format
nu.


MVH Jimmy



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

Månedens bedste
Årets bedste
Sidste års bedste