Newsgroup: it.comp.lang.visual-basic
Titolo: Oggetto FileSystemObject

Ciao a tutti.
In un mio progetto ho messo il seguente codice:
'INIZIO CODICE
Option Explicit
Dim fso As New Scripting.FileSystemObject, _
        dr As Scripting.Drive
Private Sub Command1_Click()
Text1 = Str(dr.SerialNumber())
End Sub
'FINE CODICE
Dovrebbe mostrarmi nella textbox1 il seriale dell'hard-disk, ma mi da il
seguente errore:
"Object variable or Whith block variable not set"
Che significa?
GRAZIE

 ha scritto nel messaggio
news:66hP9.31143$Q%4.97...@news1.tin.it...

1) Manca un new. In che punto istanzi la variabile dr????
2) Dopo averla istanziata, dovrai specificare a quale Drive fa riferimento
3) Quel Text1=str(....) è un obbrobrio. Usare le proprietà predefinite è
male.
Ciao
Alberto

 Text1 = Str(dr.SerialNumber())
Usa CStr anzichè Str!
Usa Text1.Text anzichè Text1!
Quando assegni un numero a una stringa, benchè non sia "politically correct"
puoi evitare la chiamata alla Cstr(), chiamata implicitamente da VB:
Text1.Text = dr.SerialNumber()
Ciao
--
using System.Gtk.Forms = "
http://www.neodatatype.net/windowsforms/sgf.aspx
"
mathParser = "
http://www.neodatatype.net
"
sitoComune = "
http://www.it-lang-vb.net
"

 Che significa?
Che dr è una variabile di tipo Scripting.Drive che però non
punta a nulla...
Ti manca un set dr = fso.GetDrive("C")
Ciao.
-- 
BSD is for UNIX lovers -- linux is for Windows haters.

Prova cosě:
Private Sub Command1_Click()
Dim fs, dr As Object
Set fs = CreateObject("Scripting.FileSystemObject")
Set dr = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName("C:")))
Text1 = Str(dr.SerialNumber())
End Sub
Ciao, Luca.

"Luca di Cerneglons ha scritto :

Grazie a  tutti, ora funziona

 Text1.Text = dr.SerialNumber()
<masturbazione mentale ON>
Questo è un punto su cui mi permetto di insistere.
Anche tu riconosci che non sia del tutto corretto, e giustamente consigli di
usarlo.
Ma io preferisco essere ancora più rigido sull'argomento conversione di
dati.
Omettendo la conversione esplicita, il codice è estremamente meno leggibile,
e i bug molto più subdoli.
Dico che il codice è molto più leggibile, perchè la leggibilità non è la
"comodità di lettura" da salotto, ma la rapidità con cui si capisce cosa fa
il codice.
Se io leggo
Text1.Text=3.4
penso, intuitivamente "il testo visualizzato nel textbox diventa uguale a
3.4".
E questo è sbagliato. Il codice, infatti, esegue una cosa diversa:
"il testo visualizzato nel textbox diventa uguale alla rappresentazione
localizzata del numero 3.4".
Se consideri quanti post assolutamente identici chiedono perchè non funziona
una query in cui una variabile numerica con decimali viene passata ad una
stringa SQL, o quanti post sulle date in Access e affini...
Ciao
Alberto

Chiedo venia per la conversione implicita, mi ero limitato a copiare para
para la riga di codice di X...

 localizzata del numero 3.4".
Hai ragione, ma in questo caso: Text1.Text=CStr(3.4) è
"
il testo visualizzato nel textbox diventa uguale alla rappresentazione
localizzata del numero 3.4
".
Solo un po' più lungo da leggere :)
Se non si sa come si comporta VB implicitamente è esattamente come non
sapere cosa fa realmente la CStr().
Ma si apreirebbe un ampio dibattito :P
Interessante è invecie notare che le funzioni di conversione C* sono
"reversibili".
Es.:
CDate(CStr(Date)) = Date ' per questo preferisco la CStr alla Format quando
possibile.
CDbl(Cstr(3.2) = CDbl(Cstr(CDbl(Cstr(3.2)))
