Avatar billede rasmus_damberg Nybegynder
31. maj 2006 - 10:36 Der er 15 kommentarer og
1 løsning

Datosøgning i ASP/MSSQL

Jeg har et datofelt 'Abn_start_dato' i min MSSQL.

Jeg skal have lavet to søgefelter, så jeg kan få et udtræk på fx. alle poster der har tegnet abonnement mellem: 8/30/2005 - 8/10/2005.

Altså det var to "textfields" samt en "submit" button...

Håber nogen kan hjælpe!
Avatar billede fennec Nybegynder
31. maj 2006 - 10:46 #1
noget i denne stil:

<form name="myForm" method="get" action="denneUrl.asp">
<input type="Text" name="dato1" value="">
<input type="Text" name="dato2" value=""> yyyymmdd format
<input type="Submit" value="Søg">
</form>
<%
if rq("dato1") <> "" and rq("dato2") <> "" then
  set rs = conn.execute("select * from DinTabel where Abn_start_dato between '"& rq("dato1") &"' and '"& rq("dato2") &"'")
  while not rs.eof
    Response.write rs("navn") &"<br>"
    rs.MoveNext
  wend
end if
%>

Læg mærke til at dato formatet er yyyymmdd. Der kan du selvfølgelig lave en funktion som konvertere datoen, så indtastningen er mere brugervenlig (dd-mm-yyyy format)
Avatar billede ldanielsen Nybegynder
31. maj 2006 - 10:47 #2
<%
if Request.Form <> "" then

strSQL = "SELECT * FROM Tabellen WHERE Abn_start_dato BETWEEN CONVERT(smalldatetime, '" & Request.Form("fra") & "', 101) AND CONVERT(smalldatetime, '" & Request.Form("til") & "', 101)"


end if

%>

<form method="POST">
<input type="text" name="fra">
<input type="text" name="til">
<input type="submit">
</form>
Avatar billede fennec Nybegynder
31. maj 2006 - 10:48 #3
rq("xx") skal være request.querystring("xx") i stedet. Jeg brugte min egen forkortet udgave :o)
Avatar billede mitbrugernavn Praktikant
31. maj 2006 - 10:48 #4
felt_1 = dato_1
felt_2 = dato_2
strSQL="SELECT * FROM dintabel WHERE (Abn_start_dato  Between [felt_1] And [felt_2])"

prøv denne
Avatar billede ldanielsen Nybegynder
31. maj 2006 - 10:48 #5
Jeg bruger 101 fordi det format du lægger op til skal bruges er mm/dd/yyyy, som er US format.

Ville der ikke være rarere at bruge dansk format?
Avatar billede mitbrugernavn Praktikant
31. maj 2006 - 10:49 #6
hov det skal være således
strSQL="SELECT * FROM dintabel WHERE Abn_start_dato Between [felt_1] And [felt_2]"
Avatar billede rasmus_damberg Nybegynder
31. maj 2006 - 12:37 #7
Ok ser ud til at jeg på en eller anden måde kan bruge ldanielsen's til noget..
Jeg har dig fiflet lidt med det og nu kan jeg da søge i ét felt og få vist alle datoer der er > eller = det indtastede. Hvis der er nogen der har et bud på at få ldanielsen's kode ind nedenstående ville det være suuuuuper!! :)

Sårn ser skidtet ud:

----------------------------------------------------------

Dim sqlString, comparison, wildcard
sqlString = "SELECT * FROM dbo.kundedb2 WHERE "
For Each elem In Request.QueryString
    if Instr(1,UCASE(elem),"KUNDE",1)>0 OR Instr(1,UCASE(elem),"KONTAKTPERSON",1)>0 OR Instr(1,UCASE(elem),"BELIGGENHEDSKOMMUNE",1)>0 then
        comparison = " LIKE "
        wildcard = "%"
        sqlString = sqlString & elem & comparison & "'" & Request.QueryString(elem) & wildcard  & "' AND "
    elseif Instr(1,UCASE(elem),"Abn_start_dato",1)>0 then
        sqlString = sqlString & "Abn_start_dato >= CONVERT( smalldatetime, '" & Request.QueryString(elem) & "', 105 ) AND "
       
    else
        comparison = " = "
        wildcard = ""
        sqlString = sqlString & elem & comparison & "'" & Request.QueryString(elem) & wildcard  & "' AND "
    end if
Next
sqlString = Mid(sqlString, 1, Len(sqlString)-5)
if debugMode then
    Response.Write("DEBUG INFO:<br /><br />" & sqlString & "<br /><br />")
end if
----------------------------------------------------------
Avatar billede ldanielsen Nybegynder
31. maj 2006 - 13:04 #8
Hvad hedder de to søgefelter?

