Newsgroup: it.comp.lang.delphi
Titolo: sostiture null

salve ragazzi,
spiego il quesito, vorrei che in un campo di cds dove il risultato ï¿œ 
NULL invece di non vedere niente vorrei inserire qualcosa tipo un 
trattino - si puï¿œ fare?
grazie :)

 NULL
Ma tu vuoi evitare di vedere il null o vuoi sostiture fisicamente il
null del campo con il trattino?
A.

 A.
voglio evitare, nella griglia a video e nella stampa, di vedere il campo 
vuoto e di vedere un trattino al suo posto, spero di essere stato chiaro :)

ora si.
Se il cds è connneso tramite datasetprovider ad un database, questa
cosa la fai direttamente da sql.
Ogni db ha almeno una funzione che permette di sostituire il null con
qualcosa di diverso dal null nel risultato di una select.
Se leggi nella guida sql del database trovi di sicuro la funzione
giusta.
Se il cds non è connesso da un tdatasetprovider, un modo per fare
quello che ti serve è definire campi persistenti e usare l'evento
OnGetText del campo che contiene il null.
A.

 vuoto e di vedere un trattino al suo posto, spero di essere stato chiaro :)
Questo approccio tipicamente si affronta facendo l'override dell'evento 
realativo al disegno della stessa griglia, in particolare penso sia l' 
ondrawcolumncell (cioï¿œ l'evento che disegna i dati per quel field, che 
nella griglia e' appunto uan colonna): cerca nei post del passato e' 
pieno di queste tematiche.
Ciao
-- 
Morde

 ondrawcolumncell (cioè l'evento che disegna i dati per quel field,
quell'evento serve per altre cose, tipo disegnare immagini nella
colonna o modificare stile e colore del testo.
Trattandosi di mostrare un dato in sostituzione del null, non spetta
alla griglia ma al dataset gestire la sostituzione del valore.
A.

 alla griglia ma al dataset gestire la sostituzione del valore.
Si confermo che ï¿œ sbagliato il contesto: ondrawcolumncell ï¿œ usato per 
la cosmetica della griglia, per la manipolazione del dato bisogna 
rivolgersi allo strato software che gestisce lo stesso, in questo caso 
il dataset.
Ciao
-- 
Morde

Morde ha scritto:

allora, prima di tutto grazie ad entrambi per le risposte :)
poi ho risolto parzialmente con la funzione ifnull(campo, 'sostituto') 
nella quety, dico parzialmente perchï¿œ se lo uso nelle utility del db 
(mysql) tutto ok vedo il trattino invece del null, se invece lo uso in 
d2009 mi dï¿œ errore esattamente questo: Type mismatch for field 'campo' 
expecting: float actual:string.
credo anche di aver capito il perchï¿œ, perchï¿œ probabilmente il campo ï¿œ un 
double ed io gli sostituisco il valore con il trattino c'ï¿œ un modo per 
ovviare al problema?
grazie

 ovviare al problema?
E' chiaro che tu hai un tfloatfield e gli vuoi assegnare un char: lui 
s'inca##a.. ;)
Segui il consiglio che ti ha dato alberto e persegui la strada 
dell'ongettext.
Ciao
-- 
Morde

 double
Che vuol dire "probabilmente"' Vai e vedi. Devi avere la certezza di
questa cosa e non ipotesi.
nel caso, lui usa un discendente di TField specifico per i dati di
quel tipo e ovviamente se senti di mettere un carattere non numerico
in un campo numerico lui ti alza il dito medio.
A.

 A.
� certo che � cos� il campo � di tipo float, per il gettext non ho 
capito come fare... ho provato ad assegnare na cosa tipo
if text = '' then
	text := '-'
ma nell'evento non ci entra....

 ma nell'evento non ci entra....
.. ma non spieghi come hai associato l'evento al campo :-|
A.

 
nella sezioni eventi del campo  c'� ongettext:
procedure Tdm.cds1CAMPOGetText(Sender: TField; var Text: string;
   DisplayText: Boolean);
begin
         if text = '' then
             text := '-';
end;

> nella sezioni eventi del campo  c'è ongettext:
ok.
1) quando compili vedi i punti blu sulla  sinistra delle righe?
2) tu mostri i dati da una griglia o cosa?
A.

 A.
1) si
2) su stampa senza passare per la griglia... stampa in rave con 
collegamento ai dati tramite rcdatasetconnection

 end;
Provala..
-- 
Morde

Morde ha scritto:

nada,
il problema ï¿œ che nell'evento onGetText (provato con breakpoint) non 
entra proprio...

 collegamento ai dati tramite rcdatasetconnection
prova una  griglia e vedi se va.
Se vedi che sulla griglia va ma su rave no, allora ti tocca gestirlo
lato rave.
A.

Alberto Salvati ha scritto:

avevi ragione sulla griglia funziona....
il problema � rave bella mazzata vista la documentazione....

Alberto Salvati ha scritto:

alberto ti ringrazio per l'interessamento, ho risolto, lascio la 
soluzione per chi abbia la stessa esigenza, preciso che facendo il tutto 
in rave ovviamente va bene per query o cds indistintamente :)
sotto l'evento ongettext del campo datatext di rave inserire il codice 
seguente
if value = '' then value := 'VALORE';
end if;
cos� facendo i campi nulli o vuoti saranno valorizzati con quello che 
vorrete ;)
saluti