PDA

Visualizza la versione completa : [delphi]: DBEdit "calcolato" in base a item combobox


elevation
08-10-2002, 20:35
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!

alka
08-10-2002, 22:00
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! :ciauz:

elevation
08-10-2002, 23:50
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.

alka
09-10-2002, 10:29
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! :ciauz:

elevation
09-10-2002, 16:49
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 :D


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:ciauz:

Loading