Har du selv lavet dette kode, for så har du da lettere ved at gennemskue det end os :o)
Avatar billede rasmus_damberg Nybegynder
31. maj 2006 - 13:13 #9
Det nemmerlig ikke noget jeg kodet selv...
Lige nu ser min form sådan ud:
-------------------------------------------------
<form name="Abn_start_dato" id="Abn_start_dato" onsubmit="doAction('Abn_start_dato'); return false;">
                    <table>
                      <tr>
                        <td>Dato s&oslash;gning .:</td>
                        <td></td>
                      </tr>
                      <tr>
                        <td>
                          <input name="txt" type="text" id="txt" tabindex="6">
                        </td>
                        <td><input name="button5" type="submit" id="button5" value="S&oslash;g"></td>
                      </tr>
                    </table>
                </form>
-------------------------------------------------

Men den skal komme til at se sådan ud:

-------------------------------------------------
<form name="Abn_start_dato" id="Abn_start_dato" onsubmit="doAction('Abn_start_dato'); return false;">
                    <table>
                      <tr>
                        <td>Dato s&oslash;gning .:</td>
                        <td></td>
                      </tr>
                      <tr>
                        <td>
                          <input name="fra" type="text" id="txt" tabindex="6"><input name="til" type="text" id="txt" tabindex="6">
                        </td>
                        <td><input name="button5" type="submit" id="button5" value="S&oslash;g"></td>
                      </tr>
                    </table>
                </form>
-------------------------------------------------
Avatar billede rasmus_damberg Nybegynder
31. maj 2006 - 13:15 #10
Og så har jeg denne java-ting som den også bruger...:
------------------------------------------------
<script type="text/javascript">
function doAction(which){
    switch(which){
        case 'Abn_start_dato':
            document.location.href='visning_1.asp?AKTIV=Y&Abn_start_dato='+document.forms['Abn_start_dato']['txt'].value;
            break;
        default:
            return;
    }
}
</script>
----------------------------------------------------
Avatar billede ldanielsen Nybegynder
31. maj 2006 - 13:16 #11
Dim sqlString
sqlString = "SELECT * FROM dbo.kundedb2 WHERE Abn_start_dato BETWEEN CONVERT(smalldatetime, '" & Request.Querystring("fra") & "', 101) AND CONVERT(smalldatetime, '" & Request.Querystring("til") & "', 101)"

if debugMode then
    Response.Write("DEBUG INFO:<br /><br />" & sqlString & "<br /><br />")
end if
Avatar billede rasmus_damberg Nybegynder
31. maj 2006 - 13:38 #12
Hmm... får denne hersens:
----------------------------------------------------------------
DEBUG INFO:

SELECT * FROM dbo.kundedb2 WHERE AKTIV = 'Y' AND BETALINGSDATO BETWEEN CONVERT(smalldatetime, '', 105) AND CONVERT(smalldatetime, '', 105)

DEBUG INFO:

SELECT * FROM dbo.kundedb2 WHERE AKTIV = 'Y' AND BETALINGSDATO BETWEEN CONVERT(smalldatetime, '', 105) AND CONVERT(smalldatetime, '',


Microsoft OLE DB Provider for SQL Server error '80040e14'

Line 1: Incorrect syntax near ','.

/kundeDatabase/inc/inc_sql.asp, line 46
Avatar billede rasmus_damberg Nybegynder
31. maj 2006 - 14:09 #13
Nu får jeg:
-------------------------------------------------------------------
http://localhost/kundeDatabase/visning_1.asp?AKTIV=Y&BETALINGSDATO=undefined
-------------------------------------------------------------------
DEBUG INFO:

SELECT * FROM dbo.kundedb2 WHERE AKTIV = 'Y' AND BETALINGSDATO BETWEEN CONVERT(smalldatetime, '', 105) AND CONVERT(smalldatetime, '', 105) AND

DEBUG INFO:

SELECT * FROM dbo.kundedb2 WHERE AKTIV = 'Y' AND BETALINGSDATO BETWEEN CONVERT(smalldatetime, '', 105) AND CONVERT(smalldatetime, '', 105)
-------------------------------------------------------------------
Avatar billede ldanielsen Nybegynder
31. maj 2006 - 16:36 #14
I min kode gør jeg sådan:


" ... Abn_start_dato BETWEEN CONVERT(smalldatetime, '" & Request.Querystring("fra") & "', 101) AND ... "

Jeg regner altså med at der er noget tekst i Request.Querystring("fra") og "til"

I din debug ser man at de er tomme.

Har du de to felter der hedder fra og til? Er de udfyldt? Er method i formen GET og ikke POST?
Avatar billede rasmus_damberg Nybegynder
01. juni 2006 - 11:37 #15
Nu viiirker det sgu thx ldanielsen!
Avatar billede ldanielsen Nybegynder
01. juni 2006 - 16:51 #16
Selv tak ...
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