Waarom is Office Programs uniek in MS Access?

Het woord 'uniek' mag u in deze context gerust heel serieus nemen. Want Office Programs ontwikkelt hoogwaardige MS Access applicaties zoals u die nergens in Nederland aantreft. In de vele voorbeelden op de website kunt u het zien. Op deze pagina zullen we het onderbouwen.

Innovatieve en Modulaire Programmering

Office Programs is zeer gespecialiseerd, zorgvuldig en compleet in het programmeren en bouwen van MS Access maatwerk applicaties met alles wat daarbij hoort. Al 23 jaar. Om een complete en goede service en nazorg te kunnen bieden, is in de loop der jaren een bijzonder systeem ontwikkeld. Het is dit systeem dat de mogelijkheid vormt dat we innovatief en modulair kunnen programmeren en bouwen. Kortweg gezegd leidt dit tot lagere ontwikkelingskosten en een beter product.

Voor u als potentiele opdrachtgever is het belangrijk vooraf een goed beeld te hebben van hoe we tewerk gaan en dus ook wat u kunt verwachten. Zo leert u waarom Office Programs als Access ontwikkelaar op dit gebied uniek is in Nederland. We zullen het goed onderbouwen...

Access Development System

Ons Access Development System kan worden gezien als een intern 'middel om middelen te bouwen'. Het omvat alles wat erbij komt kijken om een complete en goede service te kunnen bieden: van bouwen tot leveren, onderhouden en nazorg. Er is dan ook jarenlange ervaring voor nodig geweest om dit tot een geweldig succes te maken. Het is een efficiënt systeem van bouwen waarbij innovatieve en modulaire programmering de kernwaarden vormen. Het resultaat is professionele MS Access applicaties zoals u die nergens in Nederland tegenkomt.

Het systeem bevat dé middelen om zorgvuldig, snel en perfect: te programmeren, te bouwen, onderdelen te perfectioneren (innoveren), te leveren en updates naadloos door te voeren zonder dat u last heeft van vervelende bedrijfsverstoringen en onnodige kosten. In de volgende rubrieken ziet u de voordelen, hoe het werkt en hoe u daar van profiteert.

Een systeem waarbij de middelen op deze wijze worden geïnnoveerd, is efficiënt in veel opzichten. Dit leidt tot:

  • Stabielere applicaties.
  • Meer en betere functionaliteiten.
  • Lagere ontwikkelingskosten.
  • Hogere gebruiksvriendelijkheid.
  • Alles werkt overal hetzelfde.

Innovatief

Bij Office Programs doen we niets anders dan MS Access applicaties maken. Dag in dag uit, al vele jaren. Daarbij ligt steeds de nadruk op: 'Hoe kunnen we objecten (onderdelen, programmacode etc.) zodanig managen dat we het maar één keer hoeven te maken, kunnen verbeteren en vervolgens kunnen hergebruiken?'

Het begint allemaal bij het schrijven van herbruikbare programmacode (reuseable code). Omdat de code herbruikbaar is, wordt de code steeds geperfectioneerd en daarom wordt het ook 'solide code' genoemd (betrouwbare code, zie sectie Extra info). Dit verhoogt de efficiëntie binnen de ontwikkeling van applicaties, zeker als de code dan ook nog dynamisch kan worden ingezet. Fig. 1 is hier een goed voorbeeld van. Al die blokjes code en andere onderdelen vormen de middelen voor de bouw. De gehele interface wordt met programmacode gemaakt hetgeen de zaak erg dynamisch maakt. Hier worden een paar menu's met bepaalde groepen opdrachten op meerdere locaties in de applictatie gebruikt. Hier ziet u een weerspiegeling van authentiek vakmanschap zoals ze het bij Microsoft graag zien...

Fig. 1

access-dev-verz-001

Essentie Als een onderdeel niet hergebruikt kan worden, kan het niet worden geperfectioneerd.

Tip Hoe programmacode en andere onderdelen de middelen voor een krachtig systeem gaan vormen, ziet u de sectie Extra info van deze pagina.

