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

    Query con where di tipo data che non mi estrae nulla

    ragazzi ecco cosa mi è successo ho 5 records con memorizzato nel campo data il valore 04/11/2004

    provo poi a riempire un datagrid con questi records e la query che imposto è la seguente
    "SELECT * FROM tbprelievo WHERE data = '"& Session("data") &"' ORDER BY nome ASC"

    ho provato a stampare la query a monitor e viene fuori corretta
    però non mi riempie il datagrid !
    ho provato su access e i records mi vengono estratti ma access fa un'operazione particolare che non ho capito
    mi cambia 04/11/2004 in 11/4/2004 e me li estrae!
    cosa devo fare a questo punto ?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    151
    Access nelle query vuole le date in formato anglosassone cioè nel formato mese/giorno/anno anche se il tuo sistema è impostato in italiano

  3. #3
    ciò significa che mi devo scomporre la veriabile di sessione recuperando giorno mese anno e ricomporla in una variabile in formato anglosassone?

  4. #4
    prova

    codice:
    "SELECT * FROM tbprelievo WHERE day(data) = "& day(Session("data")) &" and month(data) ="& month(session("data") &" and year(data) ="& year(session("data") &" ORDER BY nome ASC"
    "...non è detto che sia tardi se non guardi che ora è..."

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    4,127
    io farei cosi
    "SELECT * FROM tbprelievo WHERE data = '"& Format(Session("data"), "mm/dd/yyyy") &"' ORDER BY nome ASC"

    (oppure alternativamente utilizzando datetime.parse)

  6. #6
    Meglio ancora se utilizzi il formato yyyy-MM-dd:
    codice:
    DateTime date = (DateTime) Session["data"];
    String sql = "SELECT * FROM tbprelievo WHERE data = #" + date.ToString("yyyy-MM-dd") + "# ORDER BY nome ASC";
    (ho utilizzato C#)
    In più se utilizzi Access le date vanno inserite tra cancelletti.


  7. #7
    si potrebbe anche utilizzare un parametro di tipo datetime nel quale mettere il contenuto della variabile dopo un opportuno date.parse
    Saluti a tutti
    Riccardo

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da Raffa62
    prova

    codice:
    "SELECT * FROM tbprelievo WHERE day(data) = "& day(Session("data")) &" and month(data) ="& month(session("data") &" and year(data) ="& year(session("data") &" ORDER BY nome ASC"
    sono un poco perplesso (anzi un po' molto) su:
    Session("data")

    ma, non si dovrebbe fare il cast?
    e se Session("data") fosse null?

    secondo me è il modo migliore per generare errori

    per il resto è interessante e funziona pure se si deve estrarre i dati con una certa data, e nel database è memorizzata pure l'ora

    Pietro

  9. #9
    Originariamente inviato da pietro09
    funziona pure se si deve estrarre i dati con una certa data, e nel database è memorizzata pure l'ora
    comunque per risolvere i problemi legati al formato delle date preferisco fare una cosa così

    codice:
    Dim myData as DateTime
    		myData = now()
    		Dim dtScelta As double = CDbl(myData.ToOADate)
    		strSelect = "SELECT * FROM tbprelievo WHERE int(data) ="& int(dtScelta) &" ORDER BY nome ASC"
    "...non è detto che sia tardi se non guardi che ora è..."

  10. #10
    Originariamente inviato da Raffa62
    comunque per risolvere i problemi legati al formato delle date preferisco fare una cosa così

    codice:
    Dim myData as DateTime
    		myData = now()
    		Dim dtScelta As double = CDbl(myData.ToOADate)
    		strSelect = "SELECT * FROM tbprelievo WHERE int(data) ="& int(dtScelta) &" ORDER BY nome ASC"
    Purtroppo utilizzare funzioni di conversione durante le ricerche su database riduce le prestazioni delle query.
    Nel caso delle date (che, si sa, contengono anche l'orario) per es. si tende ad utilizzare questa sintassi:

    day(data)=x and month(data)=x and year(data)=x

    Vi assicuro che su query pesanti questa sintassi diminuisce drasticamente le prestazioni dell'sqlserver (o anche un database come Access).
    Per visualizzare, ad es., tutti i record di una giornata, è bene utilizzare una query del genere:

    SELECT * FROM tabella WHERE Data >= '04/11/2004' AND Data < '05/11/2004'

    In questo modo visualizziamo tutti i record che hanno data maggiore o uguale alla mezzanotte del 04/11/2004 e minore (non uguale però) alla mezzanotte del 05/11/2004. In pratica tutti quelli del 4 novembre 2004.
    (è possibile utilizzare anche l'istruzione BETWEEN che semplifica la lettura dello script sql)


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.