aprile file da sottomaschera con pulsante oppure doppioclick

Anonimo
2015-08-30T09:24:57+00:00

salve a tutti

da un vecchio post grazie all'amico Sandro Peruz, per cercare di gestire gli allegati esternamente al db, sto cercando di gestire dei file creati ed assegnarli a delle pratiche.

All'interno di una cartella ho dei file .dotm, modelli in word da compilare e salvare in formato .docx oppure pdf.

Questi modelli devono essere abbinati ad una pratica (ogni id) inseriti in diversi momenti (date)

Pertanto procedo con la creazione delle tabelle mettendole in relazione una a molti, cioè una pratica a molti modelli:

nella maschera pratiche ho inserito un pulsante dove mi apre la maschera elenco_modelli per aprire con altro comando il relativo file

Una volta compilato  e salvato il modello viene caricato ed abbinato alla pratica.

Infine con un comando oppure su doppio click su nome_file aprire il relativo file

Provo a postare i files, purtoppo da adattare al proprio pc.

http://1drv.ms/1Iv4wcr

Magari, con il vs aiuto, riuscire a scaricare il db e la relativa cartella contenenti i file (modelli) su qualsiasi pc e funzionare direttamente.

Grazie a voi tutti

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2015-09-04T17:09:45+00:00

ciao NebbiaDB,

non serve l'opzione Group by nella query.

non serve incorporare la maschera nel report.

crei una semplice query di selezione con questo sql ad esempio :

SELECT modelli.id_pratiche,

            elenco_pratiche.registro,

           [myFolder] & [nome_file] AS fullpath

FROM elenco_pratiche INNER JOIN modelli ON elenco_pratiche.id_pratiche = modelli.id_pratiche

ORDER BY modelli.id_pratiche;

concatenando il path con il folder così mostri nel report il nome completo del file.

crei un report in cui raggruppi per registro che non significa che raggruppare per pratica.

sul command button che chiamerai ad esempio cmdRpt e non comando16 sfrutti il parametro where per aprire il report esattamente sul record che stai vedendo sulla maschera.

DoCmd.OpenReport "modelli", acViewPreview, , whereCondition:="id_pratiche=" & Me.id_pratiche

se il report viene aperto senza clausola where raggruppi sempre per registro, ma vedi in sequenza tutti le pratiche con i relativi modelli.

un po' così : http://1drv.ms/1KvxOiq   Gestione_Pratiche2.2.accdb.

ciao, Sandro.

La risposta è stata utile?

0 commenti Nessun commento