Omdat programmacode en andere onderdelen door de jaren heen worden geperfectioneerd, worden ze steeds betrouwbaarder. Dit is de wijze waarop een product van een hoogwaardige kwaliteit wordt verkregen. Hele modules bouwen we zo met vele onderdeeltjes op die altijd perfect op elkaar aansluiten. Zo wordt een Office Programs Access applicatie continu verbeterd en uitgebreid. Dat geldt voor zowel nieuwe als uitstaande applicaties. Het werkt zo:

Fig. 2 is het Access Development System. Daar binnen het Application Managing System (Fig. 3). Dit regelt dat alle bijgewerkte onderdelen in één centraal punt bij elkaar komen (in de rubriek Modulair meer over de onderdelen). Vervolgens worden de MS Access applicaties vanuit dat centrale punt gedistribueerd. Zo worden nieuwe én uitstaande applicaties bijgewerkt. Intussen wordt intern doorgewerkt aan het verbeteren, perfectioneren en uitbreiden van functionaliteiten. Vervolgens worden weer updates verzonden en alle applicaties worden weer bijgewerkt zodat ze altijd in optimale conditie verkeren. Dit is het herproduceren van een product wat de innovatie mogelijk maakt. En dat met vele jaren ervaring.

Ter vergelijking: Stel, de minister eist dat het geluid van een fietsbel voortaan 75 meter moet dragen. De fabrikant kan dan een betere bel maken die op je fiets past. Hiermee wordt de fiets geïnnoveerd.

Fig. 2

access-access-development-system

Fig. 3

access-modulair

Modulair

We hebben het o.a. gehad over onderdelen; de belangrijkste zijn de basiscomponenten. Ze vormen letterlijk 'de basis' van alles inclusief de middelen voor de bouw.

Tip Via deze knop kunt u o.a. basiscomponenten en voorbeelden bekijken. Als u doorklikt op Alles onder één dak kunt u extra modules gaan bekijken. Via Home kunt u altijd weer terug (of via Vorige van uw browser).

Basiscomponenten zijn de essentiële bouwstenen voor elke Office Programs Access applicatie. Het vormen voorgeprogrammeerde middelen voor een efficiënte en professionele bouw. Daarnaast omvatten deze basiscomponenten ook flink wat functionaliteiten die een samenwerkend geheel vormen en waarmee veel praktische taken kunnen worden uitgevoerd.

Al deze componenten worden voortdurend uitgebreid en geperfectioneerd en alle applicaties worden er minimaal 1 keer per jaar mee bijgewerkt. Op deze wijze worden applicaties geïnnoveerd en onderhouden. Zo verkeren ze altijd in topconditie waarmee compatibiliteit en continuïteit is gewaarborgd.

access-system

Maatwerk, perfectioneren en updates

Om de basiscomponenten heen wordt uw maatwerk gebouwd. Dankzij de basiscomponenten hebben we al een flinke voorsprong. Maar we hebben er niets aan als alles wat geleverd is, niet meer kan worden bijgewerkt of als nieuwe technieken en modules er niet op aansluiten. Daarom moet alles verbeterd, uitgebreid en nogmaals geleverd kunnen worden.

Na de levering van gaat de ontwikkeling van modules en basiscomponenten (intern) gewoon door: functionaliteiten worden uitgebreid en programmacode e.d. wordt geïnnoveerd. Alle Access applicaties (ook uitstaanden) worden dan bijgewerkt middels het Application Managing System (screenshot). Dit is de essentie van innovatieve en modulaire programmering.

Van tijd tot tijd ontvangt u een update. Mocht u aanpassingen willen, dan is dat voordeliger omdat kan worden 'ingehaakt' op de nieuwste technieken. U maakt dan sowieso gratis gebruik van de geperfectioneerde basisfunctionaliteiten. En er is meer, want u kunt ook nog eens gebruik maken van extra kant en klare modules indien nodig. Heeft bijvoorbeeld een facturering systeem nodig of een klanten beheer systeem, dan kunnen we dat gewoon implementeren, vandaar modulaire programmering. Op de website is op verscheidene locaties en op verschillende manieren toegang verschaft tot deze modules.

Geruisloze updates

