Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    Query errata su risultati tra due date

    Ciao ragazzi ho la ncessità di sapere la movimentazione di magazzino in un determinato periodo

    girando nel forum sono arrivato a questa conclusione:
    Questa è la pagina dove ho il form con i due campi per la ricerca (Data inizio r Data fine):
    codice:
    <form action="report_Date.asp" method="get" name="data" target="_self" id="data">
                      <table width="400" border="0" cellspacing="0" cellpadding="0">
                        <tr>
                          <td width="110" class="testo">Data iniziale </td>
                          <td width="290" class="testo"><label>
                            <input name="dataInizio" type="text" class="testo" id="dataInizio" size="20" /> 
                            Formato data: gg/mm/aaaa 
                          </label></td>
                        </tr>
                        <tr>
                          <td colspan="2" class="testo">[img]immagini/null.gif[/img]</td>
                          </tr>
                        <tr>
                          <td class="testo">Data finale </td>
                          <td class="testo"><input name="dataFine" type="text" class="testo" id="dataFine" size="20" />
    Formato data: gg/mm/aaaa </td>
                        </tr>
                        <tr>
                          <td colspan="2" class="testo">[img]immagini/null.gif[/img]</td>
                          </tr>
                        <tr>
                          <td colspan="2" align="center" class="testo"><input name="button22" type="submit" class="testo" value="Cerca" /></td>
                          </tr>
                      </table>
                                                    </form>
    Questa invece è la query nella pagina dove ho i risultati:
    codice:
    <%
    dataInizio = Request.QueryString("dataInizio")
    dataFine = Request.QueryString("dataFine")
    Dim rsReport
    Dim rsReport_numRows
    
    Set rsReport = Server.CreateObject("ADODB.Recordset")
    rsReport.ActiveConnection = MM_magazzino_STRING
    rsReport.Source = "SELECT *  FROM report  WHERE data = " + Replace(rsReport__MMColParam, "'", "''") + " AND  data BETWEEN '"&dataInizio&"' And '"&dataFine&"'  ORDER BY articolo DESC "
    rsReport.CursorType = 0
    rsReport.CursorLocation = 2
    rsReport.LockType = 1
    rsReport.Open()
    
    rsReport_numRows = 0
    %>
    Mi da questo tipo di errore:
    codice:
    Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 
    
    [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'data = AND data BETWEEN '21/12/2006' And '21/12/2006''. 
    
    /gestioneMagazzino/report_Date.asp, line 15
    La linea 15 è questa:
    rsReport.Open()


    Io pensavo che fosse MM_ColParam che creava problemi ma errore alla linea 15 non lo capisco.

    Potreste illuminarmi?

    Grazie

  2. #2
    Premetto che non sono un geniaccio e quindi potrei anche consigliarti delle banalità...o cose che già hai provato da solo, ma ci provo ugualmente a darti qualte modesto suggerimento:

    1. l'errore lo da alla riga 15 perchè è la che tu apri il recordset. Ti consiglio di farti ritornare prima di questa riga il testo della stringa sql, cioè prima della fatidica riga 15 metti:

    response.write rsReport.Source
    response.end

    In questo modo vedi il reale contenuto dei valori che hai impostato ed eventualmente provarla direttamente sul db.

    2. Se usi un db Access (dal provider che usi sembrerebbe di si), devi formattare le date in mm/gg/aaaa...cioè

    dataInizio sarà:

    dataInizio = month(Request.QueryString("dataInizio")) & "/" & day(Request.QueryString("dataInizio")) & "/" & year(Request.QueryString("dataInizio"))

    ...stessa cosa sarà per dataFine .

    3. Sempre ammettendo che stai usando Access, il carattere per le date non è l'apice come per le stringhe. Le date inserite come parametri di ricerca vanno racchiuse tra 2 "#" e cioè:

    la tua stringa SQL sarà:

    rsReport.Source = "SELECT * FROM report WHERE data = " + Replace(rsReport__MMColParam, "'", "''") + " AND data BETWEEN #"&dataInizio&"# And #"&dataFine&"# ORDER BY articolo DESC "

    NB: non ne sono sicuro, ma forse ci sono incongruenze e incompatibilità tra i parametri DATA = ecc... e DATA BETWEEN ecc... (non possono essere parametri AND...non si possono verificare mai insieme...forse meglio OR, ma io la butto lì, poi vedrai)

    4. Inoltre, altro piccolo consiglio, non so se DATA è il nome che tu hai relmente dato al campo nella tua tabella o se è fittizia per spiegare meglio il concetto, ma se fosse il nome reale che hai dato al campo, non vorrei sbagliare, ma è una parola riservata di Access e se la vuoi usare come campo deve essere racchiusa tra parentesi quadre...cioè così [data]. Ti consiglierei, quindi, di cambiargli nome se non è troppo impattante per il resto della applicazione.

    Spero di esserti stato di aiuto.
    Ciao e buon lavoro.

    Maurizio.

  3. #3
    Ti ringrazio per i consigli.

    Faccio delle prove e delle verifiche.

    ciao

  4. #4
    Ciao, ho fatto i dovuti controlli e nel mio DB Access 2003 il campo data ora si chiama "dataRegistrazione".

    Adesso mi da questo errore:
    SELECT * FROM report WHERE data = AND data BETWEEN #12/21/2006# And #12/21/2006# ORDER BY articolo DESC

    Ecco il codice attuale della pagina che mostra i risultati:

    codice:
    <%
    dataInizio = month(Request.QueryString("dataInizio")) & "/" & day(Request.QueryString("dataInizio")) & "/" & year(Request.QueryString("dataInizio")) 
    dataFine = month(Request.QueryString("dataFine")) & "/" & day(Request.QueryString("dataFine")) & "/" & year(Request.QueryString("dataFine")) 
    
    Dim rsReport
    Dim rsReport_numRows
    
    Set rsReport = Server.CreateObject("ADODB.Recordset")
    rsReport.ActiveConnection = MM_magazzino_STRING
    rsReport.Source = "SELECT * FROM report WHERE data = " + Replace(rsReport__MMColParam, "'", "''") + " AND data BETWEEN #"&dataInizio&"# And #"&dataFine&"# ORDER BY articolo DESC "
    
    response.write rsReport.Source
    response.end
    
    rsReport.CursorType = 0
    rsReport.CursorLocation = 2
    rsReport.LockType = 1
    rsReport.Open()
    
    rsReport_numRows = 0
    %>
    L'istruzione SQL è errata da quello che mi mostra a video.

    :master:

  5. #5
    Sembra che questa variabile
    rsReport__MMColParam
    sia vuota...

  6. #6
    Ciao scusa prima avevo snagliato il link del form di invio.
    Ecco l'errore che mi da a video

    SELECT * FROM report WHERE data = AND data BETWEEN #12/21/2006# And #12/21/2006# ORDER BY articolo DESC

    :master:

  7. #7
    Se guardi con attenzione dopo
    WHERE data =
    non c'è nulla.
    Dovrebbe esserci una data, ed invece la stringa continua con
    AND
    La variabile messa li è vuota.

  8. #8
    Infatti vedo.

    Ci lavoro sopra e vi faccio sapere


  9. #9
    Ho modificato così il codice dichiarando MMColParam.
    codice:
    <%
    Dim rsReport__MMColParam
    rsReport__MMColParam = "1"
    If (Request.QueryString("dataRegistrazione") <> "") Then 
      rsReport__MMColParam = Request.QueryString("dataRegistrazione")
    End If
    %>
    <%
    dataInizio = month(Request.QueryString("dataInizio")) & "/" & day(Request.QueryString("dataInizio")) & "/" & year(Request.QueryString("dataInizio")) 
    dataFine = month(Request.QueryString("dataFine")) & "/" & day(Request.QueryString("dataFine")) & "/" & year(Request.QueryString("dataFine")) 
    
    Dim rsReport
    Dim rsReport_numRows
    
    Set rsReport = Server.CreateObject("ADODB.Recordset")
    rsReport.ActiveConnection = MM_magazzino_STRING
    rsReport.Source = "SELECT *  FROM report  WHERE dataRegistrazione = " + Replace(rsReport__MMColParam, "'", "''") + " AND dataRegistrazione BETWEEN #"&dataInizio&"# And #"&dataFine&"#  ORDER BY articolo DESC"
    
    
    rsReport.CursorType = 0
    rsReport.CursorLocation = 2
    rsReport.LockType = 1
    rsReport.Open()
    
    rsReport_numRows = 0
    %>
    Questo invece è cio che mi dice l'SQL

    SELECT * FROM report WHERE dataRegistrazione = 1 AND dataRegistrazione BETWEEN #12/21/2006# And #12/21/2006# ORDER BY articolo DESC

  10. #10
    Scusa, ma dataRegistrazione che tipo di campo è? Data?
    Non puoi fare = 1 e poi = una data. Non ha senso.
    Ad ogni modo, prova così:
    codice:
    rsReport.Source = "SELECT * FROM report WHERE (dataRegistrazione BETWEEN #"&dataInizio&"# And #"&dataFine&"#) ORDER BY articolo DESC"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.