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

    [delphi]: query intervallo date

    ciao a tutti,
    sapete per caso qual è la sintassi corretta per selezionare tutti i record che hanno il campo "Data" compreso in un certo intervallo. Per intenderci: ho due Edit (data1 e data2) nei quali scrivo le due date; cliccando su un tasto la query deve eseguire la selezione dei record che hanno la data compresa fra data1 e data2.
    Purtroppo la query viene eseguita ma non mostra alcun record...

    Ecco il codice:
    codice:
    procedure TForm1.Button1Click(Sender: TObject);
    var
    num_and: integer;
    begin
    with ADOQuery1 do begin
    
      with SQL do begin
        Clear;
        Add('SELECT *');
        Add('FROM tabella1');
        Add('where');
        num_and:=0;
        if checkbox1.Checked then
      begin
      if num_and > 1 then
        begin
        SQL.Add ('AND ');
    
           end;
        SQL.Add('data>='+edit1.text);
         num_and:=num_and+1;
    
          end;
    
       if checkbox2.Checked then
      begin
        num_and:=num_and+1;
        if num_and>1 then
        begin
        SQL.Add ('AND ');
    
           end;
        SQL.Add('data<='+edit2.text);
    
    
          end;
      end;
      Open;
     num_and:=0;
    end;
    ciao!

  2. #2
    esiste un apposito cast per le date ma adesso non lo ricordo
    vedi nell'help dell'sql

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,311
    Prova a delimitare le date con il simbolo #, oppure sostituisce il valore esplicito con un valore parametrico (ad esempio, :datainizio). Successivamente, puoi utilizzare il metodo ParamByName per inizializzare il valore del parametro.

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

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

  4. #4

    funziona solo se inserisco la data nel formato americano

    ciao Alka,

    - Prova a delimitare le date con il simbolo #

    come mi hai detto funziona solo se inserisco negli edit la data in formato americano. Come posso convertirla??

    ciao

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

    Problema ricorrente...

    Si tratta di un problema ricorrente. Stai usando un database Access, vero?
    Ad ogni modo, credo che l'unica soluzione sia utilizzare le funzioni Delphi per la manipolazione delle stringhe in modo da invertire da codice mese e giorno prima di passarlo alla query.
    La soluzione alternativa è l'uso di parametri nella query: utilizzando StrToDateTime converti la data inserita nel controllo Edit e la passi come valore TDateTime al parametro.
    Se vuoi gestire in modo più controllato l'input, utilizza un controllo MaskEdit.

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

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

  6. #6
    ok, come faccio allora a scambiare mese e giorno nella stringa digitata nell'edit???

    ciao!

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

    Esempio pratico

    Eccoti un esempio pratico. Potresti costruire una funzione simile a questa:
    codice:
    function DateUS2UK(const DateStr: string): string;
    var
      g, m, y: string;
    begin
      g := Copy(DateStr, 4, 2);
      m := Copy(DateStr, 1, 2);
      y := Copy(DateStr, 7, 4);
      Result := g + '/' + m + '/' + y;
    end;
    Passando a questa funzione una stringa del tipo 31/12/2002, essa restituisce 12/31/2002 invertendo semplicemente mese e giorno. Potrai utilizzare questo valore all'interno della query parametrica per esprimere le date nel formato richiesto.

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

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

  8. #8

    ho semplicemente cambiato il formato data in access

    adesso funziona!!

    ciao

  9. #9

    vorrei utilizzare i datetimepicker

    ciao Alka,

    sto provando a sostituire gli edit con i datetimepicKer sostituendo nella query al posto di data1.text e data2.text datatimepicker1.date e datetimepicker2.date rispettivamente. Mi da il seguente errore:

    Nessun valore predefinito per il parametro datetimepicker.date

    come si utilizza questo componente?? Poi mi indica sempre la data del primo inserimento.

    ciao

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,311
    Tanta fatica per elaborare una data inserita in formato testo all'interno di un controllo Edit per passare poi ad un controllo DateTimePicker?

    Il DateTimePicker dispone di proprietà di tipo TDateTime, quindi non puoi passarle direttamente nello statement SQL, ma devi convertirle usando la funzione DateTimeToStr...poi però incapperai nello stesso problema iniziale che avevamo precedentemente risolto: l'inversione del giorno col mese.

    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.