14. juni 2004 - 12:18Der er
68 kommentarer og 1 løsning
Gemme en dato i Access
Hvad er den bedste måde at gennem dato i access, således at det er let at lave et select staement hvis man f.eks vil se hvor mange der er logget ind inden for en specific dato.
var firstdate = new Date(2004,5,14); var lastdate = new Date(2004,5,14+7);
Anyway den måde jeg f.eks. udtrækker alle fremkomster på inden for en giver peroiode er der ikke særligt smart?. Hvis nu last+7 overskrider f.eks 31 er der da et problem eller hvis jeg vil finde hvor mange der var i sidste uge og den lige pludslig går i minus, hvad gør man så
Kan ikke rigtigt finde hoved eller hale i det her. Dammm det er da noget træls noget sådan noget dato/tid skidt.
Ja, men hvorfor udskriver den så ikke nogle username fra sidste uge, selvom dato'er findes i db?
Sådan ser koden ud:
var firstdate = new Date(2004,5,14); var lastdate = new Date(2004,5,14-7); rs = conn.execute("select * from users where userdate between #"+ firstdate.getDay()+"-"+ (firstdate.getMonth()+1) +"-"+ firstdate.getYear() +"# and #"+ lastdate.getDay() +"-"+ (lastdate.getMonth()+1) +"-"+ lastdate.getYear() +"#");
Hvad er datoerne i databasen. Er de mellem "14-06-2004" og "07-06-2004"?? Det er ikke sådan, at det er gamle datoer, så de er imellem "14-05-2004" og "07-05-2004"??
Jeg kan simpelhen ikke få den til at udtrække det rigtige.
Dele af min log fil ser såldes sådan ud, når jeg laver en response.write på record sættet:
Mon Jun 14 19:03:07 UTC+0200 2004 Mon Jun 14 19:03:07 UTC+0200 2004 Mon Jun 14 19:03:07 UTC+0200 2004 Mon Jun 14 19:03:07 UTC+0200 2004 Mon Jun 14 19:03:07 UTC+0200 2004 Sat Jun 12 19:00:48 UTC+0200 2004 Sat Jun 12 19:00:48 UTC+0200 2004 Sat Jun 12 19:00:48 UTC+0200 2004 Thu Jun 10 19:03:07 UTC+0200 2004 Thu Jun 10 19:03:07 UTC+0200 2004 Thu Jun 10 19:03:07 UTC+0200 2004
Hvis jeg så laver et select statement:
select * from logtest where logindate between #14-6-2004# and #10-6-2004#
Ja så selecter den kun dem her:
Mon Jun 14 19:03:07 UTC+0200 2004 Mon Jun 14 19:03:07 UTC+0200 2004 Mon Jun 14 19:03:07 UTC+0200 2004 Mon Jun 14 19:03:07 UTC+0200 2004 Mon Jun 14 19:03:07 UTC+0200 2004
Hvordan kan det lade sig gøre?
Jeg afsætter lige nogle flere point, for der her skal bare løses. Tak for din hjælp så langt fennec :-)
Det kunne være fordi den opfatter 14-06-2004 rigtigt, men 10-06-2004 som den 6 oktober. Kan ikke huske om Access vil tage det "internationale" datoformat. Har laven en lille funk som skulle omdanner datoen til yyyymmdd format.
function SQLDate(myDate) { var returval returval = getYear(myDate).toString() if ((getMonth(myDate)+1) < 10) returval += "0"+ (getMonth(myDate)+1).toString else returval += ""+ (getMonth(myDate)+1).toString if getDay(myDate) < 10 returval += "0"+ (getDay(myDate)+1).toString else returval += ""+ (getDay(myDate)+1).toString return returval }
rs = conn.execute("select * from users where userdate between #"+ SQLDate(firstdate) +"# and #"+ SQLDate(lastdate) +"#");
Connect(); var str = "select * from users where userdate between #"+ SQLDate(firstdate) +"# and #"+ SQLDate(lastdate) +"#"; rs = conn.execute(str); Response.Write(str+"<br>");
//Sql streng:
select * from users where userdate between #2004-06-01# and #2004-06-01#
i starten af SQLdate funktion Mon Jun 14 00:00:00 UTC+0200 2004 lige inden retur 2004-06-01 i starten af SQLdate funktion Mon Jun 7 00:00:00 UTC+0200 2004 lige inden retur 2004-06-01
i starten af SQLdate funktion Mon Jun 14 00:00:00 UTC+0200 2004 i myDate.getYear() == 2004 i myDate.GetMonth()+1 == 51 i myDate.getDay() == 1 lige inden retur 2004-06-01
i starten af SQLdate funktion Mon Jun 7 00:00:00 UTC+0200 2004 i myDate.getYear() == 2004 i myDate.GetMonth()+1 == 51 i myDate.getDay() == 1 lige inden retur 2004-06-01
var str = "select * from users where year(userdate)="+ firstdate.getYear() +" and month(userdate)="+ (firstdate.getMonth()+1) +" and day(userdate)="+ firstdate.getDate();
Det nemmeste er at lave to select, en som finder antalet og en som finder resultaterne. Ellers skal vi til at lave noget "group by". Ellers kan man åbne et recordset på en bestemt måde, også kan man tælle antallet af resultaer, men det ved jeg ikke hvordan man gør i JScript.
Her har du SQL'en til at tælle antalet med:
var strAmount = "select count(*) as amount from users where userdate between #"+ SQLDate(firstdate) +"# and #"+ SQLDate(lastdate) +"#";
var str = "select count(users.id), users.* from users where userdate between #"+ SQLDate(firstdate) +"# and #"+ SQLDate(lastdate) +"# group by id, name, lastname....(alle felter i users)..."; rs = conn.execute(str);
var str = "select count(users.id), id, name,lastname..... from users where userdate between #"+ SQLDate(firstdate) +"# and #"+ SQLDate(lastdate) +"# group by id, name, lastname....(samme liste som du selecter)..."; rs = conn.execute(str);
var str = "select (select count(id) from users where userdate between #"+ SQLDate(firstdate) +"# and #"+ SQLDate(lastdate) +"#) as antal, id, name,lastname..... from users where userdate between #"+ SQLDate(firstdate) +"# and #"+ SQLDate(lastdate) +"# group by id, name, lastname....(samme liste som du selecter)...";
var str = "select (select count(id) from users where userdate between #"+ SQLDate(firstdate) +"# and #"+ SQLDate(lastdate) +"#) as antal, id, username,userdate from users where userdate between #"+ SQLDate(firstdate) +"# and #"+ SQLDate(lastdate) +"# group by id, username, userdate";
Den du har der virker hos mig. Nu kører jeg så ikke Access, så det kan være derfor. Du bliver nok nød til at lave det over to select.
var str = "select count(*) as antal from users where userdate between #"+ SQLDate(firstdate) +"# and #"+ SQLDate(lastdate) +"#"; rs = conn.execute(str); Response.Write(rs("antal")+"<br>");
var str = "select * as antal from users where userdate between #"+ SQLDate(firstdate) +"# and #"+ SQLDate(lastdate) +"#"; rs = conn.execute(str); *** Udskriv alle resultaterne ***
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.