+ Rispondi al Thread
Pagina 1 di 5 123 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 46

Discussione: [Access] Documentare i Progetti (BETA)

  1. #1
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,126

    [Access] Documentare i Progetti (BETA)

    Ho rispolverato un vecchio progetto che avevo in un cassetto...!
    Si tratta di un Tool che Documenta Applicativi di Access(MDB ed ACCDB).
    Dovendo aprire un'istanza del lavoro e dovendo accedere alla modalità Design, non si può estendere a versioni PCOMPILED(MDE o ACCDE).

    In sostanza scegliendo il File e la profondità dell'analisi viene redatto un Report.

    Chiaro che più l'analisi è profonda più è lento il processo di analisi stesso, che potrebbe richiedere anche qualche minuto.

    Non mi dilungo molto nel dettaglio, è banale da usare ha 3 bottoni, il codice(OPEN) un po meno.

    Ha un BUG noto, che tuttavia non sono mai riuscito a capire(nemmeno recentemente) da cosa potesse dipendere, se non imputarlo alla complessità del DB Analizzato ed alla conseguente complessità di generazione del REPORT.

    Su progetti piccoli, non mi pare dia particolari anomalie.
    Siccome ormai la capacità di Analisi critica si assottiglia con l'eccesso di utilizzo... credo che trovarci i piedi al problema, per me da solo, sarà improbabile.

    Lascio una versione BETA, se qualcuno avesse voglia di attivarsi nel contributo come sempre sarebbe cosa gradita.

    DocuScan.zip

    UPDATE 05/04/2017 (Ore 22:30)
    Eliminata la Visualizzazione RTF del Codice(Forms/Reports/Modules)
    Apparentemente non si blocca più.
    Rimasta la Formattazione SQL

    UPDATE 10/04/2017 (Ore 22:40)
    Riscritto il Parser per il Codice ed SQL, risolto il BUG del Commento Multilinea

    UPDATE 13/04/2017
    Fatta Pulizia ed implementata la lettura delle Dipendenze.

    UPDATE 17/04/2017
    Aggiunta interfaccia di Selezione Oggetti in stampa ed Ordinamento... più un po di pulizia.

    UPDATE 18/04/2017
    Corretto un BACO sulla Query qDOCMASTER per la generazione del Report.

    UPDATE 18/04/2017 13:00
    Corretto Baco visualizzazione in stampa dello Scanning dei Ribbon.

    UPDATE 19/04/2017
    Sistemati alcuni Bugs, rivista interfaccia principale, solo grafiche non funzionali....

    UPDATE 20/04/2017
    Migliorate prestazioni su ScanEvents ed aggiunti alcuni Controlli(Grafici).

    UPDATE 25/04/2017
    Sistemato Formattazione SQL, XML e MACRO.
    Migliorato il codice di Formattazione del Codice VBA, e velocizzato il ciclo di processo.

    UPDATE 27/04/2017
    Migliorato il codice solo a livello strutturale.

    UPDATE 01/05/2017
    Migliorato il codice, sistemati Bugs segnalati dai contributi dei lettori.

    UPDATE 03/05/2017
    Migliorata Interfaccia ed aggiunte alcune proprietà minori.

    UPDATE 10/05/2017
    Modifica sostanziale alle definizioni di Settings..., consentita la gestione di Cataloghi di Proprietà/Eventi da usare nello scan, definiti per Oggetto.

    UPDATE 16/05/2017
    Ottimizzato ulteriormente il Codice, inserita una gestione errori più puntuale in alcune Funzioni.

    UPDATE 20/05/2017
    Aggiustamenti vari ed ottimizzazioni... BUGFIX.
    Ultima modifica di @Alex; 20-05-2017 20:24 
    @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.

  2. #2
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,126
    Il Baco è quasi certamente nella Formattazione del Codice RTF.

    Parlo della Funzione [fHilightCODE] nel Modulo [basHilightsText].

    Non sono certo di questa cosa, ma se salto l'assegnazione del Testo Formattato in RTF alla TextBox [txtCODE], il Report viene regolarmente generato anche su volumi di dati rilevanti, parlo di diverse centiaia di Pagine...(testato fino a 450 pagine).

    Quindi penso di aver omesso qualche sostituzione di un carattere o aver inserito una Formattazione non pienamente corretta(un Bug appunto).

    Vabbè ci guardo pian piano, abreve pubblico la versione che non si pianta, ma che non Formatta il Codice con i Colori, lasciandolo B&W.
    @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
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,126
    Ho rivisto la generazione del Codice VBA, riscrivendo il Parser per la Formattazione, sia per il CODICE che per SQL.
    Risolto, credo, il BACO del Commento MultiLinea che il VBA accetta con il [ _+vbCr] che mi era stato segnalato.
    Inutile dire che è leggermente più lento.
    @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
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,126
    Fatta pulizia del codice.
    Inserito la lettura della Dipendenza degli Oggetti come Tables/Queries/Forms/Reports usando il metodo [getdependencyinfo].
    @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
    Goku non è in linea Scolaretto
    Post
    99
    ciao Alessandro,
    testando la tua applicazione con office64 bit, avrei optato per queste modifiche ( ovviamente minimali) :

    classe clsStringConcBuffer dichiarazioni :

    codice:
    Option Compare Database
    Option Explicit
    
    
    #If Win64 Then
        Private Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
        (ByVal dst As LongPtr, ByVal src As LongPtr, ByVal Length As LongPtr)
        
    #Else
        Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _
        (ByVal dst As Long, ByVal src As Long, ByVal Length As Long)
    #End If
    
    Private Const DEFAULT_CAPACITY As Long = 16
    Private m_currLen As Long
    Private m_stringBuffer() As Byte
    metodo Append della classe di cui sopra:

    codice:
    Public Function Append(strString As String) As clsStringConcBuffer
    On Error GoTo derp
    
        Dim uBuffer As Long
        uBuffer = UBound(m_stringBuffer)
    
        Dim lengthB As Long
        lengthB = LenB(strString)
    
    
        #If Win64 Then
            Dim sPtr As LongPtr
        #Else
            Dim sPtr As Long
        #End If
        sPtr = StrPtr(strString)
    
        Dim currLen As Long
        currLen = m_currLen + lengthB
    
        Select Case currLen
            Case Is < uBuffer
                CopyMemory VarPtr(m_stringBuffer(m_currLen)), sPtr, lengthB
            Case Is < (uBuffer + uBuffer)
                Expand
                CopyMemory VarPtr(m_stringBuffer(m_currLen)), sPtr, lengthB
            Case Else
                Expand currLen
                CopyMemory VarPtr(m_stringBuffer(m_currLen)), sPtr, lengthB
        End Select
    
        m_currLen = currLen
        Set Append = Me
        Exit Function
    
    derp:
        Stop
        Resume
    End Function
    e metodo HideVBE della classe clsREMDB :

    codice:
    Public Function HideVBE()
         
         
        #If Win64 Then
            Dim VBEHwnd As LongPtr
        #Else
            Dim VBEHwnd As Long
        #End If
        
        On Error GoTo ErrH:
    '    loAPP.VBE.MainWindow.SetFocus
    '    SendKeys "%{F4}"
    
        loAPP.VBE.MainWindow.visible = False
        VBEHwnd = FindWindow("wndclass_desked_gsk", loAPP.VBE.MainWindow.Caption)
        If VBEHwnd > 0 Then LockWindowUpdate VBEHwnd
        
    ErrH:
        LockWindowUpdate 0&
    End Function
    l'evidenza della modifica è il grassetto.
    Con un po' di tempo vedrò di studiare il resto :-) non per debuggare, ma per imparare.

    un saluto ciao!

  6. #6
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,126
    Quote Originariamente inviato da Goku Visualizza il messaggio
    ciao Alessandro,
    testando la tua applicazione con office64 bit, avrei optato per queste modifiche ( ovviamente minimali) :

    ....

    l'evidenza della modifica è il grassetto.
    Con un po' di tempo vedrò di studiare il resto :-) non per debuggare, ma per imparare.

    un saluto ciao!
    Innanzitutto grazie, non avendo la versione 64Bit, mi dai un supporto veramente importante.
    Per il resto DEBUGGA pure... anzi se trovi qualche cosa che è scappato...
    Ora sto concentrandomi sulla lentezza del codice se selezionata la profondità di Scan massima... che vede nella chiamata alla Funzione SCANEvents un abbattimento drastico delle prestazioni... ma quella parte del codice credo non abbia moltissime alternative, e, se voglio leggere le macro Embedded... io non ho altre opzioni...

    Grazie.
    @Alex
    @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.

  7. #7
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,126
    A parte un minimo di pulizia del codice... ho inserito una Maschera di gestione degl Oggetti da stampare, sia come Selezione(tra quelli presenti nel Db scannerizzato) che come Ordinamento in fase di stampa.
    La selezione avviene con la classica modalità delle 2 ListBox... la ListBox di Sx, con i dati di Origine, mentre la ListBox di Dx con quelli di destinazione ed elaborazione.
    Ho inserito i classici Aggiungi/Aggiungitutto/Rimuovi/Rimuovitutto...
    Possibile anche con il DoppioClick.
    @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
    Goku non è in linea Scolaretto
    Post
    99
    ciao Alessandro,
    premetto che ancora non ho avuto modo di studiare per bene il tutto, nel frattempo approfitto per qualche banale domanda.

    [IMG]c:\alex.png[/IMG]

    nell'immagine che mostro aprendo la form PrintReportOrder il popolamento delle listbox mostra dei caratteri strani....ho copiato incollato la form e cancellato ed inserito le listboxes, e tutto sembra sia ok, magari capita solo a me...hai modo di verificare?
    Analogo problema nel report, per quanto alla textBox Obj_Name e PrpName.
    Seconda domanda, la scelta tecnica di gestire il fileDialog in early binding è legata a qualche motivo particolare?

    un saluto.

  9. #9
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,126
    Quote Originariamente inviato da Goku Visualizza il messaggio
    ciao Alessandro,
    premetto che ancora non ho avuto modo di studiare per bene il tutto, nel frattempo approfitto per qualche banale domanda.

    [IMG]c:\alex.png[/IMG]

    nell'immagine che mostro aprendo la form PrintReportOrder il popolamento delle listbox mostra dei caratteri strani....ho copiato incollato la form e cancellato ed inserito le listboxes, e tutto sembra sia ok, magari capita solo a me...hai modo di verificare?
    Analogo problema nel report, per quanto alla textBox Obj_Name e PrpName.
    Seconda domanda, la scelta tecnica di gestire il fileDialog in early binding è legata a qualche motivo particolare?

    un saluto.
    Non vedo l'immagine... fatico a raggiungere il tuo disco C:\
    Ho usato Font [Technic] e [TechnicBold]... mi risultavano installati di Default con Windows... mi sbaglio...? Evidentemente si se il tuo S.O. non li ha riconosciuti..., è gusto personale ovviamente vedrò di impostare tutto a Calibri/Arial o Thaoma per evitare disguidi...

    Per il FileDialog... ad essere pignoli... se guardi bene, uso LATEBINDING... che in questo caso inganna non avendo la classica istanza con CreateObject(non gestibile con questo oggetto), in più ho mischiato le cose usando la costante esplicita di Libreria...!
    LATE BINDING:
    codice:
    Function mFileDialog(Options As OpenFilter) As String
        Dim fDialog As Object
    Avessi usato EarlyBinding(necessita dei Riferimenti alle Lib di Office) sarebbe stato così
    codice:
    Dim fDialog As FileDialog
    Il mio "errore", ma voluto e consapevole, è l'uso della Costante [msoFileDialogFilePicker]:
    codice:
        Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
    Ad essere precisi avrei dovuto usare il Valore equivalente o una Costante interna:
    codice:
        Set fDialog = Application.FileDialog(3)
    Ho tuttavia preferito usare la costante in quanto per questo progetto sono indispensabili i Riferimenti alle Lib Office per accedere alle CommandBars, quindi la costante è visibile e non è VersionDependent oltre alla presenza della Libreria... di conseguenza l'ho usata.

    Se intendevi possibile usare un CreateObject... con il FileDialog non mi risulta... ma se hai altre indicazioni come sempre sono apprezzate.

    Grazie
    @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.

  10. #10
    Goku non è in linea Scolaretto
    Post
    99
    ciao Alessandro,
    ...mmm...chiedo scusa ho pasticciato con l'immagine....riprovo, confermando che il problema è proprio la mancanza del font...
    Ho testato la demo su tre macchine con lo stesso risultato, ma non avevo intuito che fosse dovuto al font.

    [IMG]
    c:\alex.png
    [/IMG]

    mi ha tratto in inganno l'uso dell'enumerazione al posto della costante numerica e anche il fatto che mFolderDialog è invocato in ealry binding, ma la funzione non viene richiamata.
    Tutto chiaro grazie a te.
    Il fileDialog lo utilizzo esattamente come mostri tu nella demo, non ho mai approfondito la gestione dell'oggetto con createOject.

    Grazie a te per la spiegazione.

+ Rispondi al Thread
Pagina 1 di 5 123 ... ultimoultimo

Permessi di invio

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