46 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-08-31T17:31:58+00:00

    ciao NebbiaDB,

    mmmm...non mi sembra di avere trovato nulla di quanto preparato nel db che alleghi.

    ho cercato di sistemartelo con questa logica.

    Ho vincolato l'inserimento dei modelli alla compilazione della maschera principale, in particolare al controllo oggetto che se non è compilato non ti consente di scegliere alcun file.

    Cliccando su nuovo inserisci un nuovo record, e con salva/modifica, salvi il record inserito assegnando in automantico il progressivo e con modifica lo modifichi.

    Il command button è uno solo e a seconda dello status della form esegue una o l'altra azione.

    hai due pulsanti per muoverti tra i records della form e se il record non è salvato non ti muovi, questo per evitare modifiche accidentali.

    Ho eliminato i pulsanti di spostamento ma una routine e due caselli di testo ti indano la posizione del record corrente all'interno del recordset.

    fai qualche prova...dai test che ho eseguito mi sembra sia ok, ma non escludo ci possano essere di bugs...

    http://1drv.ms/1NSJnja  Gestione_Pratiche2.accdb

    facci sapere.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-08-31T11:27:14+00:00

    Ciao Sandro,

    ho provato, però con risultati non tanto positivi...

    ti post il db se riesci a dare uno sguardo :-) http://1drv.ms/1IytqYF

    Grazie

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-08-31T09:06:05+00:00

    ciao NebbiaDB,

    prova anche così.

    lascia invariato il recordSource della maschera pratiche,

    inserisci tre command buttons.

    1)cmdPrevious per spostarsi al record precedente

    2)cmdNext per spostarti al records successivo

    1. cmd nuovo per inserire un nuovo record.

    comandi lo spostamento dei records solamente tramite command buttons, eliminando il selettore di records. ( a sviluppo ultimato)

    Assegni il progressivo su salvataggio del record in automatico.

    ci sarebbero ulteriori cosettine da migliorare, tipo abilitare i command buttons solo quando serve e/o necessario ad esempio...

    Option Compare Database

    Option Explicit

    Dim strCaption As String

    Private Sub cmdCaricaVerbale_Click()

    If Me.Dirty Then

        MsgBox "prima ci caricare il modello salva le modifiche", vbCritical, "informazione"

        Exit Sub

    End If

    If Len(Me.oggetto & vbNullString) = 0 Then

        MsgBox "oggetto non compilato", vbCritical, "informazione"

        Exit Sub

    End If

    Dim strPathFile  As String

    strPathFile = cmdFileDialog()

     If strPathFile <> vbNullString Then

         Me.sm_verbali.Form.AllowAdditions = Not Me.sm_verbali.Form.AllowAdditions

         Me.sm_verbali.SetFocus

         DoCmd.GoToRecord acActiveDataObject, , acNewRec

         Dim intSlash As Integer

         Dim strFile  As String

         Dim strPath  As String

         intSlash = InStrRev(strPathFile, "")

         strFile = Right$(strPathFile, Len(strPathFile) - intSlash)

         strPath = Left$(strPathFile, intSlash)

         Me.sm_verbali!nome_file = strFile

         Me.sm_verbali!myFolder = strPath

         Me.sm_verbali.Form.AllowAdditions = Not Me.sm_verbali.Form.AllowAdditions

     End If

    End Sub

    Private Sub cmdEdits_Click()

    If Len(Me.oggetto & vbNullString) = 0 Then

        MsgBox "oggetto non compilato", vbCritical, "informazione"

        Exit Sub

    End If

    If Me.Dirty Then

            If IsNull(Me.registro) Then

                Me.registro = Format(Nz(Left(DMax("[registro]", "[elenco_pratiche]", "[registro] like '????/" & Format(Date, "yyyy") & "'"), 4), 0) + 1, "0000") & "/" & Format(Date, "yyyy")

            End If

            Me.Dirty = Not Me.Dirty

    End If

    Me.AllowAdditions = Not Me.AllowAdditions

    Me.AllowEdits = Not Me.AllowEdits

    strCaption = IIf(Me.AllowAdditions Or Me.AllowEdits, "Salva", "Modifica")

    Me.cmdEdits.Caption = strCaption

    End Sub

    Private Sub cmdNext_Click()

    moveRecords 2

    End Sub

    Private Sub cmdNuovo_Click()

    If Not Me.AllowAdditions Or Me.AllowAdditions Then

        Me.AllowAdditions = Not Me.AllowAdditions

        Me.AllowEdits = Not Me.AllowEdits

    End If

    DoCmd.GoToRecord , , acNewRec

    strCaption = IIf(Me.AllowAdditions Or Me.AllowEdits, "Salva", "Modifica")

    Me.cmdEdits.Caption = strCaption

    End Sub

    Private Sub cmdPrevious_Click()

    moveRecords 1

    End Sub

    Private Sub Comando16_Click()

        DoCmd.OpenForm "elenco_modelli", acNormal, "", "", , acNormal

    End Sub

    Private Sub Comando28_Click()

    If Len(Me.sm_verbali!nome_file & vbNullString) = 0 Then

        MsgBox "nessun file selezionato o caricato!" & _

                vbNewLine & " Carica o seleziona un file esistente!", vbCritical, "Attenzione"

        Exit Sub

    End If

    Dim ret As Integer

    ret = Shell("rundll32.exe url.dll,FileProtocolHandler " & Me.sm_verbali!myFolder & Me.sm_verbali!nome_file, vbNormalFocus)

    'Dim objFSO As Object

    '    Dim objFolder As Object

    '    Dim objFile As Object

    '    Dim objSubfolder As Object

    '    Dim colSubfolders As Object

    '    Dim wshshell As Object

    '    Dim bln As Boolean

    '    Set wshshell = CreateObject("wscript.shell")

    '    Set objFSO = CreateObject("Scripting.FileSystemObject")

    '    Set objFolder = objFSO.GetFolder("C:\Users\nebbia\Desktop\cartellafile")

    '    Set colSubfolders = objFolder.Subfolders

    '    On Error Resume Next

    '    For Each objSubfolder In colSubfolders

    '        For Each objFile In objSubfolder.Files

     '           wshshell.Run """" & objSubfolder.Path & "" & nome_file.Value & """"

    '            If Err.Number = 0 Then

    '                bln = True

    '                Exit For

    '            End If

    '            Err.Number = 0

    '        Next

    '    Next

    '    If bln = False Then

    '        MsgBox "File non trovato"

    '    End If

    '    Set wshshell = Nothing

    '    Set objSubfolder = Nothing

    '    Set colSubfolders = Nothing

    '    Set objFile = Nothing

    '    Set objFolder = Nothing

    '    Set objFSO = Nothing

    End Sub

    Sub moveRecords(ByVal moveType As Integer)

    On Error GoTo errorHandler

    If Me.AllowAdditions Or Me.AllowEdits Then

         MsgBox "Maschera non salvata....!" & _

                vbNewLine & "Salva i dati e procedi", vbInformation, "Avviso"

        Exit Sub

    End If

    Select Case moveType

        Case 1

            DoCmd.GoToRecord , , acPrevious

        Case 2

            DoCmd.GoToRecord , , acNext

    End Select

    exitErrHandler:

        Exit Sub

    errorHandler:

        With Err

            MsgBox "ERR#" & .Number _

                 & vbNewLine & .Description _

                 , vbOKOnly Or vbCritical

          End With

          Resume exitErrHandler

    End Sub

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-08-31T08:25:49+00:00

    ciao NebbiaDB.

    prova a vedere se cos' potrebbe andare.

    imposta bloccato si a tutti i controlli della sottomaschera, imposta questo :

    SELECT * FROM elenco_pratiche;

    come recordSource della maschera principale  e modifica come segue il codice della maschera principale (lascio commentato tutta la parte relativa al wsh) :

    Option Compare Database

    Option Explicit

    Dim bool As Boolean

    Private Sub cmdCaricaVerbale_Click()

    If Len(Me.oggetto & vbNullString) = 0 Or Len(Me.registro & vbNullString) = 0 Then

    MsgBox "oggetto mancate o registro mancante", vbCritical, "attenzione"

    Exit Sub

    End If

    Dim strPathFile  As String

    strPathFile = cmdFileDialog()

     If strPathFile <> vbNullString Then

         Me.sm_verbali.Form.AllowAdditions = Not Me.sm_verbali.Form.AllowAdditions

         Me.sm_verbali.SetFocus

         DoCmd.GoToRecord acActiveDataObject, , acNewRec

         Dim intSlash As Integer

         Dim strFile  As String

         Dim strPath  As String

         intSlash = InStrRev(strPathFile, "")

         strFile = Right$(strPathFile, Len(strPathFile) - intSlash)

         strPath = Left$(strPathFile, intSlash)

         Me.sm_verbali!nome_file = strFile

         Me.sm_verbali!myFolder = strPath

         Me.sm_verbali.Form.AllowAdditions = Not Me.sm_verbali.Form.AllowAdditions

     End If

    End Sub

    Private Sub cmdProgressivo_Click()

    If Len(Me.registro & vbNullString) = 0 Then

    Me.registro = Format(Nz(Left(DMax("[registro]", "[elenco_pratiche]", "[registro] like '????/" & Format(Date, "yyyy") & "'"), 4), 0) + 1, "0000") & "/" & Format(Date, "yyyy")

    Me.Dirty = False

    End If

    End Sub

    Private Sub Comando16_Click()

        DoCmd.OpenForm "elenco_modelli", acNormal, "", "", , acNormal

    End Sub

    Private Sub Comando28_Click()

    If Me.sm_verbali.Form.RecordsetClone.RecordCount = 0 Then

        MsgBox "non si sono files selezionabili e/o da aprire", vbCritical, "Avviso"

        Exit Sub

    End If

    If Len(Me.sm_verbali!nome_file & vbNullString) = 0 Then

        MsgBox "nessun file selezionato o caricato!" & _

                vbNewLine & " Carica o seleziona un file esistente!", vbCritical, "Attenzione"

        Exit Sub

    End If

    Dim ret As Integer

    ret = Shell("rundll32.exe url.dll,FileProtocolHandler " & Me.sm_verbali!myFolder & Me.sm_verbali!nome_file, vbNormalFocus)

    'dim objFSO As Object

    '    Dim objFolder As Object

    '    Dim objFile As Object

    '    Dim objSubfolder As Object

    '    Dim colSubfolders As Object

    '    Dim wshshell As Object

    '    Dim bln As Boolean

    '    Set wshshell = CreateObject("wscript.shell")

    '    Set objFSO = CreateObject("Scripting.FileSystemObject")

    '    Set objFolder = objFSO.GetFolder("C:\Users\nebbia\Desktop\cartellafile")

    '    Set colSubfolders = objFolder.Subfolders

    '    On Error Resume Next

    '    For Each objSubfolder In colSubfolders

    '        For Each objFile In objSubfolder.Files

     '           wshshell.Run """" & objSubfolder.Path & "" & nome_file.Value & """"

    '            If Err.Number = 0 Then

    '                bln = True

    '                Exit For

    '            End If

    '            Err.Number = 0

    '        Next

    '    Next

    '    If bln = False Then

    '        MsgBox "File non trovato"

    '    End If

    '    Set wshshell = Nothing

    '    Set objSubfolder = Nothing

    '    Set colSubfolders = Nothing

    '    Set objFile = Nothing

    '    Set objFolder = Nothing

    '    Set objFSO = Nothing

    End Sub

    Private Sub Form_BeforeUpdate(Cancel As Integer)

    If Len(Me.registro & vbNullString) = 0 Then

    Me.registro.BackColor = vbRed

    MsgBox "numero registro non compilato."

    Me.registro.BackColor = vbWhite

    Cancel = True

    Exit Sub

    End If

    If bool Then

    If MsgBox("Hai apportato delle modifiche, le confermi?", vbInformation + vbYesNo, "Info") = vbYes Then

    Me.registro = Format(Nz(Left(DMax("[registro]", "[elenco_pratiche]", "[registro] like '????/" & Format(Date, "yyyy") & "'"), 4), 0) + 1, "0000") & "/" & Format(Date, "yyyy")

    DBEngine.CommitTrans dbForceOSFlush

    Else

    DBEngine.Rollback

    End If

    End If

    bool = False

    End Sub

    Private Sub Form_Current()

    If Not Me.NewRecord Then

    Me.RecordsetClone.Bookmark = Me.Bookmark

    End If

    End Sub

    Private Sub Form_Dirty(Cancel As Integer)

    If Not bool Then DBEngine.BeginTrans

    bool = True

    End Sub

    Private Sub Form_Open(Cancel As Integer)

    Dim rst As DAO.Recordset

    Set rst = DBEngine(0)(0).OpenRecordset("select * from elenco_pratiche", dbOpenDynaset)

    Set Me.Recordset = rst

    Set rst = Nothing

    End Sub

    Private Sub Form_Undo(Cancel As Integer)

    bool = False

    Me.Bookmark = Me.RecordsetClone.Bookmark

    End Sub

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento