Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Dova salvare il database access della mia applicazione?

    Ciao a tutti,
    considerando che in Windows 7 (e anche in Vista) pare non sia possibile (nè per l'utente e nè per il software) modificare file contenuti nelle cartelle "C:\Programmi\..." dove mi consigliate di posizionare un semplice database access (in lettura/scrittura) del mio applicativo?

    Ovviamente il mio è un software mono-postazione, eventualmente utilizzato da diversi utenti Windows.

    Grazie a quanti vorranno fornirmi indicazioni in merito!

  2. #2
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    Salvarlo nella cartella Environment.GetFolderPath(Environment.SpecialFolde r.ApplicationData))

    Vedi anche questo per altri eventuali posti che potrebbero andare bene.
    I got the remedy

  3. #3
    Grazie mille,
    credo proprio che alla fine utilizzerò il path restituito da "CommonApplicationData" (visibile da tutti gli utenti).

  4. #4
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    prego
    I got the remedy

  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Mah... Personalmente sono un po' critico nei confronti di Microsoft sulla scelta delle cartelle per determinati scopi, e non mi piace seguire pedissequamente l'indicazione data da loro che, in molti casi, trovo completamente sbagliata (ma siamo abituati già da tempo a questo, tralasciamo...).

    Ad esempio la costante CommonApplicationData corrisponde alla cartella ProgramData che, per impostazione predefinita del sistema operativo, è nascosta (come tante altre) e quindi non è visibile dall'utente.

    Ora, sappiamo tutti che gli utenti non sono sviluppatori (al contrario, più spesso sono utonti del computer) e non sanno nemmeno che esiste quella cartella.
    Ma pur sapendolo, dovrebbero anche indovinare che contiene dati per loro importanti (e questo di certo non lo sanno).

    Per contro, si sentono continuamente raccomandare (e rimproverare di non averlo fatto) di eseguire i backup dei dati, e detto fra noi ciò vale ancor di più e soprattutto per un applicazione di tipo desktop, in quanto nelle applicazioni client-server i dati risiedono sempre sul server.

    Bene, allora adesso Microsoft dovrebbe quindi spiegarci questo:

    Come fa l'utente a fare il backup di una cartella che non vede?

    Ovviamente NON può!

    Morale della favola, in caso di rottura del disco, l'utente avrà comunque perso tutti i dati che stanno nella cartella ProgramData.

    Quello che invece l'utente, in linea di massima, sa è che la cartella con i dati che lui 'maneggia' è quella dei Documenti.
    Ecco perchè io uso sempre la cartella Documenti cioè la costante MyDocuments in cui creo una cartella per la mia applicazione, e all'utente basta fare il backup di questa cartella.

    Se l'applicazione deve essere utilizzata da più utenti dello stesso computer, allora uso la cartella Utenti\Pubblica.

    Of course, IMHO


  6. #6
    Grazie Gibra per il tuo contributo!

    Concordo con te sull'eventuale utilizzo della costante "MyDocuments" da utilizzare al richiamo di "Environment.GetFolderPath".

    Però mi sorge un dubbio: la cartella restituita in questo caso non è già condivisa da tutti gli utenti del computer?

    Per quale motivo citi la possibilità di lavorare in "Utenti\Pubblica"?
    E, fra l'altro, quale costante utilizzi per ottenerla?

  7. #7
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da Lucato1979
    Grazie Gibra per il tuo contributo!

    Concordo con te sull'eventuale utilizzo della costante "MyDocuments" da utilizzare al richiamo di "Environment.GetFolderPath".

    Però mi sorge un dubbio: la cartella restituita in questo caso non è già condivisa da tutti gli utenti del computer?
    No, quando si crea un nuovo utente del computer, ad ogni utente viene assegnata una propria cartella Documenti.
    L'utente corrente vedrà comunque solo la cartella Documenti, ma il nome reale della cartella è Documenti - <nomeutente> .

    Tra l'altro, l'utente amministratore del PC può decidere di non rendere pubblica la propria cartella Documenti, in questo caso solo lui può accedervi, e le conseguenze di tale impostazione sono facilmente intuibili...

    Questa è una condizione che non puoi conoscere, in fase di installazione.
    Non solo, come fai a prevedere se l'amministratore del computer crea nuovi utenti?
    Oppure che elimini un utente (licenziato?) e lo sostituisca con un'altro, anche temporaneamente (Malattia? Infortunio?, ...)
    Anche qui non puoi prevedere nulla, quindi devi impostare l'applicazione affinchè sia predisposta a tale evenienza.


    Originariamente inviato da Lucato1979
    Per quale motivo citi la possibilità di lavorare in "Utenti\Pubblica"?
    E, fra l'altro, quale costante utilizzi per ottenerla?
    Era solo un esempio per farti capire il concetto sul fatto che la cartella deve essere comune a tutti gli utenti.

    In realtà, in un'applicazione mono-utente, ma utilizzata da più utenti nello stesso computer, dovrai utilizzare due cartelle diverse:
    1. una per il database e (opzionalmente, nel caso vada aggiornata) la guida CHM.
    2. l'altra per le impostazioni relative all'utente corrente.

    Faccio un'esempio:

    Io sviluppo quasi esclusivamente applicazioni aziendali multi-utente in cui il database risiede sempre sul server aziendale. Qui non vi sono alternative.

    Gli unici dati che tengo sul Client sono il file di guida CHM e quello delle Preferenze dell'utente come: colori, cartelle di output per i documenti generati, impostazioni delle griglie, e così via.
    Questi file li installo appunto nella cartella MyDocuments\MiaApplicazione\ dell'utente corrente.


    Nel tuo caso, invece, che riguarda database basato su file, come quello Access, e che viene utilizzato in locale da più utenti dello stesso computer, il file deve essere messo in una cartella comune e la cartella più 'papabile' è appunto la \Utenti\Pubblica\ (in realtà si chiama \Users\Public).
    Purtroppo non esiste una costante per questa cartella, ma esiste la costante
    CommonDocuments
    che si riferisce a
    C:\Users\Public\Documents

    Quindi, ricapitolando, la tua applicazione dovrebbe utilizzare due cartelle:
    1) Per le Preferenze dell'utente nella cartella
    MyDocuments\MiaApplicazione\
    così ogni utente avrà le proprie preferenze.

    2) Per database Access e guida CHM nella cartella
    CommonDocuments\MiaApplicazione\
    che saranno accessibili da tutti gli utenti.


  8. #8
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    Non per fare polemica, ma quello che dice gibra non ha senso.
    Provate a chiedere a 10 utenti come fai a fare il backup e quali cartelle salvi.
    Beh 7-10 non conoscono nemmeno la parola backup il resto ti risponderà con risposte diverse.
    Questo per dire che il problema del backup non si risolve spostando il db in documenti o da un'altra parte.

    Io invece ti suggerisco di fare una semplice procedura(tipo bottone "Salva dati") che zippa l'mdb e chiede all'tente dove salvarlo. In questo modo l'utente non ha consocenza delle varie cartelle.
    Oppure, con un semplice click("Visualizza cartella dati") li fai vedere dove è salvato l'mdb e si arrangia lui a farlo.
    Oppure crei un menu "Backup dati" dove inserisci entrambe le procedure.
    ciao
    I got the remedy

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 © 2026 vBulletin Solutions, Inc. All rights reserved.