Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [ Delphi ] Filtro Dati

  1. #1
    piccaweb
    Guest

    [ Delphi ] Filtro Dati

    Ho un problema:
    Utilizzo l'oggetto TQuery per filtrare la tabella associata e il codice SQL che genero é il seguente!
    codice:
     
    Query.Sql.Text:='SELECT * FROM T_Noleggi WHERE (OpzioneFine<'+ DateToStr(Date) +')';
    Query.ExecSQL;
    Dovrebbe visualizzarmi almeno un record, ma niente da fare...buio assoluto!

    Inserendo altri criteri che non siano TDateTime, ma string o Boolean tutto funziona...

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296

    Campi TDateTime nelle query

    Credo che per esprimere i valori di tipo TDateTime nelle query SQL sia necessaria una notazione particolare (generalmente, il carattere #).
    In genere, io faccio uso di query parametriche, molto più semplici e intuitive da gestire. Basta scrivere lo statement SQL in questo modo:
    codice:
    Query.Sql.Text:='SELECT * FROM T_Noleggi WHERE (OpzioneFine < :DataFine)';
    L'identificatore DataFine preceduto da : rappresenta un parametro. Quando imposti la stringa SQL in questo modo, all'interno del componente TQuery viene creato una collection di parametri (Params). Prima di eseguire la query, dovrai specificare il valore per il suddetto parametro in questo modo:
    codice:
    Query.ParamByName('DataFine').AsDateTime := valoreData;
    Analogamente, dovrai impostare il valore di tutti gli altri parametri che riterrai opportuno inserire nella query.
    Ora sei pronto per eseguire la query e ottenere i record:
    codice:
    Query.Open;

    Non utilizzare ExecSQL quando devi leggere record...tale metodo serve solo quando utilizzi la query per eseguire "comandi" sul database (cancellazioni, inserimenti e aggiornamenti, ma non selezioni).


    Fai qualche prova e mi saprai dire.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    piccaweb
    Guest
    Scusami, mi sono spiegato molto male , anzi mi sono dimenticato di aggiungere altre spiegazioni!
    Questo é il codice che generare il comando SQL :
    codice:
    Str_Filtro.Text:= 'SELECT * FROM T_Noleggi WHERE( ( ';
    Str_Filtro.Text:=Str_Filtro.Text + '( (  ( DataInizio >= :PeriodoInizio )AND( DataInizio <= :PeriodoFine )  )';
    Str_Filtro.Text:=Str_Filtro.Text + 'OR (  ( DataFine  >= :PeriodoInizio2 )AND( DataFine <= :PeriodoFine2 )  )  )';
    Str_Filtro.Text:=Str_Filtro.Text + 'OR (  ( OpzioneFine >= :PeriodoInizio1 )AND( OpzioneFine <= :PeriodoFine1 )  )';
    Str_Filtro.Text:=Str_Filtro.Text + ') AND ( RifIDBarca=:Barca ) AND ( RifIDSocietà=:Soc ) )';
    Str_Filtro.Text:=Str_Filtro.Text + ' ORDER BY (OpzioneFine) DESC';
    Successivamente ho fatto una procedura che controlla i dati inseriti e se tutto é corretto allora passa alla definizione dei parametri in questo modo:
    codice:
    with U_DataM_Generale.DataM_Generale.Q_Noleggi do
              begin
               Close;
               SQL.Text:=comando.Text;
               ParamByName('Barca').AsInteger:=U_DataM_Generale.DataM_Generale.Q_Barca['IDBarca'];
               ParamByName('Soc').AsInteger:= 1;
               ParamByName('PeriodoInizio').AsDate:= StartOfTheMonth(Data);
               ParamByName('PeriodoFine').AsDate:= EndOfTheMonth(Data);
               ParamByName('PeriodoInizio1').AsDate:= StartOfTheMonth(Data);
               ParamByName('PeriodoFine1').AsDate:= EndOfTheMonth(Data);
               ParamByName('PeriodoInizio2').AsDate:= StartOfTheMonth(Data);
               ParamByName('PeriodoFine2').AsDate:= EndOfTheMonth(Data);
               Open;
               First;
            end;
    Solo che appena apre la query mi compare l'errore : Data non ammessa - valore null ;
    E' molto strano perché in runtime quando mi posiziono col cursore sopra la variabile Data, mi appare il valore corrispondente in cifre!

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Se il valore della variabile Data ti sembra assegnato, forse una delle funzioni che utilizzi per elaborarlo non restituisce il dato corretto (magari nullo).
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    piccaweb
    Guest
    Errore trovato:
    anziché AsDate ho cambiato AsDateTime e lo accetta, anche se il parametro era solo date!
    Comunque ho risolto e grazie ancora per i tuoi preziosi consigli!

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Sì, mi ero dimenticato che ho avuto anche io quel problema.
    Usa sempre la proprietà AsDateTime. Se ti interessa solamente l'informazione data (escludendo l'ora), puoi troncare il valore TDateTime con la funzione Trunc.
    Dopotutto, si tratta sempre di un valore derivato dal Double.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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