Zoals gezegd ontvangt u van tijd tot tijd updates, gewoon de reguliere of voor als u extra functionaliteit wilt. Een essentieel middel binnen het Access Development System (screenshot), is dat updates geruisloos zullen verlopen en naadloos aansluiten. Geheel automatisch. Dus zonder enge bedrijfsverstoringen en zonder dat u uw gevoelige data hoeft op te sturen. Hoe werkt dat?

access-backend-frontend
access-dial-actie-backend

Een MS Access database bestaat uit twee delen: een BackEnd (de tabellen met uw data) en een FrontEnd (programmacode, koppelingen naar het BackEnd, formulieren etc.). Zoals we eerder hebben gezien, wordt een FrontEnd na de levering intern gewoon door ontwikkeld. Bij een update ontvangt u een (bijgewerkt) FrontEnd. De volgende tabel illustreert hoe updates altijd snel en makkelijk worden doorgevoerd en uw BackEnd feilloos compatibel blijft met het FrontEnd.

Tip Of u nu een update ontvangt of u wilt het BackEnd gewoon op een andere locatie plaatsen, bij het opstarten van het FrontEnd wordt alijd automatisch gecontroleerd op de koppelingen naar het BackEnd.

Procedure bij koppelen BackEnd
Wat Omschrijving
Koppelingen Het FrontEnd controleert altijd bij opstarten de koppelingen naar het BackEnd. Nadat u het BackEnd heeft aangewezen zullen de koppelingen automatisch worden vernieuwd.
BackEnd bijwerken Nadat het BackEnd is aangewezen, worden (indien nodig) automatisch tabellen, velden, relaties, indexen etc., gemaakt. Soms wordt er wordt ook data verwerkt, bijvoorbeeld als bij uitbreidingen bepaalde velden een waarde nodig is.
Controles Bij het koppelen wordt op bestandsnaam én op nummers gecontroleerd. Want BackEnd en FrontEnd moeten altijd compatibel met elkaar zijn, anders ontstaan er allerlei conflicten. Zo worden updates altijd afgedwongen zodat een gebruiker niet met een verkeerde 'versie' kan werken. Dit voorkomt een hoop ellende.

Of er nu kleine of grote aanpassingen moeten worden gedaan, een update eis zo gepiept. We hebben immers de juiste middelen aan boord.

  • Geen tussenkomst van een ontwikkelaar.
  • Afstand speelt daarom geen rol.
  • Geen onnodige kosten.
  • Geen bedrijfsvertoringen.

De juiste middelen

Op deze pagina hebben we de nadruk gelegd op innovatieve en modulaire programmering en de middelen die daarvoor nodig zijn. Ook hebben we gezien dat er essentiële middelen nodig zijn bij updates teneinde een goede nazorg te kunnen leveren. Achter de schermen is er natuurlijk nog veel meer te doen, maar dat gaat voorbij de scoop van deze pagina.

De onderdelen die voortvloeien uit het innovatief en modulair programmeren, vormen uiteindelijk modules waarmee programma's (applicaties) worden gemaakt. En dat zijn weer de middelen om u van dienst te kunnen zijn. Hiervoor is een systematische bouw nodig zodat alle dingen op elkaar worden en zijn afgestemd. Dit systematische bouwen zult u in de vele voorbeelden op de website zeker terug zien, alsook de schitterende samenwerkende functionaliteiten die het maatwerk van klanten ondersteunen.

Wellicht heeft u gezien dat zelfs honderd(en) afzonderlijke programmeurs het zullen moeten afleggen tegen de kwaliteit van de innovatie en modulaire programmering van ons Access Development System.

Zoals in elke branche een leverancier over de juiste middelen moet beschikken om adequaat te kunnen leveren en goede nazorg te kunnen bieden, is dat zeker het geval binnen de software branche. Al heeft een 'expertisebureau' 100 MS Access programmeurs in dienst, maar niet werkt volgens bovengenoemd systeem, dan is het eenvoudigweg onmogelijk om de hoogst mogelijke kwaliteit en nazorg te leveren.

Interessant onderwerp? Bekijk dan ook eens de sectie Extra info.

Hartelijke groet,
Peter van Loosbroek - eigenaar Office Programs

Extra info

Het Office Programs Systeem

