Avatar billede mskjoldp Novice
03. marts 2007 - 14:19 Der er 10 kommentarer og
1 løsning

between finder kun yderpunkter

Hey E

jeg har en søgefunction til en db der kun finder start datoen og slutdatoen i db'en.
select koden ser således ud:
.................
<table>
<tr>
<td>søg fra dato<br>
<select name="fdatod">
<option value="">dag</option>
<%    for i = 1 to 31 %>
<option value="<%=(i)%>"><%=(i)%></option>
<%    next %>
</select>
<select name="fdatom">
<option value="">md</option>
<%    for i = 1 to 12 %>
<option value="<%=(i)%>"><%=(i)%></option>
<%    next %>
</select>
<select name="fdatoa">
<option value="">år</option>
<%    for i = 2007 to 2014 %>
<option value="<%=(i)%>"><%=(i)%></option>
<%    next %>
</select>
</td>
<td>søg til dato<br>
<select name="tdatod">
<option value="">dag</option>
<%    for i = 1 to 31 %>
<option value="<%=(i)%>"><%=(i)%></option>
<%    next %>
</select>
<select name="tdatom">
<option value="">md</option>
<%    for i = 1 to 12 %>
<option value="<%=(i)%>"><%=(i)%></option>
<%    next %>
</select>
<select name="tdatoa">
<option value="">år</option>
<%    for i = 2007 to 2014 %>
<option value="<%=(i)%>"><%=(i)%></option>
<%    next %>
</select>
</td>
</tr>
</table>
.................
så sendes form med POST til koden her der udtrækker resultatet:
.................
Dim fd, fm, fa, td, tm, ta, fra, til
for each x in request.Form
if left(x,6) = "S_Log_" AND request.Form(x) <> "" then
strSQL = strSQL & "(((EH101_status_log."&x & ")='" & request.Form(x) & "'))" & ";"
elseif mid(x,2,4) = "dato" then
if x = "fdatod" AND request.Form(x) <> "" then fd = request.Form(x) &"-"
if x = "fdatom" AND request.Form(x) <> "" then fm = request.Form(x) &"-"
if x = "fdatoa" AND request.Form(x) <> "" then fa = request.Form(x)
if Len(fd) = 2 then fd = "0" & fd
if Len(fm) = 2 then fm = "0" & fm
if x = "tdatod" AND request.Form(x) <> "" then td = request.Form(x) &"-"
if x = "tdatom" AND request.Form(x) <> "" then tm = request.Form(x) &"-"
if x = "tdatoa" AND request.Form(x) <> "" then ta = request.Form(x)
if Len(td) = 2 then td = "0" & td
if Len(tm) = 2 then tm = "0" & tm
end if
next
fra = fd&fm&fa
til = td&tm&ta
if len(fra) > 0 AND len(til) = 0 then
strSQL = strSQL & "(((EH101_status_log.S_Log_date) LIKE'%" & fra & "%'))" & ";"
elseif len(til) > 0 AND len(fra) = 0 then
strSQL = strSQL & "(((EH101_status_log.S_Log_date) LIKE'%" & til & "%'))" & ";"
elseif len(fra) > 0 AND len(til) > 0 then
strSQL = strSQL & "(((EH101_status_log.S_Log_date) BETWEEN '" & fra & "' AND '" & til & "'))" & ";"
else
strSQL = strSQL
end if
tal = Len(strSQL) -1
strSQL = left(strSQL,tal)
strSQL = replace(strSQL,";"," AND ")
strSQL = "SELECT * FROM EH101_status_log WHERE " & strSQL & " ORDER BY Status_Log_ID DESC"
rs_custom strSQL,3,"log"
if rs.EOF or rs.BOF then
response.Redirect("default.asp?mode=historik_seek&resultat=no")
else
arrMitArray = rs.GetRows
end if
rs_end()
...................
hvis jeg har søgt fra 23-02-2007 til 03-03-2007 er resultatet
...................

    |  1.col  |  2.col  |
-----------------------------
1.rk|23-02-2007 | fisk    |
-----------------------------
2.rk|23-02-2007 | fisk    |
-----------------------------
3.rk|03-03-2007 | hest    |
-----------------------------
4.rk|03-03-2007 | mus    |
-----------------------------
.....................
jeg mangler at få vist data fra den
24-02-2007
25-02..
26
27
28
01-03-2007
02-03..
.............

Kan i hjælpe?
Avatar billede erikjacobsen Ekspert
03. marts 2007 - 14:26 #1
Dit felt skal være at typen DATE eller DATETIME - eller dine datoer skal være på formen "2007-12-31"
Avatar billede mskjoldp Novice
03. marts 2007 - 14:35 #2
vil det sige at jeg måske kan nøjes med at vende mine søgekriterier inden jeg sender dem til db'en?
Avatar billede mskjoldp Novice
03. marts 2007 - 14:38 #3
jeg skal vel vende data til db'en også...
db-feltet er notat...
hvilket må sige at jeg skal skrive formatet til db'en således:
2007-12-31
og ligeledes søge efter formatet:
2007-12-31

Kan jeg bruge bibeholde notat-feltet?
Avatar billede erikjacobsen Ekspert
03. marts 2007 - 16:26 #4
Ja, men det er ikke synderlig smart. Brug et dato-felt og læs op på hvordan man skriver sql-kode til det.
Avatar billede mskjoldp Novice
04. marts 2007 - 00:50 #5
ok
Avatar billede mskjoldp Novice
04. marts 2007 - 22:07 #6
jeg har vlagt at vende formatet i kodeform.

erikjacobsen vil du ha points :) ?
Avatar billede erikjacobsen Ekspert
04. marts 2007 - 23:08 #7
nej tak
Avatar billede mskjoldp Novice
04. marts 2007 - 23:35 #8
OK, men her er så et tillægspørgsmål!

kan man lave noget ala

strSQL = strSQL & "(((EH101_status_log.S_Log_date) BETWEEN LIKE'%" & fra & "%' AND '" & til & "'))" & ";"

hvor LIKE fx kan være: 2007-03-

?
Avatar billede mskjoldp Novice
04. marts 2007 - 23:39 #9
denne fejler med manglende operator.. :!

strSQL = strSQL & "(((EH101_status_log.S_Log_date) BETWEEN LIKE'%" & fra & "%' AND '" & til & "'))" & ";"

ønsket er at man kan søge fra fx marts indeværende år til dd.
Avatar billede mskjoldp Novice
04. marts 2007 - 23:41 #10
udskrift af strSQL:
(((EH101_status_log.S_Log_date) BETWEEN LIKE'%2007-03-%' AND '2007-03-04'));
Avatar billede mskjoldp Novice
04. marts 2007 - 23:51 #11
rettelse!
dette virker:

strSQL = strSQL & "(((EH101_status_log.S_Log_date) BETWEEN '" & fra & "' AND '" & til & "'))" & ";"

hvor fra = "2007-03-"
og
til = dd.

og med denne kode:
if len(fa) = 0 AND len(fm) <> "" AND len(fd) = 0 then
fra = year(date)&"-"&fm
else
fra = fa&fm&fd
end if

bliver fra altid = "indværende år-valgt_måned-"
og
til = dd.

dvs jeg kan vælge en måned og får en søgning fra den måned til dd.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester