Newsgroup: it.comp.lang.visual-basic
Titolo: Come gestire Text=Recordset (NULL)?

Come da oggetto,
carico su una form dei campi di un database (interbase), che possono essere
ovviamente <Null>. In tal caso VB giustamente si arrabbia.
Per ora ho fatto una funzione NoNull:
**
Public Function NoNull(ADOCampo As ADODB.Field) As String
If IsNull(ADOCampo) = False Then
  NoNull = ADOCampo
Else
  NoNull = ""
End If
End Function
**
Tutto funziona, solo che mi è cambiato il DB e dove prima c'era 0 o "" ora
ci sta Null, quindi devo sostituire all'interno del programma tutti i vari:
Text1=adors("Nome")
con
Text1=NoNull(adors("Nome))
C'è il modo di fare una funzione a cui passo il recordset e mi faccia il
Nonull? Senza ovviamente cambiarmi i dati nel DB
Qualcosa tipo
**
Function RSNoNull (rs as adodb.recordset) as adodb.recordset
for i=to to NUMERO FIELD rs
    RSNoNull.field.item(i)=nonull(rs.field.item(i)
next I
end function
**
Come mi posso comportare?
Grazie :)

 Grazie :)
Di niente :)
-- 
Quando noi ignoranti eravamo di più, tutto era più bello (A. Celentano).
  ___   _   ___ _  _______   _______ ___
|   \ /_\ | _ \ |/ / _ ) \ / /_   _| __|
| |) / _ \|   / ' <| _ \\ V /  | | | _|
|___/_/ \_\_|_\_|\_\___/ |_|   |_| |___|

 Dŕi un'occhiata alla documentazione del tuo DB :)
Ora vedo che trovo, intanto faccio TROVA/Sostituisci :)
Grazie :D

 Grazie :D
Un consiglio: se fai delle sub-query, e ci sono dei campi che ti porti 
fino alla query più esterna, ti conviene mettere l'IFNULL (o 
l'equivalente del tuo db) nel livello più interno in modo tale che il 
recordset, salendo di livello, sia già bello che organizzato :)
E così eviti anche di modificare radicalmente tutte le query (se sono in 
relazione fra loro).
P.S.: Ma che db usi? Access? MS-SQL Server? Firebird?


 P.S.: Ma che db usi? Access? MS-SQL Server? Firebird?
Interbase con SIBProvider per usare ADO, ho provato con un po' di
sintassi IF ma non va, devo vedere il manuale :)
-- 
Freccia@Buldozzer63 :D


Io in genere uso una cosa del genere:
txtCampo = IIf(IsNumeric(Rs!Campo), Rs!Campo, "")
Ciao, Vincenzo

 Per ora ho fatto una funzione NoNull:
da pigro a pigro anche io uso questa funzione, oramai e' estesa , cerco di
riscriverla :
Public Function noVuoto(Stringa As Variant, Optional Def As Variant = "",
Optional Pre As Variant = "", Optional Post As Variant = "") As Variant ' :p
    'controllo valori
    If Def <> "" Then
        defS = Def
    Else
        defS = ""
    End If
    If Pre <> "" Then
        preS = Pre
    Else
        preS = ""
    End If
    If Post <> "" Then
        postS = Post
    Else
        postS = ""
    End If
 If IsNull(Stringa) Or (Stringa = vbNullString) Or (Stringa = "") Then
  noVuoto = defS
 Else
  If Len(trim(Stringa)) >= 1 Then
        noVuoto = preS & Stringa & postS
  Else
        noVuoto = defS
  End If
 End If
End Function
cosi facendo la puoi usare per scrivere query o semplciemente per leggere
dati da db es:
Msgbox novuoto(rcs!nome,"","Nome : "," ") & novuoto(rcs!cognome,"","Cognome
: "," ") &
Qry = "Select * from tbl1 " & novuoto(Criterio,"","where "," ") &
novuoto(Ordinamento,"","order by "," ") ...
anche se lenta e tranquillamente ottimizzabile io la uso cosi, ogni volta la
adatto al mio scopo, numeri, date e simili...  spero di averti dato uno
spunto !
PS: per il codice e' davvero uno scherzo : replace "rcs!Nome" >
"novuoto(rcs!Nome)
(ovviamente consiglio di verificarlo riga per riga con mztools prima di
metterti a fare il replace)
-- 
- Gigio @ Work (?) -
NG: it-alt.comp.hardware.modding - Ingresso libero per gli
scartavetratori folli Site: 
http://www.g2kweb.it/ichm
Chat: #ichm 
irc.azzurra.org

Io se per questo mi sono ricostruito in VB la funzione IFNULL(...) di MySQL:
Public Function ISNULL(ByVal Valore As Variant, & _
                        ByVal Default As Variant) As Variant
     If Valore Is Null Then
        ISNULL = Default
     Else
        ISNULL = Valore
     End If
End Function
E la uso (ovviamente) cosě:
txtData.Text = IFNULL(RS!Conto, 0)
txtProva.Text = IFNULL(RS!DataNascita, "??/??/????")
e mi č un sacco utile per non ricordarmi ogni volta quale sia il 
controllo da fare in VB e quello di MySQL (visto che ormai la maggior 
parte del lavoro la faccio fare alle query, quelle poche volte in cui i 
controlli li faccio in VB mi dimentico quale sia la sintassi opportuna).
-- 
Quando noi ignoranti eravamo di piů, tutto era piů bello (A. Celentano).


 End Function
Ovviamente, preso dalla noia pomeridiana, ho sbagliato nel postare il 
nome della funzione: IFNULL, non ISNULL (che poi nell'esempio ho scritto 
bene).
-- 
Quando noi ignoranti eravamo di più, tutto era più bello (A. Celentano).