In de eerste sectie van deze pagina hebben we benadrukt hoe de hoogwaardige kwaliteit van een Office Programs Access applicatie wordt verkregen. We hebben ook een glimp laten zien van hoe dit met de basiscomponenten en uw maatwerk is verweven. Laten we nu eens kijken wat dit alles in de praktijk oplevert.

  • Fig. 1 toont het Access Development System (een interne tool). Het omvat 'middelen om middelen te maken'.
  • In Fig. 2 is te zien dat bouwstenen (middelen) centraal worden gereproduceerd en opnieuw gedistribueerd naar alle applicaties. Zoals ook Windows op vele computers wordt bijgewerkt.
  • In Fig. 3 wordt uw applicatie in spe weergegeven die gebruik maakt van diverse ondersteunende onderdelen (de herbruikbare code en andere herbruikbare objecten).
  • Fig. 4 is een voorbeeld van hoe het lint (Fluent User Interface) wordt gebouwd en dezelfde functionaliteiten op meerdere locaties in een programma kunnen worden ingezet. Alles dankzij herbruikbare programmacode.
  • Fig. 5 is een voorbeeld van hoe meerdere middelen binnen het Office Programs systeem een samenwerkend geheel vormen (zoals voor gedefinieerde teksten, werknemers, documenten, e-mail onderdelen etc.).

Fig. 1

access-access-development-system

Fig. 2

access-modulair

Fig. 3

access-system

Fig. 4

access-dev-verz-001

Fig. 5

access-relationeel

Toelichting Fig. 5

De tekening is bedoeld om de relationale database te benadrukken, maar in dit geval is het de bedoeling de samenhang van de componenten te demonstreren, namelijk dat het:

  • Allemaal afzonderlijke modules/procedures zijn.
  • Deze als een samenwerkend geheel op elkaar aansluiten.
  • Een module of procedure voor uw maatwerk pas wordt ingezet indien nodig (en veel ligt al kant en klaar).
  • In dit voorbeeld zijn Berichten en teksten en Werknemers vaste componenten in elke Office Programs applicatie.
  • Bepaalde documenten zoals een offerte, factuur, order etc., hebben een bepaalde structuur en mechanisme zodat ze kunnen worden gegenereerd (voor een afdrukvoorbeeld, PDF maken, verzenden met e-mail etc.). Zelfs inclusief instelbare opties waarmee gebruiker de lay-out kan bepalen. Hiervoor gebruiken we 'blauwdrukken'.
  • Er zijn geweldige e-mail functionaliteiten beschikbaar die uiteraard aansluiten op en gebruik maken van de overige componenten. Ook hiervoor gebruiken we we 'blauwdrukken'.

Op deze wijze vormt alles een samenwerkend geheel. Het is slechts een kleine greep uit de vele mogelijkheden en bedoeld om te laten zien dat het van belang is dat een ontwikkelaar een 'syteem' heeft.

Blauwdrukken

Fig. 1 is een schets van de Basiscomponenten. Eén van de vele componenten zijn de blauwdrukken. Afhankelijk wat er nodig is kan één blauwdruk diverse objecten omvatten zoals bijbehorende programmacode, formulieren, rapporten, tabellen etc. Een blauwdruk is een voorgeprogrammeerde WT (werktechniek) die in variabele omstandigheden kan worden toegepast. Hierdoor worden de ontwikkelingskosten gereduceerd. Dit kan alleen binnen een goed gestructureerd systeem.

Waarom de naam 'blauwdruk' en niet 'sjabloon'? De objecten van een blauwdruk worden steeds geperfectioneerd en bijgewerkt; van een sjabloon niet.

In Fig. 2 en 3 is dezelfde blauwdruk toegepast: de ene keer betreft het een offerte, de andere keer een factuur. Als u de screenshots bekijkt zult u zien dat alleen de naam van het tabblad en het bijschrift van het dialoogvenster van elkaar verschillen. De toegepaste methode (de techniek) is bij beide dialoogvensters gelijk. Achter de schermen speelt veel hergebruikte code.

