Newsgroup: it.comp.lang.delphi
Titolo: DB Update Blank value

Piattaforma DB = Firebird 2.1.1
unit utilizzate:   ... DB, DBCtrls, ...
var  ... DBnome: TbcDBEdit; ...
stringa di update: Update AGENDA set NOME=:NOME,COGNOME=:COGNOME....
Problema: Se "non scrivo nulla" nel campo mi fa un update con un valore 
null. Per la maggior parte dei campi io vorrei che ci mettesse una bella 
stringa vuota, non un NULL.
Ho anche provato a settarlo sul database come default, ma non fa quello 
che desidero. Dal lato database potrei comunque risolvere con dei 
trigger, ma non mi sembra elegante e vorrei risolvere da delphi gestendo 
la fase di update.
Il NULL mi disturba le nelle condizioni di where tipo 
upper(nome||cognome||instestazione) like '%XYZ%' (eliminandomi, dal 
risultato, tutte le righe che contengono almeno un null. Da manuale è 
quello che deve fare quando incontra un NULL, ma io non voglio ci siano 
NULL, ma un bel "BLANK" che non ha gestioni anomale )
è vero che potrei risolvere con
upper(nome) like '%XYZ%' or upper(nome) like '%XYZ%' or ...
Si lo so nel particolare caso di
NOME    = 'ABCX'
cognome = 'YZG'
che unite farebbero 'ABCXYZG' le 2 condizioni di where darebbero 
risultati diversi, ma è me la prima sta benissimo la prima

 che desidero.
cosa vuol dire "non fa quello che desidero"?

 cosa vuol dire "non fa quello che desidero"?
Ecco, Buona domanda... Attualmente la questione è oggetto di indagine... 
ho provato a fare manualmente...
INSERT INTO agenda (nome) VALUES ('pippo');
INSERT INTO agenda (nome) VALUES ('pluto');
INSERT INTO agenda (nome) VALUES ('paperino');
(in questo caso id_agenda viene aggiornato con un trigger)
COSI' A MANO ottengo l'effetto desiderato! cioè cognome e altri campi 
sono blank '' e non NULL
quindi evidentemente è il mio programma che si occupa di settare NULL
in automatico. In effetti io non ci ho messo nulla nei campi, ma mi 
piacerebbe trovare il punto per dirgli che i campi non inizializzati 
vanno salvati con '' (o eventualmente 0 se fosse un numero) e non con NULL.
Il database fa il suo onesto lavoro e per default ci metterebbe blank 
come gli ho detto se nessuno li inizializza, Purtroppo poi non è colpa 
sua se il mio programma li inizializza aNULL.
Il sistema che uso per l'iserimento di una riga e quello suggerito da 
mastering in delphi di cantù. Prima effettuo una query sul generatore 
per farmi dare un nuovo ID, poi inserisco riga. Normalmente non sfrutto 
il trigger per l'autoincremento che si attiva solo se ID_AGENDA è vuota.
La mia stringa insert a meno di non modificarla dinamicamente con i soli 
campi "valorizzati" comprende tutti i campi della tabella.
insert into AGENDA
(NOME,COGNOME,...,ID_AGENDA) values
(:NOME,:COGNOME,...,:ID_AGENDA)
Visto che però in fase di modifica il Gioco funziona bene... Cioè se 
trova '' non lo converte in NULL immagino che se faccio un ciclo sui 
vari field prima che avvenga l'update e converto i null in '' (almeno 
per i tipo stringa) dovrei risolvere.
Grazie per l'aiuto!

 per fargli fare quello che voglio.
DefaultExpression del TField?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 
per ora o solo guardato in internet.
mi da fiducia ma riesco a testarlo solo domani
//
// How do I specify a DefaultExpression for a TField object?
// Answer:
// WRONG MyField.DefaultExpression := 'MyValue';
// GOOD  MyField.DefaultExpression := '''MyValue''';
//
però non ho trovato cosa fa, anche se il nome mi ispira fiducia