Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 7 su 7

Valore variabile pubblica

  1. #1
    OsvaldoLaviosa non è in linea Topo di biblioteca
    In un modulo standard ho scritto questo
    Public strPath As String
    
    Public Function Cartella() As String
    strPath = CurrentProject.Path
    strPath = strPath & "\Documenti\"
    strPath = strPath & Format(Forms!DDT!IDDDT, "000000")
    Cartella = strPath
    End Function
    
    A me serve sfruttare sempre "quel strPath" per vari eventi in maschere, quindi ho scritto per esempio:
    Private Sub CreaCartella_Click()
    Call Cartella
    If Dir(strPath, vbDirectory) = "" Then MkDir strPath
    End Sub
    
    Private Sub DDTFornitore_DblClick(Cancel As Integer)
    Call Cartella
    strPath = strPath & "\" & Me!DDTFornitore
    Application.FollowHyperlink strPath, , True
    End Sub
    
    Private Sub DDTControllo_DblClick(Cancel As Integer)
    Call Cartella
    strPath = strPath & "\" & Me!DDTControllo
    Application.FollowHyperlink strPath, , True
    End Sub
    
    Sembra funzionare tutto, ma qualcosa mi dice che ho scritto qualcosa di "superfluo" e/o "non ortodosso". Potete darmi qualche indicazione?
    ℹ️ Leggi di più su OsvaldoLaviosa ...

  2. #2
    Sgrubak non è in linea Scribacchino
    Ti lascio alcune considerazioni:

    1)Una variabile globale ti espone a diverse possibili magagne: una su tutte, se nei gestori che riporti come esempio ti dimentichi di chiamare il [Call Cartella], sei fregato...

    2)Una Function serve a restituire un valore, e tu non assegni mai il risultato della chiamata. O cambi la function in Sub, e continui con l'uso di una variabile globale o usi una variabile con visibilità limitata ad ogni gestore e a questa assegni il risultato dell function. Considerando quanto al punto 1) direi che far sparire la variabile globale ed usare la Function è la soluzione migliore.
    Public Function Cartella() As String
        Dim strPath as String
        strPath = CurrentProject.Path
        strPath = strPath & "\Documenti\"
        strPath = strPath & Format(Forms!DDT!IDDDT, "000000")
        Cartella = strPath
    End Function
    
    Private Sub DDTFornitore_DblClick(Cancel As Integer)
        Dim pathDDT as string
        pathDDT = Cartella & "\" & Me!DDTFornitore 
        Application.FollowHyperlink pathDDT, , True
    End Sub
    

    3)Tu crei una cartella per ogni DDT? Se così fosse, non è meglio che questa venga creata al salvataggio del DDT stesso, e non demandata al click dell'utente? Se la cartella non esiste, cosa apre il FollwHyperlink? Considerato che non verifichi prima l'esistenza della Path, rischi di generare errori non gestiti.

  3. #3
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Diciamo che non hai ben chiaro come si usano le Funzioni e che differenza sussiste con delle Variabili Public.
    Tu stai mescolando una Variabile Public che potrebbe non servire, come in questo caso, con l'utilizzo di una funzione Public.

    Premesso che è meglio usare la Funzione e non la Variabile in quanto è richiamabile anche in una Query, ad esempio per ricostruire un PATH completo, cosa che non puoi fare con la Variabile...!

    Nel tuo caso dovevi scrivere così nel modulo BAS
    Private strPrivatePath As String
    
    Public Function Cartella(Optional IniPath) As String
    	If IsMissing(IniPath) then
    		strPrivatePath= CurrentProject.Path
    	Else
    		strPrivatePath=IniPath
    	End if
    	strPrivatePath= strPrivatePath& "\Documenti\"
    	strPrivatePath= strPrivatePath& Format(Forms!DDT!IDDDT, "000000")
    	Cartella = strPrivatePath
    End Function
    
    Ho aggiunto il parametro Opzionale in quanto potrebbe essere anche differente... da Currentproject.Path

    Poi la si usa in questo modo:
    Private Sub CreaCartella_Click()
       Dim strPath As String
       strPath=Cartella()
       If Dir(strPath, vbDirectory) = "" Then MkDir strPath
    End Sub
    
    Da usare in una Query
    SELECT *, (Cartella() & CampoNomeFile) AS Percorso
    FROM T1
    
    ℹ️ Leggi di più su @Alex ...

  4. #4
    OsvaldoLaviosa non è in linea Topo di biblioteca
    Quote Originariamente inviato da Sgrubak Visualizza il messaggio
    2)Una Function serve a restituire un valore, e tu non assegni mai il risultato della chiamata. O cambi la function in Sub, e continui con l'uso di una variabile globale o usi una variabile con visibilità limitata ad ogni gestore e a questa assegni il risultato dell function. Considerando quanto al punto 1) direi che far sparire la variabile globale ed usare la Function è la soluzione migliore.
    Public Function Cartella() As String
        Dim strPath as String
        strPath = CurrentProject.Path
        strPath = strPath & "\Documenti\"
        strPath = strPath & Format(Forms!DDT!IDDDT, "000000")
        Cartella = strPath
    End Function
    
    Private Sub DDTFornitore_DblClick(Cancel As Integer)
        Dim pathDDT as string
        pathDDT = Cartella & "\" & Me!DDTFornitore 
        Application.FollowHyperlink pathDDT, , True
    End Sub
    
    Era questo il risultato (di fondo) che volevo ottenere. Grazie per tutte le osservazioni.
    ℹ️ Leggi di più su OsvaldoLaviosa ...

  5. #5
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Fai attenzione alla differenza del codice che ho proposto con l'uso della Variabile Private Esterna, che se non si ha una visione più ampia potrebbe non servire... ma nella sostanza è importante considerare.
    A cosa si applica quella possibilità...?
    A quella parte di PATH che tu hai scritto in modo RIGIDO nel codice...
    strPrivatePath= strPrivatePath& "\Documenti\"
    
    Sviluppando NON è buona cosa rendere rigidi i Percorsi, ma, si predispone una Tabella con i Settings di applicazione, tra cui la struttura di Cartelle da usare.
    Per questo la compilazione dei Path(parziali) si esegue all'apertura compilando le Variabili AMBIENTE e non scrivendo parti di PATH fissi come hai fatto.
    In quest'ottica avreai N stringhe dichiarate PRIVATE che contengono la Radice specifica... che poi usi nelle Funzioni per concatenare il Path Completo.
    ℹ️ Leggi di più su @Alex ...

  6. #6
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Aggiungerei che la cartella "Documenti" non è detto che si chiami così.
    ℹ️ Leggi di più su Brontolo ...

  7. #7
    OsvaldoLaviosa non è in linea Topo di biblioteca
    Tranquillo @Alex. Accanto al database c'è una cartella Documenti dove ci andranno a finire vari pdf esportati. Così come ho anche una cartella Immagini dove carico di volta in volta...ecc...non era questo lo scopo del thread. Mi rendo conto che il titolo proposto depista molto. Di fatto mi serviva un "marchingegno" (quindi la Public Function) che mantenesse una stringa da utilizzare ovunque negli altri oggetti/controlli.
    ℹ️ Leggi di più su OsvaldoLaviosa ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. dichiarare come variabile pubblica la path del database
    Da marco61 nel forum Microsoft Access
    Risposte: 8
    Ultimo Post: 28-03-2019, 14:41
  2. [VB2010] Variabile pubblica non valorizzata da funzione in DLL
    Da il Fenomeno nel forum Visual Basic .Net
    Risposte: 10
    Ultimo Post: 24-09-2012, 16:09
  3. Utilizzo Variabile Pubblica da Form a Modulo
    Da Do85 nel forum Microsoft Word
    Risposte: 3
    Ultimo Post: 09-01-2009, 15:36
  4. Variabile pubblica in modalità multiutente
    Da MorleyMan nel forum Microsoft Word
    Risposte: 9
    Ultimo Post: 28-04-2008, 15:37
  5. Dichiarare variabile Pubblica in Modulo in vb5/6
    Da satriano nel forum Visual Basic 6
    Risposte: 8
    Ultimo Post: 22-03-2006, 20:24