Newsgroup: italia.genova.discussioni
Titolo: [HELP] Ancora sui recordset di Visual Basic

Qualcuno sa come si fa a 'captare' l'errore che Visual Basic emette
quando si tenta di processare un campo in un Recordset (risultante da un
comando SQL) che é di valore 'NULL' ? Cioè ad esempio, un campo 'Data' che
non é stato riempito ? Il comando SQL NON DA errore. Ma lo dà il programma
se si tenta di assegnare il contenuto di questo 'campo' ad una variabile.
Nonostante un libro pagato 99 Marchi qualche anno fa e gli esempi sul MSN
library, non esistono esempi che posso usare.
Grazie a tutti per l'aiuto.
John.

John ha scritto:

Fai cosi':
il tuo recordset e' rs, e il campo "cognome"; la variabile a cui vuoi 
assegnarlo e' a:
a = rs("cognome") & ""
In pratica "appendi" una stringa vuota al valore del campo, in modo che 
comunque sia il valore sia "". E' buona norma usarlo per tutte le 
stringhe, se hai assegnato al campo la possibilita' di essere null.
Ho vinto qualche cosa?

 John.
TP
-- 
Se entri nel tunnel, non cercare di uscirne. Arredalo.
Un sogno sognato da solo rimane un sogno, un sogno sognato in gruppo
diventa realta'.

 
a ovviamente poi usi la funzione cosi'
dato = safeLong(rs("nome"))


 Ho vinto qualche cosa?
non funziona, caro giorgio, perchè il problema è proprio questo :
non appena tento di 'usare' la variabile del recordset, in qualsiasi modo,
mi da errore. Quindi anche quello statement lì mi dà errore.
Comunque grazie.
Ciao.
John.

Cari Sandra, Giorgio e Pusher,
grazie dei vostri suggerimenti!
Sopratutto per la funzione safelong e safestring che non conoscevo.
Il fatto è che i soli validi 'error capture' statements che ho a mia
disposizione sul Visual Basic 6  sono il  
on error goto  *linenumber*
on error resume next 
on erro goto 0   per eliminare l'error capture
e l'errore NON veniva fuori leggendo il database stesso, cioé mentre lo SQL
produceva il recordset, ma solamente a lettura giá avvenuta, solo quando
tentavo di 'assegnare' questa variabile a qualcosaltro.
Io, dopo aver passato una notte in bianco ed essere andato a dormire alle 6
stamattina, ho trovato lo statement *IsNull*, una variabile boolean che mi
dice se un campo di recordset è nullo o no. 
Sulle variabili 'Date' mi funziona, facendo  
  if  IsNull ( RS("DATA_NASCITA") ) then
       scrivi messagio
  else
       data = RS("DATA_NASCITA")
  end if
...e *funzionaaaaaaaa*   
e così ho potutto andare a dormire.
Adesso la provo se funziona anche con le variabili string e variant.
E farò tesoro dei vostri suggerimenti.
(Se non funziona niente verrò ancora a rompere)
Grazie.
Ciao.
John.

 Sulle variabili 'Date' mi funziona, facendo  
Dico la mia (inserto gratuito):
personalmente (e non e' una regola) non uso mai variabili di tipo 
'data', per vari motivi, tra cui:
- devi affidati all'interprete;
- potresti installare il prg su un pc con le date impostate 
diversamente, e non e' detto che il risultato sia lo stesso;
- non puoi 'giocare' con fitri strani;
- se devi esportare i dati verso un altro db, 'soffri'...
Uso stringhe, riportando la data rovesciata per permettere l'ordinamento:
"20051128 10:00:00" oppure "20051128"
poi con una serie di funzioni estrai quello che ti pare.
Buon codice!

 Dico la mia (inserto gratuito):
Io per le date (solo giorno, mese , anno) uso convertirli in long con
questa:
Function longdate(dt As Variant) As Long
    Dim ll As Long
    ll = Fix(CDbl(Now))
    If IsDate(dt) Then ll = Fix(CDbl(CDate(dt)))
    longdate = ll
End Function
da qui ricavo un long da mettere nel db, poi quando mi serve far vedere
il dato lo formato con la funzione format:
me.lbData.Caption = Format(rs("data"), "dd/mm/yyyy"))
e il gioco e' fatto.
TP



Aggiungo a quanto detto che in questo caso è meglio, se puoi modificare 
la tabella, definire il campo come
NOT NULL DEFAULT ""
in modo che se nessuno lo valorizza non vale NULL ma stringa vuota e il 
programma non avrà problemi.
Ciao!

 programma non avrà problemi.
io l'ho usato ma a volte il problema del record null ritorna, bah, le
vie di access sono misteriose ed infinite. :P


 Buon codice!
Caro giorgio, anch'io ho la stessa tua tendenza, del 'faccio tutto da me'.
Figurati che all'inizio del progetto mi ero addirittura scritto delle
routine per fare operazioni sulle date, memorizzando gli anni bisestili dal
1900 al 2099.
Poi scoprii che le variabili 'date' su Access contengono già queste
funzioni. Solo che i medici (i soliti medici negati per l'infoprmatica
<hahahaha>) usavano un campo separato alfabetico per l'ora  ( !!!!!!  ).
Quindi sono contento di usare la variabile 'date' che mi evita un sacco di
coding. Funziona benissimo, anche a livello 'input' perchè giá ti impedisce
delle cazzate, tipo mettere '31 giugno'.
Come dicevo all'inizio, purtroppo il Visual Basic + SQUL + MS Access sono
dei 'project requirements' imprescindibili.
IO per questioni 'serie' smetterò molto presto di usare il Visual Basic.
Sto cominciando seriamente a studiare bene il C++ e imparare ad usarlo
veramente.
(Già ieri la prima mega-incazzatura col IDE del Visual C++ di Microsoft.
Probabilmente passo al gnu C++ e uso WxWidgets per la grafica).
Ciao.
John.

 
come ho risposto a giorgio, io trovo invece comodo usare la variabile 'date'
perchè conta anche le ore.
E nel progetto che ho, devo testare intervalli di tre ore, e devono essere
giusti anche se comparo "31.12.1999 23:00"   e "1.1.2000  2:00"  mi deve
dare esattamente tre ore di differenza.
(io avevo fatto perfino  fatto una routine e funzionava pefettamente.)
Poi ho scoperto che nelle variabili 'date' puoi mettere ance le ore, e
allora mi sono risparmiato il mal di testa.
E ricordate, giovani generazioni : la *PIGRIZIA* è la dote migliore che
possa avere un programmatore !!!
MAI rompersi il belino più del necessario a scrivere code !!!
(et benedicat vos onnipotent Deus ...)  :-))))
Amen.

 questa:
E per le ricerche come fai?

 vie di access sono misteriose ed infinite. :P
E' successo anche a me....
Purtroppo mi sento piu' sicuro usando accrocchi come quello di prima.

 Ciao!
Sì, ma per variabili numeriche ???

 
Si, ma spezziamo una costola anche a suo favore:
- ai tempi che furono feci ([IT]) un programma che in attesa di accedere 
a MSSQL si appoggiava ad Access. 20 client, accesso continuo, 120MB di 
db (regolarmente compattato). In sei mesi, mai un inchiodo;
- un gestionale usato da una quindicina di aziende, distibuito su piu' 
db, il piu' grande dei quali circa 60MB, max cinque accessi consecutivi. 
In sette-otto anni, pochi inchiodamenti (e da oggi squillera' il 
telefono...)

 Probabilmente passo al gnu C++ e uso WxWidgets per la grafica).
Let's share! (scangemmuse e idee!)

 
...quello che a me rompe i coglioni è che mi fanno usare Access + Visual
Basic + SQL  *solo a me* per la tesi. Poi loro invece per le cose 'vere'
usano Oracle e chissà, magari C++......
:-((((
Come dire : se riesci a scolpire una statua con la merda, allora vuol dire
che un giorno potrai anche usare la creta.... :-))))

 Sì, ma per variabili numeriche ???
