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

    limitare i record a 6 mesi fà

    Ciao a tutti.
    Sul mio sito faccio visualizzare delle informazioni in maniera random. Alcune di queste informazioni non dovrebbero però essere più vecchie di 6 mesi.
    posto il codice
    codice:
    <%
    
    'gestione data per non andare oltre i 6 mesi
    if Month(Date) = 1 then mese = "07" end if
    if Month(Date) = 2 then mese = "08" end if
    if Month(Date) = 3 then mese = "09" end if
    if Month(Date) = 4 then mese = "10" end if
    if Month(Date) = 5 then mese = "11" end if
    if Month(Date) = 6 then mese = "12" end if
    if Month(Date) = 7 then mese = "01" end if
    if Month(Date) = 8 then mese = "02" end if
    if Month(Date) = 9 then mese = "03" end if
    if Month(Date) = 10 then mese = "04" end if
    if Month(Date) = 11 then mese = "05" end if
    if Month(Date) = 12 then mese = "06" end if
    
    If Month(Date) < 6 then
    anno = Year(Date) - 1
    else
    anno = Year(Date)
    end if
    
    giorno = Day(Date)
    if Len(giorno) < 2 then
    giorno = "0" & giorno
    end if 
    
    seimesifa= giorno & "/" & mese & "/" & anno
    
    'estrazione di record casuali
    Conn.Open strConn
    Set rsreviews = Server.CreateObject("ADODB.Recordset")
    query = "SELECT * FROM tbl_sostanze WHERE [data] >= # " & seimesifa & " #"
    
    rsreviews.Open query,Conn,3,3
    if not rsreviews.EOF then
      N = 1 'numero di record casuali da visualizzare
      Randomize
      max = rsreviews.RecordCount-1
      redim arr(max)
      'popolo l'array da 0 al numero di record 
      for i=0 to max
    	arr(i)=i
      next
      'mischio i numeri in modo casuale
      for i=0 to max
        casuale = Int((max)*Rnd)
    	temp = arr(i)
    	arr(i) = arr(casuale)
    	arr(casuale) = temp
      next
      'visualizzo gli N record casuali
      for i=0 to N-1
        rsreviews.Move arr(i)
    %>
    <table width="130" border="0" align="center" cellpadding="0" cellspacing="0" >
              <tr>
                <td align="center" height="2"><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#39563e"></font><%response.write (rsreviews("data") & " " & seimesifa)%></td>
              </tr>
              <tr>
                <td width="130" height="130" align="center" valign="middle" background="../image/barre/cornice_02.gif" >
                  
    ">[img]<%= rsreviews([/img]" width="100" border="0" align="absmiddle" />
    </td>
              </tr>
    </table>
    
        <%
        rsreviews.MoveFirst 
      next
    end if
    rsreviews.Close
    set rsreviews = Nothing
    conn.Close
    set conn = Nothing
    %>
    Il codice per la randomizzazione non è mio, ma l'ho trovato sul web.
    Il punto è che non funziona il limite della data, nonostante sia sintatticamente corretta

    per esempio
    data a caso nel db = 01/01/2008
    seimesifa = 03/08/2007

    e la query stampata a video
    SELECT * FROM tbl_sostanze WHERE [data] >= # 03/08/2007 #

    nonostante credo sia corretto mi mostra anche quelli più vecchi. Sapreste spiegarmi il motivo? C'entra in qualke modo la funzione random ( anche se non credo! )

    Grazie in anticipo

  2. #2
    la data di sei mesi fa la ottieni così:
    codice:
    dataSeiMesiFa = dateAdd("m",-6,date())
    Oggi, 03/02/2008, diventa 03/08/2007
    Se poi vuoi che la data di sei mesi fa inizi per giorno 01 fai
    codice:
    dataSeiMesiFa = dateAdd("m",-6,date())
    giorno = datePart("d",date()) - 1
    dataSeiMesiFa = dateAdd("d",-giorno,dataSeiMesiFa)
    ottieni 01/08/2007

  3. #3
    OK grazie Mems, le date non le sò gestire bene cmq il risultato finale è lo stesso.
    Il fatto è che il problema rimane. Vedo anche i record più vecchi!!
    Il limite non viene rispettato.

  4. #4
    Il campo data nel db è in formato data/ora?
    Il server è italiano o inglese?
    Se fai, in pagina nuova
    codice:
    <%=formatDateTime(date(),vbGeneralDate)%>
    Cosa ti da?

  5. #5
    Il campo nel database è solo in formato data
    Server italiano ( Aruba )
    la stringa restituisce 03/02/2008

  6. #6
    la data va attaccata ai caratteri # senza spazi
    codice:
    query = "SELECT * FROM tbl_sostanze WHERE [data] >= #" & seimesifa & "#"

  7. #7
    Inutile dire che avevo già provato. Lo spazio l'ho inserito successivamente come prova. A sto punto penso che il random sfascia tutto... ma non può essere visto che prende i dati dalla query..! Non ho idee.

  8. #8
    Io farei:
    codice:
    query = "SELECT * FROM tbl_sostanze WHERE datediff(m, data, getdate() ) <=6"
    Non è più semplice?

  9. #9
    Grazier Pictor, ma mi spieghi cosa hai scritto? cmq il risultato è:

    Tipo di errore:
    Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
    [Microsoft][Driver ODBC Microsoft Access] Funzione 'getdate' non definita nell'espressione.


    Ho provato anche a fare questa modifica

    codice:
    query = "SELECT * FROM tbl_sostanze WHERE datediff(m, data, " & date() & " ) <=6"
    Il risultato è

    Parametri insufficienti. Previsto 1.

    la query stampata a video è

    SELECT * FROM tbl_sostanze WHERE datediff(m, data, 06/02/2008 ) <=6

    Ho provato anche con la parentesi quadra su data.

  10. #10
    getdate non è supportato da access

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 © 2025 vBulletin Solutions, Inc. All rights reserved.