Fig. 4 is ook dezelfde blauwdruk maar er is nu ook nog een tabblad Instellingen waar nog veel meer mogelijk is. Daar kan de gebruiker op een makkelijke wijze selecteren wat gewenst is. Zeer geavanceerde SQL voor de gewenste data wordt achter de schermen met code opgebouwd. Het resultaat is altijd goed. Op het eerste tabblad zijn dezelfde functionaliteieten als bij Fig. 2 en Fig. 3.

De blauwdruk heeft ook mogelijkheden om met dezelfde selectie die door de gebruiker is gemaakt, nog veel meer te doen. Bijvoorbeeld de data exporteren naar Excel en vervolgens Excel functies toe te passen, de layout van rapporten instellen, een specifiek rapport genereren zoals een Interactief rapport (screenshot), en nog veel, veel meer moois.

Deze blauwdruk is er slechts één van de vele... Zo hebben we bijvoorbeeld ook blauwdrukken van professionele rapporten die allemaal een consitente structuur hebben met geweldige bijbehorende functionaliteiten.

Fig. 1

access-system

Fig. 2

access-dial-a1-verzendingoffertes

Fig. 3

access-dial-a1-verzendingfacturen

Fig. 4

access-dial-a1-heffingen-inst

Geen Active-X elementen

Afgezien van een goed doordachte opzet en structuur, is het niet gebruiken van Active-X elementen de belangrijkste factor als het gaat om de continuïteit en levensduur van uw applicatie. Waarom is dat zo en wat zijn Active-X elementen?

Windows maakt gebruik van de Application Programming Interface oftewel API, om het besturingssysteem aan te sturen. Deze API functies kunnen vanuit Access, Excel etc. worden aangestuurd, maar dat vergt extra expertise. Om dit te vergemakkelijken kunnen ontwikkelaars gebruik maken van Active-X elementen, bijvoorbeeld om een bestand of een folder aan te wijzen. Echter, dit brengt wel de volgende problemen met zich mee:

  • Active-X elementen zijn bestandjes die op een systeem moeten worden geïnstalleerd wat we sowieso liever niet doen.
  • In de VBE (Visual Basic Editor) van Access moet een verwijzing zijn ingesteld. Bij verplaatsing van bestanden, PC opnieuw inrichten etc., geeft dat een probleem.
  • Active-X elementen zijn - i.v.m. updates - versie afhankelijk.
  • Active-X elementen zijn ook bit versie afhankelijk (32 of 64 bits).

Microsoft raadt het gebruik van Active-X elementen ten strengste af vanwege de compatibiliteit met de modernste technologie. Een ontwikkelaar kan API routines schrijven waarmee de API functies rechtstreeks door Windows zelf worden uitgevoerd. Dus zonder tussenkomst van een Active-X element. Maar zoals gezegd vereist dat extra expertise waardoor ze toch vaak door ontwikkelaars worden gebruikt (maar niet door Office Programs).

Office: 32 of 64 bit?

Met de komst van Office 2010 kan worden gekozen voor een 32 of 64 bit versie. Voor 64 bit-applicaties moeten API aanroepen speciaal zijn aangepast. Voor een Office Programs Access applicatie maakt het niet uit of u 32 of 64 bit gebruikt, ondanks de geïmplementeerde API functies.

Tip Als u Office installeert kunt u onder normale omstandigheden het beste voor de 32 bit versie gaan. Wilt u de 64 bit versie, dan moet u dat tijdens de installatie expliciet aanwijzen en dat is niet zonder reden. U heeft alleen de 64 bit versie nodig als u met zeer grote Excel bestanden werkt.

Voorbeelden van solide code

'Solid code' oftwel 'solide code', 'betrouwbare code' wordt vooral zo genoemd omdat deze programmacode geschikt is voor hergebruik (reuseable code). Het resultaat van een procedure (een blokje code) is altijd hetzelfde, dus als de procedure goed geschreven is, is de code betrouwbaar.

Kort gezegd zijn er (o.a.) procedures die een waarde teruggeven (procedure Function) en procedures die een opdracht uitvoeren (procedure Sub). Procedures worden ook wel 'threads' (draadjes) genoemd omdat ze met elkaar verweven kunnen zijn.

