Newsgroup: it.comp.lang.visual-basic
Titolo: Unità CD ROM

Salve a tutti!!!
Ho realizzato un applicativo in vb6 che è una sorta di catalogo
multimediale.
Le immagini del catalogo sono presenti su cd rom e sulla stesso cd rom vi è
un file Riferimenti.MDB che contiene i riferimenti alle immagini stesse.
Il mio problema è questo.
Avrei bisogno di parametrizzare il percorso attribuito in fase di
progettazione alla proprietà DatabaseName di un controllo data collegato
all'MDB Riferimenti.mdb in modo tale da poter far variare la lettera
dell'unità cd rom di riferimento.
Non so se mi sono spiegato bene .... vi faccio un esempio:
adesso mi accade questo:
In fase di progettazione inserisco nella proprietà DatabaseName del
controllo data il seguente testo:
            D:\Riferimenti.mdb
Scrivendo ciò però se installo l'applicativo su un pc la cui unità cd rom è
contrassegnata non dalla lettera D:
ma per esempio dalla lettera E: inevitabilmente il mio programma non trova
nulla e va in errore.
In parole povere avrei bisogno di fare una cosa del genere:
            Parametro &  ":\Riferimento.mdb"
dove Parametro mi indica  l'unità cd rom trovata nel pc corrente.
Come posso ottenere una cosa del genere?
Scusate il messaggio lungo !!!! E grazie per l'eventuale risposta

 dell'unitą cd rom di riferimento.





 all'MDB Riferimenti.mdb in modo tale da poter far variare la lettera


Veramente non so se c'è un'API specifica per il tuo problema.
Comunque credo che potrebbe fare al caso tuo anche l'API "GetDriveType"
Ho pensato che si potrebbe fare un ciclo sulle lettere dell'alfabeto in modo
da individuare grazie a "GetDriveType" quella giusta.
Già che c'ero t'ho buttato giù un po' di codice che potresti inserire in un
modulo ".bas":
----------------------------
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA"
(ByVal Drive As String) As Long
Public Enum drDriveType
   drvUnknown = 0
   drvRimovibile = 2
   drvFixedDisk = 3
   drvRemoteDrive = 4
   drvCDRom = 5
   drvRamDrive = 6
End Enum
Public Function GetCDRomDrive() As String
   Dim strDrive As String
   Dim intUnità As Integer
   intUnità = Asc("A")
   Do
      strDrive = Left$(Trim$(Chr$(intUnità)), 1) + ":\"
      If GetDriveType(strDrive) = drvCDRom Then
'         Unità CD ROM trovata!
         GetCDRomDrive = Chr$(intUnità)
         Exit Function
      End If
      intUnità = intUnità + 1
   Loop Until intUnità = Asc("Z") + 1
'   Sul computer non è presente nessuna unità CD ROM
   GetCDRomDrive = ""
End Function
----------------------------
La mia funzione GetCDRomDrive dovrebbe restituire una stringa vuota se
l'utente non dispone di una unità CD ROM, altrimenti dovrebbe restituire la
lettera corrispondente all'unità tanto desiderata. Sottolineo dovrebbe
perchè non ho potuto testare
il codice perchè la mia unità CD ROM e passata a miglior vita (per fortuna
era ancora in garanzia). Comunque adattata alle unità che mi sono rimaste
(HD e Floppy) funziona!
Inoltre spero che questa piccola API possa arricchire l'alveare di Cesare
Rizzi.

 da individuare grazie a "GetDriveType" quella giusta.
Hai pensato giusto, e mi hai pure battuto sul tempo. 8-)
Posto anche il mio codice, solo perché in più aggiungo il trucco di
utilizzare un file di flag nella directory principale del CD, in modo da
identificare univocamente se in un lettore CD è inserito il CD della propria
applicazione.
Ecco qui il codice da inserire in un modulo bas.
Option Explicit
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA"
(ByVal nDrive As String) As Long
Public Function DriveCDCheContieneLaBaseDati() As String
Dim iDriveNum As Integer
Dim sDriveName As String
Const kNomeFileDiFlagNellaRootDelCD = "MiaApp.flg"
For iDriveNum = Asc("C") To Asc("Z")
   sDriveName = Chr$(iDriveNum) & ":\"
   If GetDriveType(sDriveName) = 5 Then ' se è un CD ROM
       If Dir$(sDriveName & kNomeFileDiFlagNellaRootDelCD) <> "" Then
           DriveCDCheContieneLaBaseDati = sDriveName
           Exit For
       End If
   End If
Next
End Function
La chiamata a <DriveCDCheContieneLaBaseDati> ritorna il path del drive che
contiene il CD se questo è inserito, oppure stringa nulla se non è inserito
nessun CD.
Ovviamente bisogna sostituire il contenuto della costante
<kNomeFileDiFlagNellaRootDelCD > con il nome del file di flag che si decide
di utlizzare. Questo è lo stesso trucco che usano le principali enciclopedie
multimediali sul mercato.
Ciao
*Roby*

Si ok tutto giusto ragazzi ma non era questo quello di cui avevo bisogno
:)))
a trovare l'unità cd rom ci ero riuscto anche io
:........:))!..l.(Sicuramente non in questo modo sofisticato...)
il problema mio è come parametrizzarla nella proprietà DatabaseName ?
grazie comunque !!

> il problema mio è come parametrizzarla nella proprietà DatabaseName ?
Gliela imposti nella Form Load. Ovvero:
Private Sub Form_Load()
    dim sCDPath as string
    Dim bTuttoOk as boolean
    Do While Not bTuttoOk
        sCDPath = DriveCDCheContieneLaBaseDati()
        if sCDPath<>"" then
            Data1.DatabaseName = sCDPath & _
            "DirectoryDoveTengoGliMDB\MioMdb.mdb"
            bTuttoOk=True
        Else
            if MsgBox ("Inserire il CD e riprovare!,vbokCancel)=vbCancel
then
                End
            Endif
        Endif
    Loop
End Sub
Ciao
*Roby*

Perfetto!!
 grazie duemilaaaaa !!!!!