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

Discussione: Automazione inserimento Immagini su maschera in FE

  1. #1
    MaxM non è in linea Novello
    Post
    5

    Automazione inserimento Immagini su maschera in FE

    Ciao a tutti, vi chiedo un consiglio: ho un programma di gestione spese a cui per ogni record deve essere inserita la sua ricevuta. L'immagine della ricevuta è inserita con campo "Allegato" che l'utente carica cercandone il percorso con una raccomandazione che non superi i 60kb per non appesantire il DB. Il programma è in rete, il DB è stato diviso con il _BE dati sul server e nei vari client il _FE copiato uguale a tutti con le cartelle linkate con il percorso fisico del srv.
    Ora per liberare il DB dalle immagini sto provando a gestire tutte le immagini in una cartella separata nel server condivisa a tutte le postazioni, lavorando in maschera _FE in VB un campo "immagine" a cui si associa da sola l'immagine della ricevuta che è stata copiata sulla cartella condivisa dall'operatore con il nome dell'ID record che ha creato in quel momento nell'inserimento, per fare questo quindi sul Current con un Me.[campo].Picture = "\\...percorsocartellacondivisa\" & Me.ID.Value & ".jpg" (con un "on error goto xx" che porta ad un file immagine vuota quando l'immagine con il numero id ancora non c'è sennò da errore).
    Questo sistema funziona e si visualizza solo in maschera e non viene memorizzato nella riga del record nel DB e fin qui va bene, ma per l'utente è un po' macchinoso in quanto deve prima creare il nuovo record e annotarsi il numero del ID, poi a termine copiare il file della ricevuta nella cartella condivisa rinominandolo con il numero dell'ID record annotato prima.
    Il mio intento è sempre tramite VB in maschera un tasto "ricevuta" che apre il percorso da scegliere la ricevuta con il suo nome originale e dimensione originale e una volta che è stato selezionato in automatico viene semplicemente copiato sulla cartella condivisa con il nome dell'ID del record attuale e li finisce la sua funzione e l'utente può passare al record successivo senza fermarsi ad annotarsi il numero dell'ID ecc ecc, questo semplificherebbe e velocizzerebbe tutte le operazioni di inserimento spese degli utenti sgraviando dall'operazione di copia ricevuta in manuale con l'attenzione del rinominare correttamente il file e alleggerirne il peso in caso sia superiore a 60k in quanto sulla cartella condivisa non c'è limite di volume. Questo si potrebbe realizzare?
    Vi ringrazio tantissimo. Ciao a presto. MM

  2. #2
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,431
    Non mi è chiaro perchè dici che i File superiori a 60Kb appesantiscono il DB... questa affermazione potrebbe evidneziare un errore progettuale.
    I File Immagine devono essere memorizzati un una Cartella nel Server e, nel DB rimanere SOLO il percorso completo.
    In quel modo non hai alcun appesantimento, i file immagine sono sempre fruibili, puoi archiviare anche PDF ed usare il controllo WebBrowser per l'anteprima.
    Da Access 2013, mi pare, puoi gestire in modo Bound anche i controlli Immagine eventualmente fossero immagini, quindi basta inserire nella form un Controllo iMmagine e come Origine Controllo mettere il campo con il PATH.

    Per la Selezione immagini, farai in modo di aprire il FileDialog per la selezione, al rientro Selezione Effettuata, effettui una Copia del file selezionato nella Cartella Predefinita con l'istruzione
    codice:
    Sub FileCopy(Source As String, Destination As String)
    a quel punto memorizzi il Path DEFAULT & "NomeFile"
    @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.

  3. #3
    MaxM non è in linea Novello
    Post
    5
    Ciao @Alex, ti ringrazio molto della tua risposta. Per il fatto dei 60K per l'allegato era un limite consigliato che è stato deciso per non far gonfiare troppo il DB visto che i record al giorno sono parecchi, questo fin quando gli allegati venivano accorpati nel DB, ora che sto modificando per tenerli in cartella separati il limite non servirà più.
    Ora parliamo del mio quesito, purtroppo non sono ai livelli immaginati per progettare ciò che mi hai suggerito quindi sono bene in difficoltà perchè non ci ho capito niente (viva la sincerità!). PS: utilizzo ancora Access 2007..... sto cercando di trovare presto almeno un 2013 o un 2016.
    Ok, anche tu detti legge che le immagini devono stare esterne al DB e a questo punto per me diventa una certezza da realizzare, però vorrei riproporti la mia "soluzione pratica per gli utenti" che volevo realizzare in maschera per un fattore di usability, ovvero le immagini delle ricevute saranno tutte in una cartella esterna sul srv e fin qui ok, ma il fatto di adottare un pulsante "allega ricevuta" in maschera gestito in VB che apre una finestra di dialogo per scegliere il file richiesto (che può essere p.es. sul Desktop) e una volta selezionato con OK la finestra si chiude e la funzione copia il file nella cartella condivisa assegnandogli come nomefile il numero dell'ID del record in maschera e il processo si conclude con l'immagine del file che viene visualizzata nel campo "immagine" (che legge in cartella se c'è un file .jpg col numero dell'ID del record) che viene quindi trovato perchè appena copiato, sarebbe una cosa perfetta ma non so come poterla realizzare.
    Riassumendo in pratica:
    1- in maschera un pulsante "Inserisci ricevuta" che con Click in codice fa aprire una finestra di dialogo che fa scegliere il file richiesto e attende.
    2- a file selezionato il codice prosegue e lo copia nella cartella condivisa dandogli come nome il numero dell'ID del record in uso e lì la funzione si conclude.
    3- in maschera c'è il campo "immagine" gestito in VB Current che monitorizza nella cartella condivisa che esista un file che abbia come nome il numero ID record, se c'è lo visualizza, se non c'è visualizza una immagine standard "ricevuta non inserita" (questo codice l'ho già fatto e funziona).
    La mia richiesta quindi è sul punto 1 e 2, come si potrebbe realizzare? Spero di essermi spiegato bene.
    Ti ringrazio tantissimo @Alex. A presto. Ciao MM

  4. #4
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,431
    Non devi monitorare il contenuto della cartella... il presupposto è che la cartella non sia accessibile se non dal tuo applicativo... quindi tu copi i file e tu li cancelli... di conseguenza gestisci i dati nel database al fine di averli coerenti.
    Il tuo DB sarà ul tuo riferimento con i file memorizzati e deve bastarti quello...
    Ovviamente poi gestirai l'errore nel caso il file non sia presente... ma solo all'occorrenza.

    Per selezionare i file devi usare, come ti go già detto Filedialog che trovi documentato qui:
    https://docs.microsoft.com/en-us/off...ion.filedialog

    La finzione CopyFile la trovi documentata qui:
    https://docs.microsoft.com/it-it/off...copy-statement

    Ora devi approfondire le cose e mettere insieme i concetti.
    @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.

  5. #5
    MaxM non è in linea Novello
    Post
    5
    Grazie @Alex, ti ringrazio molto, ora approfondisco le 2 parti e ti faccio sapere.
    Ciao. MM

  6. #6
    MaxM non è in linea Novello
    Post
    5
    Quote Originariamente inviato da @Alex Visualizza il messaggio
    Per selezionare i file devi usare, come ti go già detto Filedialog che trovi documentato qui:
    https://docs.microsoft.com/en-us/off...ion.filedialog
    Ciao @Alex, il Filecopy in destinazione "foldersrv" & Me.ID.Value & ".jpg" funziona e il file in cartella condivisa ha il nome ID e qui ti ringrazio, ma ho un problema per la finestra di dialogo, ho creato un tasto per la finestra ma al Click appare questo:
    (Devo scriverlo in testo perchè non trovo la possibilità di allegarti lo screenshot...)

    Evidenzia in blu la prima riga il nome della prima Variabile: fDialog As Office.FileDialog

    Finestra messaggio con scritto:
    Errore di compilazione
    Tipo definito dall'utente non definito

    Non riesco a capire cosa devo fare, che sia causa dell'Access 2007 antiquato e ci vorrebbe almeno il 2013?
    Grazie @Alex. Ciao MM
    Ultima modifica di MaxM; 27-06-2020 19:56 

  7. #7
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,431
    Devi aggiungere i riferimenti alla libreria Office...
    @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.

  8. #8
    MaxM non è in linea Novello
    Post
    5
    Ciao @Alex, allora per l'esempio finestra che dava errore sul riferimento ho aggiunto la libreria "MS Office 12.0 Object Library" e non ha più dato l'errore, poi ho modificato il codice perchè l'esempio porta a popolare una Casella di Riepilogo cosa che non mi serviva e quindi ho eliminato la parte della casella e ci ho unito il FileCopy e come nome del SourceFile gli ho assegnato la variabile del file scelto con la finestra. Funziona perfettamente e il risultato è esattamente come volevo fare! Ecco il codice dei 2 esempi come l'ho unito: (PS "Finestra" è il tasto inserimento Ricevuta per la prova)
    codice:
    Private Sub Finestra_Click()
    Dim fDialog As Office.FileDialog
    Dim varFile As Variant
    Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
    With fDialog
    .AllowMultiSelect = False
    .Title = "Please select one or more files"
    .Filters.Clear
    .Filters.Add "Immagini JPG", "*.jpg"
    .Filters.Add "Immagini PNG", "*.png"
    .Filters.Add "Immagini PDF", "*.pdf"
    .Filters.Add "All Files", "*.*"
    If .Show = True Then
    For Each varFile In .SelectedItems
    FileCopy varFile, "\\srvdc\storage\spese\ricevute\" & Me.ID.Value & ".jpg"
    Next
    Else
    MsgBox "Selezione Ricevuta Annullata"
    End If
    End With
    Note.SetFocus
    End Sub
    Ti ringrazio davvero moltissimo @Alex!!! A presto. MM
    Ultima modifica di @Alex; 29-06-2020 07:19 

+ Rispondi al Thread

Permessi di invio

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