Default=0

 (et benedicat vos onnipotent Deus ...)  :-))))
Quoto. Ma solo se non programmi con Microsoft, perche' spesso e 
volentieri cambia(va) le carte in tavola...

 che un giorno potrai anche usare la creta.... :-))))
Entrambe per essere scolpite devono essere secche. Forse e' qui che 
vogliono arrivare!

 Let's share! (scangemmuse e idee!)
Anytime !!! daccordisscimu !!!
 :-))

giorgio wrote:

sì ma puoi avere due statements
NOT NULL DEFAULT ""
NOT NULL DEFAULT = 0   ??
Cioè come distingui tra le variabili numeriche e alfabetiche, volendo
settare il default di NULL e avendo bisogno di tutte e due ??

 
sì, ma io parlavo come metafora...
(Guglielmus, non sum dignum !!!  ))

giorgio wrote:

sì, ma a quano pare Microsoft ha molte facce. Cioè ha molta gente che
'scrive' i compilatori per loro. piccole ditte, imprese, etc.
Ovviamente i geni che hanno prodotto il Visual Basic non sono gli stessi che
hanno prodotto quella merda di IDE del Visual C/C++.
Assolutamente USER-UNFRIENDLY !!
Chi ha usato entrambi, sa quello che voglio dire.
Ad esempio, tu prova ad aggiungere un 'button' dentro u nForm e a scriverci
dentro il codice. Oppure a cambiare il colore background del form.
Immediato. Meraviglioso. Facilissimo in Visual Basic.
Da fucilazione in Visual C/C++.
E SI PARLA DI IDE  !!! MICA DELLA DIFFICOLTÀ DEL  LINGUAGGIO !!!!
Quindi : microsoft è un pianeta. Alcune zone vanno benissimo. Altre
sono da criminali.
In cima a tutto c'è Sua Santità Guglielmo I !!!
Ma come dice il nostro Govi, in 'Colpi di Timone' : se nel viaggio tutto va
bene, allora bravo il comandante !! Ma se la nave affonda è colpa sua. Solo
sua.
Microsoft non è ancora affondata, ma se producesse IDE come il Visual C/C++
sarebbe giá affondata da un pezzo.
John.

 sua.
Non doveva imbarcare uno con l'occhio pulino!

giorgio wrote:

<hehehe> giusto !!!  :-)))

giorgio wrote:

... e giusto adesso, mentre mi faccio una bella insalata mista, mi metto su
'Colpi di Timone' sul video ! Anzi no, sul DVD. Voglio vedere se la qualitá
è migliore.
Ci vediamo 'dopo pranzo' ... :-)))

 settare il default di NULL e avendo bisogno di tutte e due ??
lo devi impostare per ogni campo cosi':
   `NomeId` varchar(50) NOT NULL default '',
   `idSequenza` int(11) NOT NULL default '0',
bye
r

 E per le ricerche come fai?
un BETWEEN tra un long e l'altro.


 Amen.
Amen


 
ScemA


 Probabilmente passo al gnu C++ e uso WxWidgets per la grafica).
Scaricati il nuovo Visual C++ Express 2005: è aggratis e ha un IDE degno 
di tal nome (detto da un antibill, anche se non ci ho ancora smanettato 
un gran che).

Probabilmente passo al gnu C++ e uso WxWidgets per la grafica).
Faresti la cacchiata peggiore della tua vita, IMHO.
-- 
Per ogni problema esiste sempre una soluzione semplice ed elegante.
E sbajata.

grazie dei vostri suggerimenti!
Una delle prime cose che mi insegnò Gualtiero su VB fu la funzione 
Function NStr(s As Variant) As String
 
  If IsNull(s) Then
    NStr = ""
  Else
    NStr = CStr(s)
  End If
 
