Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258

    problema di percorsi

    Ho un software fatto con access 2.0 su un server.
    I client puntano a z:\cartellacondivisa (che sul server ovviamente sarebbe c:\cartellacondivisa).

    In pratica credo ci sia un errore nella subroutine del programma ma non riesco a capire come risolverlo: in pratica su alcuni client l'apertura dei file con il parametro x = Shell("c:\progra~1\micros~2\office11\excel.exe " & filefine, 3) funziona mentre su altri client no.

    Eppure tutti hanno installato office 2003 che si piazza nella cartella programmi\microsoft office\office11

    l'errore che mi da il debug su alcuni client è proprio sulle stringhe " x = Shell("c:\progra~1\micros~2\office11\winword.exe " & filefine, 3) " e " x = Shell("c:\progra~1\micros~2\office11\excel.exe " & filefine, 3) "

    ma poi perchè c'è quel simbolo?: ~ ????

    mi dareste una mano?

    codice:
    Sub Richiama (Parametro As String, Secondo As Long, Flag As Integer)
        
    'On Error GoTo RichiamaErrore
    
        Dim Path As String, file As String, x As Integer, Tipo As Integer
        Dim filefine As String
        
        Path = DLookup("[Path]", "Procedure", "[Procedura]='" + Parametro + "'")
        file = DLookup("[File]", "Procedure", "[Procedura]='" + Parametro + "'")
        Tipo = DLookup("[Tipo File]", "Procedure", "[Procedura]='" + Parametro + "'")
        
        If Flag = 1 Then
           Path = Path & Mid(Str(Secondo), 2) & "\"
        End If
        
        filefine = Path & file
    
        If Tipo = 1 Then
           If Len(Dir$("z:\luca\win.txt")) <> 0 Then
              x = Shell("c:\progra~1\micros~2\office11\winword.exe " & filefine, 3)
           Else
              x = Shell("c:\winword\winword.exe " & filefine, 3)
           End If
        Else
           If Len(Dir$("z:\luca\win.txt")) <> 0 Then
              x = Shell("c:\progra~1\micros~2\office11\excel.exe " & filefine, 3)
           Else
              x = Shell("c:\excel\excel.exe " & filefine, 3)
           End If
        End If
        
    
    End Sub

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    VBA viene trattato assieme a VisualBasic, nel forum apposito (VisualBasic e .NET Framework).

    Quel simbolo (la tilde) viene utilizzata perchè alcuni sistemi (quelli più vecchi) non riescono a lavorare su nomi di file (e di directory) più lunghi di 8+3 caratteri (8 per il nome più eventuali 3 per l'estensione). Da notare che anche alcune funzioni di Windows non riescono a lavorare con nomi di file lunghi e necessitano dell'utilizzo delle virgolette per delimitarli.

    Siccome i moderni sistemi operativi consentono nomi di file e directory lunghi fino a 255 caratteri è stato introdotto questo metodo per limitare i nomi per quei sistemi che non li accettano.

    Ovviamente, su macchine diverse, il numero che sta dopo la tilde può cambiare.

    Ad esempio, se prima viene creata la directory "C:\Programmi" e poi "C:\Program Files" queste saranno chiamate, rispettivamente,

    1) C:\PROGRA~1
    2) C:\PROGRA~2

    Se viene fatto il contrario, ovviamente l'identificativo 1 verrà assegnato a "Program Files", mentre il 2 a "Programmi".


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    ti ringrazio della risposta esauriente....

    ...ma non mi spiego però perchè anche cambiando il percorso della subroutine in "x = Shell("c:\programmi\microsoft office\office11\excel.exe " & filefine, 3)" alcuni client non li accettano

    ho provato anche creando una cartella c:\luca\ copiandoci dentro il file excel.exe e modificando la sub da " x = Shell("c:\progra~1\micros~2\office11\excel.exe " & filefine, 3)
    " in " x = Shell("c:\luc~1\excel.exe " & filefine, 3)" ma mi dice sempre percorso non trovato


    siamo sempre in ambito xp home e pro e office 2003

  4. #4
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258

    Re: Moderazione

    Originariamente inviato da LeleFT
    Ad esempio, se prima viene creata la directory "C:\Programmi" e poi "C:\Program Files" queste saranno chiamate, rispettivamente,

    1) C:\PROGRA~1
    2) C:\PROGRA~2

    Se viene fatto il contrario, ovviamente l'identificativo 1 verrà assegnato a "Program Files", mentre il 2 a "Programmi".


    Ciao.
    forse risolvo tutto se riesco a capire come cambiare l'assegnazione dei 2 identificativi sui client che danno errore...

    ...dovrei agire molto probabilmente sul regedit..ma non so in quale voce

  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Il registro non c'entra.

    Devi usare le funzioni API apposite per ottenere i nome corto (formato 8.3)
    GetShortPathName
    http://allapi.mentalis.org/apilist/G...PathName.shtml

    Per ottenere quello lungo dal nome corto
    GetFullPathName
    http://allapi.mentalis.org/apilist/G...PathName.shtml

    Ciao

  6. #6
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    Originariamente inviato da gibra
    Il registro non c'entra.

    Devi usare le funzioni API apposite per ottenere i nome corto (formato 8.3)
    GetShortPathName
    http://allapi.mentalis.org/apilist/G...PathName.shtml

    Per ottenere quello lungo dal nome corto
    GetFullPathName
    http://allapi.mentalis.org/apilist/G...PathName.shtml

    Ciao
    purtroppo non posso ricompilare il tutto...per motivi che sarebbero troppo lunghi da spiegare devo trovare una soluzione più veloce.

    ne ho trovate 2, ma per la seconda avrei bisogno di un aiutino:

    1) modificare da c:\progra~1\micros~2\office11\excel.exe a c:\prova\excel.exe installando office 2003 nella cartella prova....questo comporta però la reinstallazione di office 2003 a tutti i client.

    2) far funzionare quel maledetto ELSE perchè così com'è il codice mi da errore già al primo percorso e vorrei che se non trovasse winword o excel nella cartella c:\progra~1\micros~2\office11\ vada nella cartella c:\winword\winword.exe o c:\excel\excel.exe:
    il pezzo incriminato è questo:
    codice:
     
      If Tipo = 1 Then
           If Len(Dir$("z:\luca\win.txt")) <> 0 Then
              x = Shell("c:\progra~1\micros~2\office11\winword.exe " & filefine, 3)
           Else
              x = Shell("c:\winword\winword.exe " & filefine, 3)
           End If
        Else
           If Len(Dir$("z:\luca\win.txt")) <> 0 Then
              x = Shell("c:\progra~1\micros~2\office11\excel.exe " & filefine, 3)
           Else
              x = Shell("c:\excel\excel.exe " & filefine, 3)
           End If
        End If

  7. #7
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da Luca1317
    purtroppo non posso ricompilare il tutto...per motivi che sarebbero troppo lunghi da spiegare devo trovare una soluzione più veloce.
    Veramente a me sembra proprio la soluzione più veloce.
    Qualunque siano i motivi; se il codice è sbagliato, è sbagliato.

    Comunque non entro nel merito...

  8. #8
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    Originariamente inviato da gibra
    Veramente a me sembra proprio la soluzione più veloce.

    capisco la tua osservazione ma fidati...non lo è


    non è che mi daresti una mano a far funzionare sto maledetto ELSE perchè così com'è il codice mi da errore già al primo percorso e vorrei che se non trovasse winword o excel nella cartella c:\progra~1\micros~2\office11\ vada nella cartella c:\winword\winword.exe o c:\excel\excel.exe:

    il pezzo incriminato è questo:
    codice:
     If Tipo = 1 Then
           If Len(Dir$("z:\luca\win.txt")) <> 0 Then
              x = Shell("c:\progra~1\micros~2\office11\winword.exe " & filefine, 3)
           Else
              x = Shell("c:\winword\winword.exe " & filefine, 3)
           End If
        Else
           If Len(Dir$("z:\luca\win.txt")) <> 0 Then
              x = Shell("c:\progra~1\micros~2\office11\excel.exe " & filefine, 3)
           Else
              x = Shell("c:\excel\excel.exe " & filefine, 3)
           End If
        End If

  9. #9
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da Luca1317
    capisco la tua osservazione ma fidati...non lo è
    Non è questione di fidarsi: semplicemente non è un problema mio...

    Originariamente inviato da Luca1317
    non è che mi daresti una mano a far funzionare sto maledetto ELSE perchè così com'è il codice mi da errore già al primo percorso e vorrei che se non trovasse winword o excel nella cartella c:\progra~1\micros~2\office11\ vada nella cartella c:\winword\winword.exe o c:\excel\excel.exe:
    Scusa, non vuoi modificare il codice, che è sbagliato, ma chiedi una soluzione.
    E' un controsenso!!!

    Ciao

  10. #10
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    Originariamente inviato da gibra
    Non è questione di fidarsi: semplicemente non è un problema mio...
    purtroppo lo so...è mio il problema.

    il fatto è che non posso ricompilarlo ma posso cambiare solo quel codice della subroutine. Se vuoi/puoi darmi una mano è bene accetta.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.