Een systeem opbouwen dat is gebaseerd op solide en herbruikbare code is het allerbelangrijkste fundament voor het samenstellen van modules en uiteindelijk applicaties.

access-modulair

CalcAge

Deze procedure (Function) geeft altijd de juiste leeftijd terug. Functies kunnen overal worden aangeroepen: via een query, via een besturingselement, via andere procedures, via het lint, en zelfs via een SQL-instructie.

  • Goede procedures zijn uit voorzorg voorzien van een fout afhandelingsroutine.
  • De procedures MsgErr en MT in de fout afhandeling, zijn eveneens procedures ('threads') die in al mijn procedures worden hergebruikt.
  • CalcAge is een 'gebruikers gedefinieerde procedure'. Procedures als IsDate, DateSerial, Month, Day, Date, zijn VBA procedures.

Aan dit eenvoudige voorbeeld is al te zien dat het een 'samenhangend systeempje' vormt. Procedures kunnen zeer complex zijn en het systeem zeer groot. Het moet daarom goed in elkaar steken.

Function CalcAge(dteBirthdate As Date) As Long

    Dim lngAge As Long

    

    On Error GoTo Bye_Err

    ' Ga na of de doorgegeven waarde een datum is.

    If Not IsDate(dteBirthdate) Then

        dteBirthdate = Date

    End If

    

    ' Ga na of dteBirthdate in de toekomst ligt. Zo ja, gebruik dan de systeemdatum.

    If dteBirthdate > Date Then

        dteBirthdate = Date

    End If

    

    ' Bereken het verschil in jaren tussen vandaag en dteBirthdate.

    lngAge = DateDiff("yyyy", dteBirthdate, Date)

    ' Mocht dteBirthdate dit jaar nog niet hebben plaatsgevonden, trek dan 1 voor de leeftijd af.

    If DateSerial(Year(Date), Month(dteBirthdate), Day(dteBirthdate)) > Date Then

        lngAge = lngAge - 1

    End If

    CalcAge = lngAge

    

Bye_End:

    Exit Function

Bye_Err:

    MsgBox MsgErr, vbCritical, MT

    Resume Bye_End

End Function

FindRecordCount

Deze procudure (Function) geeft het aantal records terug uit een op te halen Recordset die bepaald wordt met het doorgegeven (variabele) argument strSQL. Het tellen van records kan in heel veel gevallen nodig en nuttig zijn.

Voor een groot aantal taken zet ik DAO en SQL erg vaak in omdat dat een applicatie erg dynamisch maakt. Wanneer dit niet wordt beheerst moeten er o.a. veel Query's (QueryDefs) worden gemaakt waardoor er een onbeheersbare situatie gaat ontstaan. Ik gebruik zelden QueryDefs, maar bouw recordsets e.d. in variabele omstandigheden vanuit centraal gedefinieerde en flexibele procedures op. Want hoe vaker we dingen maar één keer hoeven te doen, des te efficiënter.

Function FindRecordCount(strSQL As String) As Long

' Voor meer, zie VB - Effectief records tellen.

    Dim db     As DAO.Database

    Dim rst     As DAO.Recordset

    

    On Error GoTo Bye_Err

    

    Set db = CurrentDb

    Set rst = db.OpenRecordset(strSQL)

    If rst.EOF Or rst.BOF Then

        FindRecordCount = 0

    Else

        rst.MoveLast

        FindRecordCount = rst.RecordCount

    End If

    

Bye_End:

    Set rst = Nothing

    Set db = Nothing

    Exit Function

Bye_Err:

    MsgBox MsgErr, vbCritical, MT

    Resume Bye_End

End Function

CountFiles

Het kunnen omgaan met bestanden en mappen is één van de dingen die vaak terugkomen. Hier is er één uit mijn omvangrijke arsenaal.

CountFiles geeft het aantal bestanden in een specifieke map en (optioneel) inclusief de bestanden in de submappen.

In dit voorbeeld wordt getoond dat er geen Active-X element wordt gebruikt hetgeen erg belangrijk is.

Function CountFiles(strPath As String, Optional lngCount As Long = 0, Optional blnRecursive As Boolean) As Long

' Deze procedure telt het totaal aantal bestanden in strPath, inclusief de bestanden in subfolders.