End Function


Alessandro Topo Galileo wrote:

cioè è *Microsoft* ed è *gratis* ??
Incredibile. Ci deve essere sotto qualcosa di losco... :-)))
Comunque, se è gratis lo scarico subito.

 
Io, dato che sono *io-me* *solo* e devo contare solo sulle mie forze fisiche
e finanziarie, posso permettermi solo cose * gratis ed eterne*.
Quindi se si va sempre più nella direzione che dici tu, io andrò sempre più
nella direzione opposta. Usando Linux e software open-source. Intanto oggi,
per qualcsiasi prodotto Windows c'è un prodotto clone su Linux.
E se qualcuno vuole che io lavori in qualcosaltro di *proprietario*, allora
*ME LO PAGA LUI* !!
Mi sembra giusto no ??  :-)))
Ciao.
John.
 

 per il gestionale è una follia:
sì ma io non faccio il gestionale ! 
Io faccio lo 'scienziato pazzo'.... :-))))
Per il 'gestionale-per-amici' continuerò ad usare il Visual Basic. Intanto
non mi pagano.. :-)))
Io devo purtroppo ammettere un mio solenne fallimento : ho quadagnato una
barca di soldi finchè lavoravo all'ESA.
Andato in pensione, mi dissi : che bello adesso mi faccio un ufficio tutto
mio, senza capi che mi rompino il belino. Saarò il mio capo. E dato che io
sono il super-guru della programmazione e dell'informatica adesso verranno
tutti qui, genuflessi, a chiedermi di fare programmi e mi pagheranno
miliardi così io finisco di pagare la casa in due anni.
Risultato : dal 1996 al 2003, avendo un ufficio che occupava due stanze,
(una sala d'aspetto e l'ufficio) ho avuto uno *1*  *UNO* contratto solo :
un programma di fatturazione per un ristorante di Amburgo, nel 1998.
Mi ci impegnai talmente tanto, programmai per otto mesi, dicemdomi 'poi
intanto ne venderò cento di questi'. Lo feci con la card automatica per
ogni cameriere. Fatturai 6000,-DM (marchi tedeschi) incluso l'hardware.
Feci al capo-cameriere un corso di apprendimento gratis e consegnai il
tutto. Dopo due giorni i camerieri smisero di usarlo per ritornare alla
'cassa' tradizionale.
Decisi allora di trasformare il mio ufficio in appartamento. Costruii un
cesso e una doccia. Lo ammobiliai. Dall'gosto 2003 questo appartamento mi
porta in media 25 Euro al giorno. Molti di più di quello che non mi ha mai
portato l'ufficio.
Io sono stato creato per programmare *gratis*. 
Non sono capace di farmi pagare. E sono un cattivo venditore di qualsiasi
cosa. Sono anche un pessimo albergatore, perchè non so leccare il culo a
nessuno, per cui se uno si lamenta di qualcosa lo butto fuori a calci e
rifiuto di prendere i soldi, per 'fargli vedere' che io no nho bisogno dei
suoi soldi.
E allora continuerò a programmare gratis per tutta la vita, ma per la
ricerca.  Almeno ho più motivazione !
E la gente come me vive di 'environment' gratis ed 'open source'.
Siamo i 'barboni del software'.
Indi poscia : gnu c++ e WxWidgets e tutto ciò che è gratis.
Ciao.
John.

 
e perchè di grazia ? Mi interesserebbe saperlo.

 
sì ma questo è *arbitrario*. Ci vuole un messaggio e poi il programma non
puo' finire 'come se niente fosse'. Deve prendere un'altra strada.
Comunque stamattina alle 4, quando ho scoperto il 'IsNull' mi si è aperto il
cuore ed ho potuto dormire come un angioletto.

Alessandro Topo Galileo wrote:

ettepareva che me ne va bene una : richiede il SP4 (service pack 4) che non
ho. Bisogna che mi scarico prima quello. (ho il Win 2000).
Domani lo faccio.