Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [delphi]: DBEdit "calcolato" in base a item combobox

    ciao a tutti,
    come posso fare per incrementare di "n" mesi una data contenuta in un DBEdit
    e visualizzarla in un'altra DBEdit??? In particolare devo poter scegliere il
    numero di mesi tramite una combobox...ho provato questo codice (con una sola
    condizione per ora...poi implementerò una case of...) ma non visualizza
    nulla! Ho provato ad inserirlo in numerosi eventi "On calc fields" sull'On
    Enter e On Change della combobox ma niente!!! Dove sbaglio???

    if form9.dbcombobox1.Items.Strings[1]='semestrale' then


    form8.adotable1.FieldByName('datascadenza').AsDate Time:=IncMonth(strtodate(f
    orm9.dbedit8.text), 6);

    ciao!
    "Ogni artista è un cannibale, ogni poeta è un ladro
    tutti uccidono la loro ispirazione poi cantano del loro dolore "

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Non si è ben capita la logica che sta dietro al meccanismo, in particolare la struttura della tabella e le relazioni tra i campi.

    Di qualsiasi cosa si tratti, sicuramente c'è una soluzione più semplice, poichè modificare un campo calcolato che dipende dal campo utilizzato nel calcolo può innescare un ciclo infinito.

    Spiega meglio la problematica e quello che vuoi ottenere.

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

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

  3. #3
    allora, la form è così strutturata:

    1) Combobox con scelta "Semestrale", "Quadrimestrale", "Annuale"...ecc
    2)DBEdit "Data contratto": se la tabella si trova nello stato "insert" visualizza la data odierna (cmq modificabile). Ho impostato la mask edit (gg/mm/aa)
    3)DBEdit "Data scadenza": vuota se la tabella è in insert, viene calcolata in base alla scelta dell'item della combobox.

    Esempio
    La tabella si trova in insert. Viene proposta come "data contratto" la data odierna (08/10/02). Dalla combobox scelgo "Semestrale". Nel DBedit viene visualizzata la data odierna "maggiorata" di 6 mesi(08/04/02).

    Sono riuscito ad eseguire il calcolo della data scadenza ma c'è un problema: dopo aver scelto "semestrale" dalla combobox ed eseguito il calcolo...se lo rieseguo scegliendo "quadrimestrale" la data viene trasformata automaticamente in "08/04/2002" che viene interpretata come formato data non valida....come posso rimediare???

    ecco il codice attuale:

    procedure TForm9.FormActivate(Sender: TObject);
    begin
    edit1.Text:='';
    dbedit8.Text:=datetostr(date);
    end;

    procedure TForm9.SpeedButton1Click(Sender: TObject);
    var
    present: TDateTime;
    Year, Month, Day: Word;
    begin


    if dbcombobox1.itemindex=0 then begin
    present:=strtodate(dbedit8.text);
    DecodeDate(Present, Year, Month, Day);
    DBedit9.text := datetostr(IncMonth(Present, 6));
    present:=strtodate(dbedit8.text);
    end;
    if dbcombobox1.itemindex=2 then begin
    present:=strtodate(dbedit8.text);
    DecodeDate(Present, Year, Month, Day);
    DBedit9.text := datetostr(IncMonth(Present, 4));
    present:=strtodate(dbedit8.text);
    end;
    if dbcombobox1.itemindex=3 then
    DBedit9.text := datetostr(IncMonth(Present, 3));
    if dbcombobox1.itemindex=4 then
    DBedit9.text := datetostr(IncMonth(Present, 2));
    if dbcombobox1.itemindex=5 then
    DBedit9.text := datetostr(IncMonth(Present, 1));
    end;

    end.
    "Ogni artista è un cannibale, ogni poeta è un ladro
    tutti uccidono la loro ispirazione poi cantano del loro dolore "

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

    Usa il Field, non il DBEdit

    Uhm...ci sono alcune cose che non mi tornano.

    Innanzitutto, non capisco come fa una data 08/10/02 a diventare 08/04/02 aggiungendo 6 mesi. Sembra che i mesi vengano sottratti, invece di essere aggiunti.

    A parte questo, credo di aver capito ciò che vuoi ottenere.

    Tu hai una data di inizio e una data di scadenza. Inserendo la data di inizio e il periodo (semestrale, quadrimestrale, annuale), tu vuoi che il campo relativo alla data di scadenza venga automaticamente calcolato e memorizzato.

    Non sono ben riuscito a capire come hai implementato il meccanismo, anche perchè ho una certa difficoltà a comprendere il codice altrui e non formattato (dovuta alle limitazioni del forum)...

    Ad ogni modo, l'approccio corretto dovrebbe essere quello di modificare direttamente il valore del campo Data scadenza e non il DBEdit che ne visualizza il valore sullo schermo. Intercetta i cambiamenti delle DBEdit della Data inizio e del Periodo ed esegui il calcolo di somma dei mesi; poi, invece di trasformare il risultato in stringa e impostarlo sul DBEdit della Data scadenza, memorizzalo direttamente nel campo come valore AsDateTime...

    Non devi preoccuparti del DBEdit relativo alla Data scadenza: essendo un Data Control, si aggiornerà automaticamente per riflettere il valore che hai inserito tramite codice.

    Fai qualche prova, poi mi saprai dire.

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

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

  5. #5

    Re: Usa il Field, non il DBEdit

    Originariamente inviato da alka
    [B]Uhm...ci sono alcune cose che non mi tornano.

    Innanzitutto, non capisco come fa una data 08/10/02 a diventare 08/04/02 aggiungendo 6 mesi. Sembra che i mesi vengano sottratti, invece di essere aggiunti.
    ehm...in effetti ho sbagliato...volevo dire 08/04/03
    Fai qualche prova, poi mi saprai dire.
    grazie mille! funziona! c'è solo un problema: non riesco ad incrementare la data di un anno con la funzione incyear...:master:

    ciao
    "Ogni artista è un cannibale, ogni poeta è un ladro
    tutti uccidono la loro ispirazione poi cantano del loro dolore "

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.