+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Gestione dei record

  1. #1
    Jocman non è in linea Scolaretto
    Post
    290

    Gestione dei record

    Ciao a tutti
    Il titolo è un pò generico, ma non sapevo cosa specificare...
    Un altro ufficio mi ha chiesto di fargli un DB specifico per le loro esigenze.
    Tra i requisiti (alcuni dei quali mi richiederanno un pò di sforzi per essere realizzati - semmai ci riuscirò), quello che mi lascia un pò perplesso è il tipo di gestione che ne vorrebbero fare.

    - Deve essere compilabile / editabile solo da alcuni (2 o 3 persone)
    - Consultabile da tutti

    e queste due cose penso di riuscire a gestirle in qualche modo.

    Però poi mi è stato chiesto se è possibile modificare (quindi editare) i record ma non cancellarli

    Forse non capisco io la domanda, ma ritengo che se un record possa essere editabile di conseguenza può essere cancellato.

    Oppure è fattibile? Perchè in questo caso non saprei dove indirizzarmi....

    La loro ratio dovrebbe essere quella di non perdere le informazioni; ma se io non sono autorizzato all'editing, non posso cancellare niente.
    Se sono abilitato all'editing, ma ti cancello tutti i campi, quello che verrà richiamato sarà un record senza informazioni (se non la chiave primaria....), e quindi all'atto pratico te l'ho cancellato....

    Andrea

  2. #2
    L'avatar di almorel
    almorel non è in linea Scribacchino
    Post
    604
    Ciao Jocman,
    le possibilità sono molteplici, in ogni maschera si può dare il permesso di aggiungere, editare o cancellare record e questo può essere fatto in funzione
    dell'accesso (utente e classe di abilitazione da apposita maschera). Ovviamente chi è abilitato ad editare può anche svuotare il record, almeno per i campi
    non obbligatori. Per scoraggiare si possono mettere nella tabella i campi data e utente che ha fatto l'ultima modifica, oppure una tabelle apposita per il log degli eventi.
    Comunque, se c'è timore di sabotaggi ... è dura, bisogna proteggere il file dati in modo che che non possa essere aperto da chiunque.
    Un sistema con le caratteristiche di sicurezza, però, richiede una certa conoscenza di Access e Vba.
    Cosa intendi con: "Deve essere compilabile" ? Se ti riferisci all'applicazione si può generare la versione MDE o ACCDE che non può essere modificata dall'utente,
    ma può girare solo sotto Acess o sotto il suo runtime (gratuito, scaricabile).
    In rete trovi degli articoli sulla sicurezza dell'applicazione e dei dati.
    Cordiali saluti.
    Alberto aka Almor

  3. #3
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,133
    Non ti hanno chiesto nulla di strano.

    Si tratta di impostare una Gestione Utenti, anche semplificata se non serve, con 2 Utenti ovviamente a gestione LOGIN, normalmente è meglio una gestione utenti più funzionale... ma vedi tu.

    Ci sarà un Utente con i permissivi in ReadOnly e quello con Read/Write.

    Quì se vuoi trovi un Esempio:
    LOGIN e SICUREZZA FORM

    Saluti
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  4. #4
    Jocman non è in linea Scolaretto
    Post
    290
    Grazie ad entrambe per le risposte.
    Ovviamente andrò a leggere i suggerimenti segnalatimi da Alex, che di imparare non si finisce mai

    Sulla gestione Utenti si, d'accordo, alcuni avranno il ReadOnly e altri il Read/Write. Anche se non sono ferrato in tal senso, avevo fatto in passato qualcosa di funzionale, giusto per sperimentare; e visto che non è richiesta chissà che sicurezza in questo caso, penso di fare in quel modo (in pratica gli abilito/disabilito campi, funzioni, etc a seconda di chi accede).

    Scusatemi però se insisto, sicuramente ho impostato male il post iniziale.... Io credo che loro sperino in un qualcosa di tipo .... superuser: cioè, anche chi ha potere Read/Write non può cancellare il record.

    Ok, mi posso inventare un modo per distinguere questo "superuser" da tutti gli altri, e abilitare solo a questo il pulsante "Elimina record", o chiedere una password per procedere con la cancellazione dopo aver premuto il pulsante.....

    Però, pur facendo così, chi ha potere Read/Write danno ne può fare lo stesso, no? Cancella il contenuto dei campi e il risultato è lo stesso...

    Quindi in definitiva l'unica risposta sensata che potrei dare ai colleghi è: si, io vi abilito solo tizio e caio all'editing, ma se sti due sono deficienti vi cancellano tutto lo stesso.

    O sbaglio?

    Andrea

  5. #5
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,133
    Si ma non è un problema... basta impostare correttamente le cose.
    Guarda quel demo fa già tutto.
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  6. #6
    Jocman non è in linea Scolaretto
    Post
    290
    Ho scaricato la tua demo ed è eccezionale
    Me la sto stampando e studiando un pò, così magari riesco a dare qualcosa in più a quello che faccio in ufficio.
    Soprattutto per la gestione multiutente in contemporanea (che non faccio attualmente perchè non sono in grado)

    Grazie

    Andrea

  7. #7
    Jocman non è in linea Scolaretto
    Post
    290
    Sto ancora studiandomi la gestione Utenze di Alex, ma siccome i colleghi dell'ufficio avrebbero bisogno di iniziare a lavorare entro la fine del mese con il DB che mi hanno chiesto (e siccome voglio comprendere per bene la struttura di quanto condiviso da Alex) per il momento sto cercando di aggirare l'ostacolo "tipi di utenti" per poi ritornarci (senza pressione dei colleghi) utilizzando il materiale di Alex.

    Non avendo chissà che livello di conoscenza in programmazione, ho pensato di agire sulla possibilità di impostare le forms in sola lettura.
    Quindi all’apertura del DB verifico se chi è entrato è Amministratore o Utente:

    codice:
    If Me.chkAdmin = True Then    'L'utente è ADMIN e può fare tutto
        Me.lblUtente.Caption = "AMMINISTRATORE"
        Me.lblUtente.ForeColor = RGB(23, 200, 89)
        
        With Form
            .AllowDeletions = True
            .AllowAdditions = True
            .AllowEdits = True
        End With
        
    End If
        
    
    If Me.chkAdmin = False Then   'L'utente è USER e può solo consultare
        Me.lblUtente.Caption = "UTENTE"
        Me.lblUtente.ForeColor = RGB(255, 0, 0)
        
        With Form
            .AllowDeletions = False
            .AllowAdditions = False
            .AllowEdits = False
        End With
    
    End If
    La cosa sembra funzionare, nel senso che l’amministratore può gironzolare per le maschere e fare quello che gli pare (almeno fino ad ora mi sembra così), mentre l’Utente può solo leggere ma non modificare i campi.

    Dopo aver richiamato un record, ho bisogno di mostrare, in due ListBox: nella prima il contenuto della cartella di riferimento del record (che conterrà delle sottocartelle) e nella seconda ListBox (facendo doppio click sulle voci della prima ListBox) il contenuto delle varie sottocartelle.
    Per fare ciò, utilizzo due funzioni che ho trovato in rete gironzolando qua e là:

    La prima ListBox ha come origine una tabella contenente l’elenco delle sole cartelle cui il record fa riferimento (al cui interno ci sono sottocartelle e files liberi) , che viene generata dalla funzione:

    codice:
    Public Sub Folder(strPath As String)
    
    On Error GoTo errorHandler
        
    If Len(strPath & vbNullString) = 0 Then Exit Sub
    
     DBEngine(0)(0).Execute "delete * from tblCartelle", dbFailOnError
     
     Dim strFile     As String
     Dim i           As Integer
    
     strFile = Dir(strPath, vbDirectory)
     i = 0
    
     DBEngine.BeginTrans
    
     Do While strFile <> ""
         If (GetAttr(strPath & strFile) And vbDirectory) = vbDirectory Then
             If strFile <> "." And strFile <> ".." Then
                 
                  DBEngine(0)(0).Execute "INSERT INTO tblCartelle (Cartella) VALUES ('" & strFile & "')", dbFailOnError
                 
                   i = i + 1
             End If
         End If
         strFile = Dir
     Loop
    
     DBEngine.CommitTrans
     
    ext_errorLoadAccountHandler:
        Exit Sub
    
    errorHandler:
    
       With Err
           DBEngine.Rollback
           MsgBox "ERR#" & .Number _
                & vbNewLine & .Description _
                , vbOKOnly Or vbCritical
         End With
         Resume ext_errorLoadAccountHandler
    
    End Sub
    Questa prima funzione è richiamata da:

    codice:
    Call Folder(DLookup("Server", "tblSistema") & "\" & Me.txtNrPratica & "\")
    Poi, facendo doppio click su una voce della prima ListBox, richiamo la funzione che mi popola in maniera dinamica l’origine della seconda ListBox:

    codice:
    Public Function FillListFiles(ctl As Object, Startpath As String)
        
        Dim MyPath  As String
        Dim MyName  As String
        Dim MyRowS  As String
    
        If Not (TypeOf ctl Is Access.ComboBox Or TypeOf ctl Is Access.ListBox) Then
            MsgBox "L'oggetto passato non è una COMBOBOX o una LISTBOX", vbCritical
            Exit Function
        End If
        If ctl.RowSourceType <> "Value List" Then
            MsgBox "Imposta il TIPO ORIGINE RIGA come Elenco Valori", vbCritical
            Exit Function
        End If
        ctl.RowSource = ""
        MyPath = Startpath
        MyName = Dir(MyPath)
        Do While MyName <> ""
            MyRowS = MyRowS & MyName & ";"
            MyName = Dir
        Loop
        MyRowS = Left(MyRowS, Len(MyRowS) - 1)
        
        ctl.RowSource = MyRowS
        
    End Function
    La seconda funzione la richiamo con la riga:

    codice:
    Call FillListFiles(Me.lstCartella02, (DLookup("Server", "tblSistema") & "\" & Me.txtPratica & "\" & Me.lstCartella01.Column(0) & "\"))
    Veniamo al problema che riscontro.
    Se entro come Amministratore, la navigazione nelle ListBox avviene come voglio, ma se entro come Utente no: infatti la seconda ListBox si popola con l’elenco dei files contenuti nella cartella principale (cioè i files liberi contenuti nella cartella principale della ListBox 1)

    Ho riscontrato che il problema è nella genesi del percorso di ricerca utilizzato per generare la ListBox nr. 2

    Infatti, come amministratore la funziona va a creare l’elenco dei file, ad esempio, in:
    D:\Archivio\123\Sottocartella1\

    Mentre come Utente:

    D:\Archivio\123\\

    Suppongo che il tutto sia da ricondurre ai vari .Allow etc delle forms. Ma non capisco perché. Anche se l’Utente non ha diritto di modifica, quando clicco sulla prima ListBox, non sto modificando nulla (suppongo); mi aspetterei, al limite, di ricevere un messaggio di errore nel momento in cui genero l’elenco per popolare la seconda ListBox (ma forse neanche, perché non sto agendo su nessun record….)

    A parte la mia ignoranza, cosa sto sbagliando?

    Andrea

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi