Newsgroup: it.comp.appl.access
Titolo: VBA: verifica se un ITEM(i) di un gruppo di nodi è nullo

Salve,
 
come faccio a controllare se il seguente codice:
 
Nodo.Item(0).SelectNodes("//Quantita").Item(i).Text
 
restituisce un valore vuoto o nullo?
 
Ho provato nei seguenti modi, ma non funziona:
 
if isnull(Nodo.Item(0).SelectNodes("//Quantita").Item(i).Text) then goto avanti
 
if Nodo.Item(0).SelectNodes("//Quantita").Item(i).Text = "" then goto avanti
 
Grazie a tutti
Simone

on 26-02-19, 
bertis...@gmail.com
 supposed :

Puoi solo esaminare se fornisce un Valore o un Errore:
=================================
...
On Error GoTo ErrorHandler
MsgBox Nodo.Item(0).SelectNodes("//Quantita").Item(i).Text
   <codice...>
 
Exit Sub
 
ErrorHandler:
    On Error GoTo 0
    MsgBox "Il nodo... non esiste!"
 
End Sub
===========================
 
Bruno

 on 26-02-19, Simone supposed :

Intanto grazie mille. 
 
Avevo pensato di adoperare On Error, ma la capisco poco, per ignoranza mia.
 
Ti chiedo, se posso permettermi un paio di delucidazioni in merito.
 
Lavoro in Access ed ho del codice sia prima che ovviamente dopo. Se volessi saltare all'etichetta denominata "AVANTI" solo in caso di errore, andrebbe bene il seguente codice?
 
 
On Error GoTo Avanti
Quantita = Nodo.Item(0).SelectNodes("//Quantita").Item(i).Text
Exit Sub
 
Avanti:
.....
 
Primo dubbio: La riga "exit sub" è indispensabile per poter "uscire" dalla funzione "on error"?
 
Secondo dubbio: è possibile adoperare più "On error" all'interno della stessa SUB? In tal caso devo sempre adoperare "exit sub"?
 
Grazie per le info e risposte
 
SIMONE
 
 
 
 

 SUB? In tal caso devo sempre adoperare "exit sub"?
Le gestioni On Error possono essere attivate e disattivate
quante volte vuoi in una procedura indicando diverse Label:
On Error GoTo Label1, On Error GoTo Label2, etc.
Dovrai comunque fare in modo che ad Error1 il GoTo trasferisca
la procedura solo ed esclusivamente alla Label1, etc.
 
Leggiti l'Help e soprattutto creati gli esempi per le
varie circostanze... è la cosa migliore.
 
Bruno

 It happens that SImone formulated :

Ok, grazie mille.
 
Quindi dovrei costruire così:
 
On Error GoTo Avanti 
Quantita = Nodo.Item(0).SelectNodes("//Quantita").Item(i).Text 
On Error GoTo 0
 
Avanti: 
..... 
 
On Error GoTo Avanti1
Prezzo = Nodo.Item(0).SelectNodes("//Prezzo").Item(i).Text 
On Error GoTo 0
 
Avanti1: 
..... 
 
e così via.
 
Grazie mille, sei stato gentilissimo


Ho atteso un poco perchè non capivo...
 
Premesso che gestire codice con questi metodi di intercettazione ERRORI è una cosa che non si fa più da quando si usava il C64 con il Basic...
La gestione errori si fa diversamente e nel codice l'errore deve essere controllabile o evitabile...
Peraltro se devi controllare 10 Nodi non scriverai 10 volte la medesima cosa...?
 
Proverei tuttavia a capire perchè non funziona l'isturzione che magari serve:
Questa non può assolutamente funzionare... è una questione di VARTYPE.
  if isnull(Nodo.Item(0).SelectNodes("//Quantita").Item(i).Text) then
La proprietà TEXT restituisce un VarType di tipo STRING che non supporta il valore NULL, ma eventualmente NullString.
 
Penso che se il problema fosse il contenuto questa funzionerebbe:
if Len(Nodo.Item(0).SelectNodes("//Quantita").Item(i).Text)=0 then
 
Ho il sospetto che il problema sia il NODO invece... ma dovresti accertartene.... forse in questo modo:
 
If Nodo.Item(0).SelectNodes("//Quantita").Item(i) Is Nothing Then
 
@Alex