Newsgroup: it.comp.lang.delphi
Titolo: D5 - DBEdit  - problema uscita controllo con campo data

Buongiorno a tutti.
Premessa:
Il campo di riferimento ha la proprietą EDITMASK impostata a '99/99/9999';
Quando tento di uscire dal controllo:
- se il campo č 'vuoto' funziona correttamente;
- se il campo contiene una data corretta funziona correttamente;
- se il campo contiene dei dati non corretti viene segnalato errore di 'data
non corretta';
- se il campo viene 'svuotato' da un dato corretto viene segnalato errore di
'data non corretta'.
Si puņ risolvere questo problema?
Grazie in anticipo...
________
bySaimon

 Si può risolvere questo problema?


errore ?
Il problema e' nell'editmask: se presente, essa agisce di conseguenza.
Quando lui esce dal campo vuoto senza prima averci scritto niente, il valore
'e *null* e di per se' non e' errore.
Ma se ci scrive qualcosa, e poi lo cancella, il valore all'uscita non sara'
piu' null ma sara' una stringa, nel suo caso l'editmask stessa "  /  /    ".
A questo proposito dovra' adottare un rimedio chiamando una funzione apposita
che "capisca" se il campo e' vuoto, una cosa tipo questa
function TMainForm.ISTextOfDateEmpty(const TextDate: string): boolean;
var i : integer;
      s : string;
begin
   s := '';
   for i := 1 to length(TextDate) do begin
      if TextDate[i] <> ' ' then s := s+ TextDate[i]
   end;
   if  length(s) = 2 then Result := True
                     else Result := False;
end;
Invocata nell'onexit del tedit, questa funzione potra' aiutarti a capire se
inserire null nel database oppure segnalare l'errore.
ciao
-- 
Morde. 
(
mo...@despammed.com
)
M-List di icld: 
http://it.groups.yahoo.com/group/icld/

 ciao
Morde...
hai capito il problema,
ma la soluzione non credo che funzioni:
ho già provato ad intercettare l'uscita dal controllo,
ma l'errore viene rilevato prima ancora...

ma l'errore viene rilevato prima ancora...
allora, fornisci queste infos:
- Versione delphi
- Database utilizzato
- Tecnica di accesso scrittura dati (fai la insert con una sql? usi controlli
dbaware?)
- tuo numero carta credito
Dovrebbero essere sufficienti per inquadrare il problema in maniera piu'
circoscritta.
Quale evento viene scatenato prima dell'onexit del tedit? arriva forse dal
maskedit che agisce a livello piu' basso?


 maskedit che agisce a livello piu' basso?
davvero non saprei: ho messo l'evento onexit per fare il controllo che
accennavi
ma l'errore viene rilevato prima ....

purtroppo (o per fortuna) non ho carta di credito ;-))
ehm...il numero di cell. della sorella gnocca? 
;-)
Ciao


 Ciao
:-)
Ciao (e grazie, intanto)

ehm... è sposata, fa lo stesso???
che fa morde, morde o (de)morde ? questo e' il problema...
hahahaha!!!
^____^


Ho risolto in questo modo:
nell'evento OnChange
procedure OnChange(Sender: TObject);
begin
  if not EDIT.Focused then Exit;
  if EDIT.DataSource.DataSet.FieldByName(EDIT.DataField).DataType in
[ftDate,ftDateTime,ftTime] then begin
    if EDIT.Text = '  /  /    ' then begin
      EDIT.DataSource.DataSet.FieldByNamedEDIT.DataField).Clear;
    end;
  end;
end;

    if EDIT.Text = '  /  /    ' then begin
. . . . . .. . . .._^^^^^^^^^^^^
Attento che la mia funzione IsDateTextEmpty e' fatta apposta per evitare
problemi di impostazioni locali di sistema operativo, perche' mi e' capitato
di trovare sistemi operativi con i separatori data impostati diversamente.
Se il tuo software e' verticale non c'e' problema, ma se e' orizzontale ti
tocca adeguarti a questo vincolo: ecco il perche' di una funzione generica che
non tenga conto dei separatori specifici.



concordo in tutta, ma...
avevo fretta ;-)))
eheheh