30. juni 2003 - 14:59Der er
71 kommentarer og 2 løsninger
Sortering ved hjælp ad dato.
Jeg skal have vurderet mine records efter Date(). Jeg har tre felter: Dag (1-31), måned(1-12) og år. Jeg kan ikke lige gennemskue hvordan jeg kan sortere mine records så de records der er ældre end i dag ikke kommer med. Nogen gode ideer
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.
det ved jeg, men nu har jeg ikke et dato felt, men som beskrevet ovenfor tre felter: dag, måned og år. Det er der problemet ligger. Jeg vil beholde disse tre felter.
cesil>> Hvad så hvis der er tale om den 1/7/2003, så finder din funk. det ikke. Har ikke selv lige nogen umiddelbar løsning, men det der vil ikke virke
Er det M$Access som du bruger? hvis ja så skal du sætte din kolonner sammen i en forspørgsel (Query) i selve access i design. Også kalder du fra dinASP side denne forspørgsel (Query). Din Query er noget i den retning: Select (dag &"-"&måned&""&år) as minDato From minTabel og din Query fra din ASP side: select * from minTabel where minDato >= 'now()'
Min egen ide gik i den her retning: Tempdate: <% Dim Tempdate Tempdate = (aktivitet.Fields.Item("Slutdato_dag").Value)&"-"&(aktivitet.Fields.Item("Slutdato_maaned").Value)&"-"&(aktivitet.Fields.Item("Slutdato_aar").Value) Response.Write(Tempdate) %> er <% If Tempdate < Date() Then %> større end <% Else %> mindre end <% End If %> <%= Date() %>
Men den fanger ikke værdien rigtigt. Den skriver bare mindre end ved alle datoerne. Kan det overhovedet lade sig gøre på den måde jeg foreslår?
moso -> Du kan enten løse opgaven i SQL-delen (det er det min 15:36:20 forsøger) eller du kan trække alle datoerne ud og så fjerne de uønskede i ASP-delen. Hvilken metode ville du foretrække?
Det tror jeg ikke at den vil give fejl ved 1/1-2004 fordi alle 3 betingelser skal være opfyldt. Skriv 3 eller 4 af din rækker så kan jeg se hvad din tabel indeholder.
cesil -> Måske skulle du lige tjekke syntaksen. Specielt når du nu poster den anden gang:
sql = "SELECT DATEDIFF(day, " & yy & "-" & m & "-" & d & ", now()) AS no_of_days FROM tabel" Set oRs = oConn.Execute(sql) if oRs("no_of_days")>0 then .... end if
For det første ville den oprindelige version give fejl ved ...m & d " &", now()...
For det andet så ville din ...yy & m & d... give en ret ubrugbar del-streng (200367 for i dag) - ubrugbar idet SQL gerne vil have bindestreg mellem de enkelte komponenter af datoen (2003-06-30).
Mit foreslag giver dette resultat: Tempdate: 31-5-2003 er mindre end 30-06-2003 Tempdate: 18-6-2003 er mindre end 30-06-2003 Tempdate: 12-8-2003 er mindre end 30-06-2003 Tempdate: 16-8-2003 er mindre end 30-06-2003
Hvilket jo ikke er sandt. Men jeg er enig med dig i at der ikke bare kan sorteres på de enkelte datoer, men at det skal samles først. Spørgsmålet er så bare hvordan...
sql = "SELECT DATEDIFF(day, " & yy & "-" & m & "-" & d & ", now()) AS no_of_days FROM tabel" Set oRs = oConn.Execute(sql) if oRs("no_of_days")>0 then .... end if
SQL = "SELECT Day, Month, Year FROM MyTable ORDER BY Year, Month, Day" rs = Conn.Execute(SQL)
do while not rs.eof DatoFraDB = CDate(rs("Day") & "-" & rs("Month") & "-" & rs("Year")) if DatoFraDB > Date() then ' Her gør du det du vil med datoerne end if rs.MoveNext loop
nielle>> du har ret det skulle vær or isted for and. jeg prøvede med denne her og giver svar det er godt nok med access men: <%@ Language=VBScript %> <%session.LCID = 1030%> <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> </HEAD> <BODY>
<% DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" &server.mappath("minDB.mdb") Set conn = Server.CreateObject("ADoDB.Connection") conn.open DSN set rs = server.CreateObject("ADODB.recordset")
strSQL = "Select * from Tabel where dag > day(date()) or måned >= month(date()) or år >= year(date())"
rs.Open strSQL, conn
do while not rs.EOF%> <%=rs("dag")%> <%=rs("måned")%> <%=rs("år")%> <%rs.MoveNext
jeg mener i sted for den: DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" &server.mappath("minDB.mdb") Set conn = Server.CreateObject("ADoDB.Connection")
resten er ens.
skal du ha connection til din msSQL database, har du ikke den allerede
Sådan laver du forbindelse til msSQL: DSN = "Provider=SQLOLEDB;Data Source=xxxx;UID=xxxx;PWD=xxxx;DATABASE=xxxx" Set conn = Server.CreateObject("ADoDB.Connection") conn.open DSN ...
Nielle: Det virker nu: Tempdate: 31-05-2003 er mindre end 30-06-2003 Tempdate: 18-06-2003 er mindre end 30-06-2003 Tempdate: 12-08-2003 er større end 30-06-2003 Tempdate: 16-08-2003 er større end 30-06-2003 Jeg kan ikke give dig point, hvorfor?
hossein: Din løsnning duer ikke fordi man ikke bare kan sortere dem individuelt. Som nielle skriver giver det mange fejl, selv om man lavede en del if-sætninger, vil det stadig være en kompliceret affære. Den anden løsning virkede efter hensigten fordi datoen blev sat sammen, og derefter kunne sammenlignes, men tak for forsøget alligevel.
min kode er her, lav en tabel i access og prøv den og glem ikke =: strSQL = "Select * from Tabel where dag > day(date()) or måned >= month(date()) or år >= year(date())" og moso skrev: "de records der er ældre end i dag ikke kommer med." dvs alt i fremtiden :) dvs alt hvad han har i sin tabel: ALT>30-06-2003
hossein -> Det der er *ikke* din kode. Der er igen blandet ASP ind i SQL-strengen. Hvorfor klipper du ikke koden ud fra det ASP-scipt du rent faktisk køre?
Og uanset om du har =-tegn med i din kode, så vil:
"Select * from Tabel where dag > 30 or måned >= 6 or år >= 2003"
- stadig også spytte en dato som 12/12-2000 ud. Hvis den ikke gør det, så har du en fejl i din Access - for det *skal* den gøre!
12-12-2003 Select * from Tabel where 12> 30 or 12>= 6 or 2000 >= 2003 da 2000 er ikke større eller lige med 2003 opfylder ikke kriterie ergo den er falsk
Hvis man skal løse det på nemmeste vis, så vil det være, at trække alt ud, og så sortere fra i ASP. Det er desværre også det der performer dårligst. Men her er den løsning: y = Datepart("yyyy", now) m = DatePart("m", now) d = DatePart("d", now) If rs("Year") > y Then 'Skal vises ElseIf rs("Year") = y Then If rs("Month") > m Then 'Skal vises ElseIf rs("Month") = m Then If rs("Day") >= d Then 'Skal vises End If End If End If
Hovsa. Sidste del kom ikke med, men det kommer så her. Og det kan man så med lidt logik omskrive til en sql streng. Måske ikke den kønneste, men den virker, og er hurtigere end at gøre det i ASP.
SELECT * FROM Table WHERE (Year > DatePart("yyyy", GetDate())) OR (Year = DatePart("yyyy", GetDate()) AND Month > DatePart("m", GetDate())) OR (Year = DatePart("yyyy", GetDate()) AND Month = DatePart("m", GetDate()) AND Day >= DatePart("d", GetDate()))
Synes godt om
Ny brugerNybegynder
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.