' Bij een fout geeft de functie 0 als resulaat omdat 0 de standwaardwaarde voor een Long is.

' Daarom MOET strPath eerst worden gecontroleerd voordat de functie wordt aangeroepen.

' strPath     - Het volledige pad van de eerste map.

' blnRecursive - Indien True worden ook alle bestanden in submappen teruggegeven.

' lngCount     - De teller. Is als een 'optioneel' argument gedeclareerd omdat dit argument in de lus voor recursive

'                 aanroep moet worden meegegeven. Houdt steeds de standaardwaarde aan.

' Voor meer, zie doc FileSystem Object.

    

    Dim fso         As Object

    Dim fld         As Object

    Dim sfl         As Object

    

    On Error GoTo Bye_Err

    

    Set fso = CreateObject("Scripting.FileSystemObject")

    Set fld = fso.GetFolder(strPath)

    lngCount = lngCount + fld.Files.Count

    If blnRecursive Then

        For Each sfl In fld.Subfolders

            CountFiles sfl.Path, lngCount, True

        Next sfl

    End If

    CountFiles = lngCount

    

Bye_End:

    Set fso = Nothing

    Set fld = Nothing

    Set sfl = Nothing

    Exit Function

Bye_Err:

    MsgBox MsgErr, vbCritical, MT

    Resume Bye_End

End Function

Afdrukmoment

Op documenten hoort vaak een datum met tijd van wanneer het document is afgedrukt of gemaakt. Dit regel ik met mijn functie Afdrukmoment. Omdat in mijn applicaties documenten taal gerelateerd kunnen zijn (Nederlands en Engels), heb ik ook routines geschreven om de gehele datum-tijd reeks in het Engels terug te geven. Want de landinstellingen onder Windows kunnen maar beter met rust gelaten worden...

Voor de Nederlandse weergave worden gewoon VBA functies gebruikt.
Voorbeeldresultaat: maandag 20 augustus 2018 23:17:54

Voor de Engelse weergave zorgen mijn functies TranslateDate en FMDLongTime. Let op de hoofdletters en komma's.
Voorbeeldresultaat: Monday, August 20, 2018 23:17:54

Function Afdrukmoment() As String

' Wordt in documenten gebruikt waar Lang is ingesteld.

' Zie doc Rapporten.

    

    On Error GoTo Bye_Err

    

    Select Case Lang

        Case "NED"

            Afdrukmoment = Format(Date, "Long Date") & " " & FMDLongTime(Time)

        Case "ENG"

            Afdrukmoment = TranslateDate(Date, "Long Date") & " " & FMDLongTime(Time)

    End Select

    

Bye_End:

    Exit Function

Bye_Err:

    MsgBox MsgErr, vbCritical, MT

    Resume Bye_End

End Function

Mensen - Proces - Product

Mijn visie is dat de mensen over bijzondere eigenschappen moeten beschikken omdat het de mensen zijn die het proces dirigeren. De kwaliteit van het proces komt uiteindelijk tot uiting in de kwaliteit van het product.

Een hoge mate van expertise (kennis + inzicht + ervaring) is onontbeerlijk. Goede kennis van zaken hebben is natuurlijk vanzelfsprekend, maar inzicht en ervaring zorgen voor een diepere dimensie en een verfijning van details. Hoe werkt dat?

Wanneer we vasthouden aan oude gedachte- en gewoontepatronen (conditionering), kan ons inzicht niet verruimen. Dan blijft het alleen bij concepten en de kennis die we al hadden. Echter, het loslaten van het oude en het bekende maakt ruimte voor een brede en begripvolle kijk op het hele gebeuren. En zorgvuldigheid gaat altijd gepaard met inzicht. Zo is inzicht een diepere dimensie dan louter conceptueel denken.

Zonder het vermogen los te laten is innovatie niet mogelijk. Want waar het oude is, daar kan het nieuwe niet zijn.

Tip Hieronder een paar voorbeelden van modellen uit de praktijk (Office Programs Orders). Deze applicatie kunt u bekijken via onderstaande knop.

access-verpcombi
access-relationeel-orders
access-frm-orders
access-ord-efficientie01
access-module-orders