Uitbreidingen van het data acquisitie systeem

Vergelijkbare documenten
Bijlage 1. Access VBA code voor het maken van barrièrebestanden.

Access cursus - Hoofdstuk 19

PHP en een MySQL database.

6.2 VBA Syntax. Inleiding Visual Basic

Databases - Inleiding

Trainingsomschrijving ACCESS 97 / 2000 / 2003NL

Inhoud. VBA Excel 2010

Info-books. Toegepaste Informatica. Handleiding. Deel 40c : Gegevensbeheer en algoritmen in Access. HA40c. Jos Gils Erik Goossens

SQL is opgebouwd rond een basisinstructie waaraan één of meerdere componenten worden toegevoegd.

Informatie & Databases

6.3 VBA Syntax Instructie. Wij gaan de Visual Basic Editor opnieuw openen, om de instructie die wij zojuist getypt hebben, nader te bekijken.

Technische nota AbiFire5 Rapporten maken via ODBC

Les 15 : updaten van gegevens in de database (deel2).

Hoofdstuk 7: Werken met arrays

Access voor Beginners-Hoofdstuk 20

Versieperikelen. Bijlage C

Databases gebruiken. Databases gebruiken

Technische nota AbiFire Rapporten maken via ODBC

Inhoudsopgave. Module 2 Geavanceerde formulieren

Hoofdstuk 9: Menu s toevoegen

SQL manipulatietaal. We kunnen er data mee toevoegen, wijzigen en verwijderen uit een database.

Bijlage Inlezen nieuwe tarieven per verzekeraar

Normaliseren van tabellen Praktische oefeningen

Macro s. 4.2 Een macro maken

INHOUDSOPGAVE. Inhoudsopgave

Subrapporten. 5.1 Inleiding

Info-books. Toegepaste Informatica. Deel 20 : Algoritmen en programmeren in Access en Excel (Basis) AL20. Jos Gils Erik Goossens

Systeemontwikkeling, Hoofdstuk 4, Tabellen maken in MS Access 2010

Inleiding Visual Basic en VBA. Karel Nijs 2009/01

Central Station. CS website

6.8 Lijsten: oefeningen

ABN-Amro Shuttle Service export database. 1. Inleiding. 2. De Wizard. Functionele documentatie

Release Notes. Afdrukdatum: 2008/10/06

Een Multi-functioneel formulier

Dynamic Publisher Twee handige hulpjes voor DP

Computervaardigheden. Universiteit Antwerpen. Computervaardigheden en Programmatie. Grafieken en Rapporten 1. Inhoud. Wat is scripting?

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie

1.7 Koppelen aan externe data: aan een Access-database

Midi PDF Bladmuziek lezer

Programmeren in Access met VBA

AFO 142 Titel Aanwinsten Geschiedenis

OFFICE A LA CARTE - ACCESS 2013

Query SQL Boekje. Fredrik Hamer

Programmeren in Access 2016 met VBA

Systeemontwikkeling, Hoofdstuk 6, Query s, macro s en rapporten in MS Access 2010

Access voor beginners - hoofdstuk 25

Access. Module 0. Access, versie 97 (UK) Nummer: 012 ( ) The Courseware Company

1. Introductie tot SPSS

Variabelen en statements in ActionScript

Ook op internet wordt gebruik gemaakt van databases, zoals bij Marktplaats en Hyves.

VBA voor Doe het Zelvers deel 9

TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise

Sparse columns in SQL server 2008

Les 11 : Basis SQL (deel2).

Backup en herstel. Handleiding

Voorbeelden VBA Excel

Katholieke Hogeschool Kempen Campus Geel Departement Handelswetenschappen en Bedrijfskunde 3de jaar Toegepaste Informatica

Inhoudsopgave. Module 2 Meer doen met functies

Inhoudsopgave Voorwoord 9 Nieuwsbrief 9 Introductie Visual Steps 10 Wat heeft u nodig? 11 Hoe werkt u met dit boek?

1 Werken met (keuze)lijstjes: de control listbox

INHOUD. Ten geleide Excel Basis 15

Handleiding Reinder.NET.Tasks.SQL versie 2

Badge it. Inhoudsopgave. 1. Installatie... 3

Bijlage 8. Testprogramma brandreactiemodulen LBK

Datum. Vraag het bedrag in BEF. Reken om naar EURO. Toon het bedrag in EURO. --- Vraag het bedrag in BEF Reken om naar EURO---

Object Oriented Programming

Informatie Voor algemene vragen/opmerkingen omtrent de inhoud van deze site kunt u bellen of en met: Cargo Data Systems BV

Handleiding Digitaal Aanvraagformulier

Handleiding CVOSoft Stages: algemene kenmerken 1/11. Verwerking stages

module Instruct, Postbus 38, 2410 AA Bodegraven - 1 e druk: november 2008

DKO Beheerders. 5 maart WISA helpdesk

Automatisering voor Financiële Dienstverleners. Werken met Queries en Merge Documenten. For more information visit our website at

Landelijk Indicatie Protocol (LIP)

WAT ALS U MERKT DAT UW DATABASE ERG TRAAG WORDT BIJ HET VERWERKEN VAN DE GEGEVENS VAN DE DATA LOGGER?

Calculatie tool. Handleiding. Datum Versie applicatie 01 Versie document

VAN HET PROGRAMMEREN. Inleiding

Gebruikershandleiding

Werken met Google Docs en Google Drive

Het toepassen van een gelaagde architectuur

Sorteren, groeperen en totaliseren

II. ZELFGEDEFINIEERDE FUNCTIES

Cursus Access - Hoofdstuk18

Outlookkoppeling installeren

Backup en herstel Handleiding

AFO 113 Authoritybeheer

Verslag. Projectteam: 107 Datum: 16 oktober 2008 Project leden: Lennard Fonteijn Harish Marhe Nicoletta Saba Turgay Saruhan Robin Tummers

Programmeren in Excel VBA beginners. Karel Nijs 2010/09

Doe het zelf tooling. Met VBA

Handleiding Wlijn Databeheer Internet

Met een mailing of massaverzending kunt u een groot aantal documenten verzenden naar gebruikelijke adressen, die in een gegevensbestand staan.

Elbo Technology BV Versie 1.1 Juni Gebruikershandleiding PassanSoft

Quickstart. Browser instellingen

Offective > CRM > Vragenlijst

Miniles gegevensbanken bevragen met SQL

ONLINEADVISEREN.NL ONLINEADVISEREN.NL. Handleiding interactief websysteem ter ondersteuning van online adviseren

SERVER MONITOR SMS SERVER

INLEIDING... 1 AFSPRAKEN... 2 INHOUDSOPGAVE...

Programmeren in Excel VBA beginners. Karel Nijs 2010/09

Dossier Instellingen. Inhoudsopgave. Inleiding

User accounts maken in een Wandy Hotspot, d.m.v. een batch.

Transcriptie:

juni 03 ECN-I--03-007 Uitbreidingen van het data acquisitie systeem Een beschrijving van de databases die de uitvoer van het Wizcon data acquisitie systeem automatisch verder verwerken (vs1) G.P.J. Schoemakers

Verantwoording Het testen van SOFC s is grotendeels geautomatiseerd. Deze automatisering bestaat uit twee delen. Het eerste gedeelte is het binnenhalen van de data, het tweede gedeelte bestaat uit het verder verwerken van deze data. Dit rapport bevat de blauwdruk van het tweede gedeelte. Abstract For testing of SOFC components several installations have been build. These installations have been fitted with a data acquisition system that collects data continuously. The data is made available through one database per installation, which are kept on the local hard-drive. To make the data available for all users the databases are copied to a network-drive. Furthermore forms are available. Two forms are for use by the operators and one form shows the results of the current tests. Apart from that some actions have been implemented to insure the stability of the measuring system. 2 ECN-I--03-007

INHOUD LIJST VAN TABELLEN 5 LIJST VAN FIGUREN 5 SAMENVATTING 6 1. INLEIDING 7 2. SYSTEEM OPBOUW 9 3. WIZ0X0 11 3.1 Wiz020 11 3.2 Wiz030 11 4. CELGEGEVENS 13 4.1 Tabellen 13 4.2 Formulieren 13 4.3 Macro s 15 4.3.1 Afsluiten 15 4.3.2 CelData 16 4.4 Modules 16 4.4.1 AlgemeneCelModule 16 4.4.2 DeclaratieModule 17 4.4.3 OmzettingModule 19 4.4.4 QueryCelModule 20 5. DATABACKUPCOMPACT 23 5.1 Macro s 23 5.1.1 Afsluiten 23 5.1.2 ComprimeerBron 23 5.1.3 DataBackUp 24 5.2 Modules 25 5.2.1 AlgemeneDataModule 25 5.2.2 BeperkingDataModule 28 5.2.3 ComprimeerDataModule 29 5.2.4 DeclaratieModule 31 5.2.5 KopieerModule 33 5.2.6 OmzettingModule 35 5.2.7 QueryDataModule 36 6. IVCEL 39 6.1 Formulieren 39 6.2 Macro s 41 6.2.1 Afsluiten 41 6.3 Modules 42 6.3.1 AlgemeneIVModule 42 6.3.2 DeclaratieModule 44 6.3.3 OmzettingModule 46 7. LOOPCEL 49 7.1 Macro s 49 7.1.1 Afsluiten 49 7.1.2 LopendeCelMaken 49 7.2 Modules 50 7.2.1 AlgemeneLoopModule 50 7.2.2 DeclaratieModule 52 7.2.3 KopieerModule 54 ECN-I--03-007 3

7.2.4 OmzettingModule 56 7.2.5 QueryLoopModule 57 8. LOPENDECEL 65 8.1 Tabellen 65 8.2 Formulieren 66 8.3 Macro s 70 8.3.1 Afsluiten 70 8.4 Modules 70 8.4.1 DeclaratieModule 70 8.4.2 OmzettingModule 73 8.4.3 StartCelModule 74 4 ECN-I--03-007

LIJST VAN TABELLEN Tabel 1 De structuur van macro 'Afsluiten'...15 Tabel 2 De structuur van macro 'CelData'...16 Tabel 3 De structuur van macro 'Afsluiten'...23 Tabel 4 De structuur van macro 'ComprimeerBron'...24 Tabel 5 De structuur van macro 'DataBackUp'...24 Tabel 6 De structuur van macro 'Afsluiten'...42 Tabel 7 De structuur van macro 'Afsluiten'...49 Tabel 8 De structuur van macro 'LopendeCelMaken'...49 Tabel 9 De structuur van macro 'Afsluiten'...70 LIJST VAN FIGUREN Figuur 1 Schematische weergave van de onderlinge verbanden tussen de verschillende typen databases...10 Figuur 2 Opbouw van de tabel GegevensCellen uit de database CelGegevens...13 Figuur 3 De weergave van het formulier InvoerCelgegevens uit de database CelGegevens.14 Figuur 4 De weergave van het formulier InvoerCelgegevens2 uit de database CelGegevens...15 Figuur 5 Weergave van het formulier IVgrafiek uit de database IVcel...39 Figuur 6 Opbouw van de tabel GegevensCellen uit de database LopendeCel...65 Figuur 7 Opbouw van de tabel SOxx uit de database LopendeCel...66 Figuur 8 Weergave van formulier 'LopendeCel' uit database 'LopendeCel'...66 ECN-I--03-007 5

SAMENVATTING Voor het meten en testen van SOFC s zijn er in het ET gebouw diverse opstellingen gebouwd. Het merendeel van deze opstellingen zijn gekoppeld aan een data acquisitie systeem (DAS) dat automatisch en continue meetgegevens verzameld. Deze gegevens worden voor de gebruikers beschikbaar gesteld in de vorm van één database per opstelling. De databases worden bewaard op de lokale C-schijf. Om de data voor gebruikers beschikbaar te stellen worden deze databases gekopieerd naar een netwerkschijf (XP-schijf). Tevens zijn voor de gebruikers formulieren beschikbaar. Twee formulieren voor gebruik door de operators en één formulier dat het verloop van de draaiende celtesten zichtbaar maakt voor geïnteresseerden. Verder zijn er enkele acties die de stabiliteit van het meetsysteem garanderen. 6 ECN-I--03-007

1. INLEIDING In het ET gebouw staan diverse opstellingen die gebruikt worden voor het testen van en het meten aan vast oxide brandstofcellen. Het merendeel van deze opstellingen is verbonden met een data acquisitie systeem. Dit systeem is verdeeld over twee computers. De uitvoer van het systeem bestaat uit databases, één database per opstelling. Deze databases bevatten alle gegevens die door het systeem zijn bijgehouden en bevinden zich op de lokale harde schijf. De databases worden gekopieerd naar een netwerkschijf om ze beschikbaar te maken voor de diverse gebruikers. Ook worden er bewerkingen uitgevoerd ten behoeve van de gebruikers. Dit om de data makkelijker toegankelijk te maken en uniform aan te bieden. Tevens worden er acties uitgevoerd om er voor te zorgen dat het data acquisitie systeem niet instabiel wordt door te grote data files. ECN-I--03-007 7

8 ECN-I--03-007

2. SYSTEEM OPBOUW Het data acquisitie systeem is verdeeld over twee computers. De software die op deze computers draait, genaamd Wizcon, gebruikt de aanduiding Wiz020 voor systeem 1 en Wiz030 voor systeem 2. De diverse uitbreidingen dienen zo veel mogelijk onafhankelijk te zijn van het systeem. Voor uitbreidingen die specifiek bedoeld zijn voor één systeem krijgen de toevoeging 020 of 030 mee. Wizcon geeft als uitvoer databases die volgens een vast stramien zijn opgebouwd. De naam van de database begint met de letters SO (van SOFC Opstelling) gevolgd door een volgnummer dat het nummer van de desbetreffende opstelling aangeeft. Deze nummers zijn voor Wiz020 20 tot en met 22. Voor Wiz030 zijn de nummers 01 tot en met 11. Deze databases worden verder brondatabases genoemd. De brondatabases bevatten allen een tabel genaamd Data waar de gemeten waarden in zijn opgeslagen. De brondatabases bevatten verder geen objecten. Elke keer dat Wizcon data toevoegt aan de brondatabases groeien deze. Indien de brondatabases blijven groeien verloopt het toevoegen van nieuwe data steeds moeizamer vanwege de toegenomen bestandsgrootte. Uiteindelijk vertoont Wizcon instabiel gedrag. Om dit te voorkomen dienen de brondatabases klein te blijven. Het gevolg hiervan is dat de permanente opslag van meetdata verzorgd wordt door andere databases. Deze databases worden verder in dit rapport back-updatabases genoemd. De gemeten data wordt periodiek overgeheveld naar de back-updatabases, waarna de brondatabases in grootte worden beperkt. De naam van de back-updatabases begint met de letters ET (van ETgebouw) gevolg door een volgnummer dat het nummer van de desbetreffende opstelling aangeeft. De back-updatabases bevatten een tabel waar de data uit de brondatabases in worden opgeslagen. De naam van deze tabel begint met de letters SO en wordt gevolgd door het nummer van de opstelling. Deze databases kunnen ook andere tabellen bevatten. Als de opstellingen zijn veranderd krijgt de oude tabel een nieuwe naam en wordt er een nieuwe tabel gemaakt met de standaard naam. Naast de genoemde tabellen kunnen deze back-updatabases ook ander objecten bevatten. De meetgegevens moeten nog beschikbaar worden gemaakt voor de gebruikers van de meetopstellingen. Dit wordt gedaan door de back-updatabases te kopiëren naar een netwerkschijf (de XP schijf) van waaruit de gebruikers de data kunnen benaderen. Deze gekopieerde databases worden in dit rapport aangeduid als doeldatabases. Deze doeldatabases zijn een exacte kopie van de back-updatabases. Meetgegevens worden ook bewerkt om deze makkelijker toegankelijk te maken en op een uniforme wijze aan gebruikers te presenteren. Tevens wordt er gebruikersgegevens opgeslagen en gekoppeld aan de relevante meetdata. De databases die deze bewerkte data en de gebruikersdata opslaan worden in dit rapport functiedatabases genoemd. Ook deze databases worden naar de XP schijf gekopieerd en heten dan doeldatabases. De databases die al deze functionaliteit verzorgen worden werkdatabases genoemd. ECN-I--03-007 9

ET20 t/m ET22 Meet opstellingen Wiz020 Wizcon data acquisitie software Brondatabases Werkdatabases Backupdatabases ET01 t/m ET11 Meet opstellingen Wiz030 Wizcon data acquisitie software Brondatabases Werkdatabases Backupdatabases Functiedatabases Netwerkschijf Doeldatabases Gebruikers Gebruikers Gebruikers Figuur 1 Schematische weergave van de onderlinge verbanden tussen de verschillende typen databases. 10 ECN-I--03-007

3. WIZ0X0 Er zijn twee wizcon systemen, Wiz020 en Wiz030. Beide systemen draaien op een aparte PC en voor beide systemen zullen op gezette tijden macro s van werkdatabases uitgevoerd moeten worden. Het uitvoeren van macro s wordt door het operating systeem (OS) verzorgd. Dit OS kent een functie genaamd Scheduler. Deze scheduler kan programma s (macro s) opstarten en bewaken op vastgestelde tijden en met regelmatige intervallen. 3.1 Wiz020 De database die in gebruik is om de uitvoer van Wiz020 af te handelen is : DataBackUpCompact De scheduler start de volgende macro s : DataBacKUp, elke dag om 07:00 uur ComprimeerBron, elke derde dag van de maand om 20:00 uur 3.2 Wiz030 De databases die in gebruik zijn om de uitvoer van Wiz030 af te handelen zijn : CelGegevens DataBackUpCompact IVcel LoopCel LopendeCel De scheduler start de volgende macro s : CelData, elke dag om 19:30 uur ComprimeerBron, elke derde dag van de maand om 20:00 uur DataBacKUp, elke dag om 06:30 uur LopendeCelMaken, elke dag om 07:00 uur ECN-I--03-007 11

12 ECN-I--03-007

4. CELGEGEVENS De database CelGegevens is een werkdatabase. Het doel van deze database is het opslaan en bijhouden van alle relevante gegevens van een cel. Voor de opslag van deze gegevens wordt een tabel gebruikt. De overige objecten van de database dienen ervoor om de gegevens makkelijker toegankelijker te maken en om gedeeltes van de invoer van nieuwe gegevens te vereenvoudigen. De database is voornamelijk bedoeld voor gebruik door de operators op het bordes. Deze database bevat : 1 tabel 0 queries 2 formulieren 0 rapporten 2 macro s 4 modules. 4.1 Tabellen De tabel in de database CelGegevens is : GegevensCellen In de tabel GegevensCellen zijn alle, voor het experiment, relevante gegevens opgeslagen van de reeds geteste cellen. Figuur 2 Opbouw van de tabel GegevensCellen uit de database CelGegevens De velden Opstellingnummer en Celnummer verwijzen naar het juiste experiment zodat de bijbehorende data kunnen worden geselecteerd. Oppervlak geeft het oppervlak aan van de kathode en daarmee het actieve celoppervlak van de cel. Deze waarde, in vierkante centimeters, wordt gebruikt in de berekening van de stroomdichtheid. Celcodering geeft het type cel aan dat is gebruikt gedurende het experiment. Om verder nog relevante opmerkingen over het experiment op te slaan is het veld Opmerkingen toegevoegd. De velden Kathode en Anode slaan gegevens op over het aantal keren dat de respectievelijke gazen al in gebruik zijn. 4.2 Formulieren De formulieren in de database CelGegevens zijn : InvoerCelgegevens InvoerCelgegevens2 ECN-I--03-007 13

Het formulier InvoerCelgegevens wordt gebruikt om op het bordes de ontbrekende data toe te voegen of om bestaande gegevens te veranderen. Figuur 3 De weergave van het formulier InvoerCelgegevens uit de database CelGegevens Het formulier heeft als bron voor de gebruikte gegevens de tabel GegevensCellen Verder bestaat het formulier uit diverse onderdelen. Als eerste een subformulier (een formulier in een formulier). In dit geval is de gele rand het formulier InvoerCelgegevens en het witte gedeelte het subformulier InvoerCelgegevens2. Een tweede onderdeel is een formuliermodule om diverse acties in goede banen te leiden. Als laatste onderdeel is er een kader ( Cel Keuze ) om de gegevens van de juiste opstelling te selecteren. De module, die is verbonden aan het hoofdformulier, is relatief eenvoudig. Option Compare Database Option Explicit Private Sub Form_Open(Cancel As Integer) ' Bij openen formulier Initialisatie ' Begin waarden goedzetten StartAlgemeen ' Bijwerken data Me.Kader1.Value = 1 ' Opstelling = 1 Kader1_AfterUpdate Private Sub Kader1_AfterUpdate() ' Na bijwerken kader 'Cel Keuze' Dim strsql As String ' SQL definieren (selecteer gegevens per opstelling) strsql = "SELECT * FROM GegevensCellen " & _ "WHERE (((Opstellingnummer)=" & Me.Kader1.Value & "));" Me.RecordSource = strsql ' Gebruiken voor formulier Me.OrderByOn = True ' Sorteren aan Me.OrderBy = "GegevensCellen.Celnummer DESC" ' Aflopend sorteren 14 ECN-I--03-007

Het subformulier InvoerCelgegevens2 wordt ingezet om de data per opstelling uit de tabel GegevensCellen weer te geven. Figuur 4 De weergave van het formulier InvoerCelgegevens2 uit de database CelGegevens De gegevens worden per opstelling (gekozen in het hoofdformulier) weergegeven. De gegevens in het veld Celnummer zijn tegen veranderen beveiligd. Dit veld en de velden Anode, Kathode en Oppervlak worden automatisch ingevuld, maar kunnen gewijzigd worden. 4.3 Macro s De macro s in de database CelGegevens zijn : Afsluiten CelData Macro s hebben acties en beschrijvingen. De acties geven aan wat de macro moet doen en de beschrijvingen geven een mogelijkheid om in de macro uitleg te geven over die actie. 4.3.1 Afsluiten De structuur van de macro afsluiten is weergegeven in Tabel 1. Tabel 1 De structuur van macro 'Afsluiten' Actie Beschrijving BerichtenInstellen Geen berichten Deze actie zorgt ervoor dat vensters die normaal gesproken om actie vragen van de gebruiker worden genegeerd. De macro wordt niet meer onderbroken. ProcedureUitvoeren AlgemeneCelModule, functie VerbreekVerbinding(), alle koppelingen verbreken Deze actie start een procedure die alle gekoppelde tabellen uit de database verwijdert ECN-I--03-007 15

Afsluiten Database afsluiten Deze actie sluit de database af 4.3.2 CelData De structuur van de macro CelData is weergegeven in Tabel 2. Tabel 2 De structuur van macro 'CelData' Actie Beschrijving BerichtenInstellen Geen berichten Deze actie zorgt ervoor dat vensters die normaal gesproken om actie vragen van de gebruiker worden genegeerd. De macro wordt niet meer onderbroken. ProcedureUitvoeren DeclaratieModule, functie Initialisatie(), geeft startwaarde aan alle variabelen Deze actie start een procedure die de gebruikte variabelen de juiste waarde geeft ProcedureUitvoeren AlgemeneCelModule, functie StartAlgemeen(), data gegevenscellen bijwerken Deze actie werkt de data in de tabel GegevensCellen bij zodat deze bij de tijd zijn. MacroStarten Database afsluiten Deze actie sluit de database af 4.4 Modules De vier modules zijn : AlgemeneCelModule DeclaratieModule OmzettingModule QueryCelModule Modules zijn verzamelingen van stukjes programma die elk een eigen functionaliteit hebben. Deze programmacode is weergegeven als tekst. 4.4.1 AlgemeneCelModule Deze module heeft de volgende stukjes programmacode : 1. De functie StartAlgemeen roept diverse andere programmadelen aan in een gedefinieerde volgorde 2. De functie Verbreekverbinding verwijdert alle gekoppelde tabellen uit de database 3. De procedure KoppelenWiz0x0 koppelt de tabel Registraties uit de Wizcon database Wiz0x0 Option Compare Database Option Explicit ' Deze module verzorgt alle noodzakelijke instellingen bij opstart ' en past databases aan bij veranderingen Public Function StartAlgemeen() KoppelenWiz0x0 Bijwerken VerbreekVerbinding ' Koppelen van registraties ' Nieuwe data toevoegen ' Verbreek alle koppelingen 16 ECN-I--03-007

Public Function VerbreekVerbinding() For Teller = CurrentDb.TableDefs.Count - 1 To 0 Step -1 ' Alle tabellen controleren If CurrentDb.TableDefs(Teller).Attributes And dbattachedtable Then ' Als tabel is gekoppeld CurrentDb.TableDefs.Delete CurrentDb.TableDefs(Teller).Name ' Tabel verwijderen Teller = 0 Private Sub KoppelenWiz0x0() Dim str As String str = "Registraties" ' Tabel 'Registraties' van Wiz0x0 koppelen DoCmd.TransferDatabase aclink, "Microsoft Access", strwiz0x0, actable, str, str 4.4.2 DeclaratieModule Deze module heeft de volgende stukjes programmacode : 1. De declaraties verzorgen de variabelen en constanten die nodig zijn binnen deze database. De hier gedeclareerde waarden zijn beschikbaar binnen de hele database. 2. De functie Initialisatie roept de initialisatie routines aan. Dit is nodig omdat de diverse initialisatie routines niet van buiten deze module kunnen worden aangeroepen. 3. De procedure InitialisatieBLN geeft de publieke variabelen blnso en blnet een startwaarde. 4. De procedure InitialisatieSchijf zet alle computerspecifieke verwijzingen goed. De keuze wordt bepaald door de waarde van consysteem. De mogelijkheden zijn Test (voor testen), 020 (voor Wiz020) en 030 (voor Wiz030). 5. De procedure RijCelVullen is bedoeld voor uitbreidingen. Option Compare Database Option Explicit ' Deze module verzorgt alle noodzakelijke declaraties die door de gehele database worden gebruikt Public Const conmax As Integer = 30 Public Const contabel As String = "Data" Public blnso(0 To conmax) As Boolean Public blnet(0 To conmax) As Boolean Public Teller As Integer Public strxpschijf As String Public strcschijf As String Public strgschijf As String Public strwizschijf As String Public strwiz0x0 As String Public strwiziv As String ' Aantal opstellingen ' Naam tabel in Wizcon output ' Rij met bestaande Wizcon databases ' Rij met bestaande BackUp databases ' Waarde gebruikt in For.. lussen ' Verwijzing naar XP directorie ' Verwijzing naar BackUp directorie ' Verwijzing naar Database directorie ' Verwijzing naar Wizcon directorie ' Verwijzing naar Wiz0x0 database ' Verwijzing naar WizIV database Dim RijCel(1 To 26) As String ECN-I--03-007 17

Const consysteem As String = "030" ' Bepaalt de waarde van verwijzingen naar schijven Public Function Initialisatie() InitialisatieBLN InitialisatieSchijf RijCelVullen ' Alle bln's initialiseren ' Schijfverwijzingen goedzetten ' Celnummers goedzetten Private Sub InitialisatieBLN() For Teller = 0 To conmax blnso(teller) = False blnet(teller) = False Teller = 0 ' Voor alle opstellingen ' Initialiseer blnso ' Initialiseer blnet Private Sub InitialisatieSchijf() Select Case consysteem ' Waarde van consysteem Case "test" ' Als "test" dan : ' worden de schijf strings goedgezet voor het test systeem strxpschijf = "C:\Data\XP\" strcschijf = "C:\Data\C\" strwizschijf = "C:\Data\WIZ\" strgschijf = "C:\Data\G\" ' en de database strings voor het test systeem strwiz0x0 = "C:\Data\wiz\Wiz030.mdb" strwiziv = "C:\Data\wiz\WizIV.mdb" Case "020" ' Als "020" dan : ' worden de schijf strings goedgezet voor Wiz020 strxpschijf = "\\ECNTS1\G_sofcxp\Wizcon\" strcschijf = "D:\Data\BackUp\" strwizschijf = "D:\Wizprj\Wiz020\Database\" ' en de database strings voor Wiz020 strwiz0x0 = "D:\Wizprj\Wiz020\Database\Wiz020.mdb" strwiziv = "D:\Wizprj\Wiz020\Addons\WizIV.mdb" Case "030" ' Als "030" dan : ' worden de schijf strings goedgezet voor Wiz030 strxpschijf = "\\ECNTS1\G_sofcxp\Wizcon\" strcschijf = "G:\BackUp\" strgschijf = "G:\Databases\" strwizschijf = "C:\Wizprj\Wiz030\Database\" ' en de database strings voor Wiz030 strwiz0x0 = "C:\Wizprj\Wiz030\Database\Wiz030.mdb" strwiziv = "C:\Wizprj\Wiz030\Addons\WizIV.mdb" End Select 18 ECN-I--03-007

Private Sub RijCelVullen() RijCel(1) = "A" RijCel(2) = "B" RijCel(3) = "C" RijCel(4) = "D" RijCel(5) = "E" RijCel(6) = "F" RijCel(7) = "G" RijCel(8) = "H" RijCel(9) = "I" RijCel(10) = "J" RijCel(11) = "K" RijCel(12) = "L" RijCel(13) = "M" RijCel(14) = "N" RijCel(15) = "O" RijCel(16) = "P" RijCel(17) = "Q" RijCel(18) = "R" RijCel(19) = "S" RijCel(20) = "T" RijCel(21) = "U" RijCel(22) = "V" RijCel(23) = "W" RijCel(24) = "X" RijCel(25) = "Y" RijCel(26) = "Z" 4.4.3 OmzettingModule Deze module heeft de volgende stukjes programmacode : 1. De functie strwizdir geeft het volledige datapad van een brondatabase terug. 2. De functie strxpdir geeft het volledige pad van een doeldatabase op de XP schijf terug. 3. De functie strcdir geeft het volledige pad van een back-updatabase terug. 4. De functie strgdir geeft het volledige pad van een functie- of een werk-database terug. 5. De functie struitint geeft de stringwaarde van een integer terug. 6. De functie ETUitint geeft ET + stringwaarde integer terug 7. De functie SOUitint geeft SO + stringwaarde integer terug 8. De functie Uitvoer past de uitvoer van een schijfverwijzing naar wens aan. Option Compare Database Option Explicit ' Deze module verzorgt alle noodzakelijke omzettingen die door de hele database terugkomen Public Function strwizdir(naam As String) As String strwizdir = strwizschijf & Naam & ".mdb" ' Geeft een string met het juiste pad en de gekozen naam Public Function strxpdir(naam As String) As String ECN-I--03-007 19

strxpdir = strxpschijf & Naam & ".mdb" ' Geeft een string met het juiste pad en de gekozen naam Public Function strcdir(naam As String) As String strcdir = strcschijf & Naam & ".mdb" ' Geeft een string met het juiste pad en de gekozen naam Public Function strgdir(naam As String) As String strgdir = strgschijf & Naam & ".mdb" ' Geeft een string met het juiste pad en de gekozen naam Public Function struitint(nummer As Integer) As String struitint = CStr(Nummer) If Nummer < 10 Then struitint = "0" & struitint ' Zet integer om in string ' Als : geen voorloopnul ' Dan : voorloopnul toevoegen Public Function ETUitint(Nummer As Integer) As String ETUitint = "ET" & struitint(nummer) ' ET + nummer Public Function SOUitint(Nummer As Integer) As String SOUitint = "SO" & struitint(nummer) ' SO + nummer Public Function Uitvoer(Invoer As String, Tussen As String) As String Uitvoer = Left(Invoer, (Len(Invoer) - 4)) & Tussen & ".mdb" ' Invoer aanpassen met Tussen 4.4.4 QueryCelModule Deze module heeft de volgende stukjes programmacode : 4. De procedure GaasTellersBijwerken zorgt ervoor dat de gaastellers de juiste waarde krijgen bij de volgende celtest. 5. De procedure CelNummersToevoegen vult bekende data in die voor de tabel GegevensCellen bedoeld zijn. 6. De procedure Bijwerken roept de andere procedures aan in een gedefinieerde volgorde. Option Compare Database 20 ECN-I--03-007

Option Explicit ' Deze module verzorgt alle acties voor het bijwerken en bijhouden van de data Private Sub GaasTellersBijwerken() Dim rstcellen As Object Dim fldanode As Object Dim fldkathode As Object Dim str As String Dim intanode As Integer Dim intkathode As Integer DoCmd.SetWarnings False ' Geen waarschuwingen weergeven str = "SELECT Opstellingnummer, Celnummer, Anode, Kathode FROM GegevensCellen " & _ "ORDER BY Opstellingnummer, Celnummer;" ' Selectie maken Set rstcellen = CurrentDb.OpenRecordset(str) ' Gegevens ophalen Set fldanode = rstcellen.fields("anode") Set fldkathode = rstcellen.fields("kathode") For Teller = 0 To conmax ' Voor alle opstellingen str = "Opstellingnummer = " & Teller ' Per opstelling bijwerken rstcellen.movelast ' Data ophalen Do While True rstcellen.findfirst str If rstcellen.nomatch Then Exit Do rstcellen.edit ' Lege velden vullen If IsNull(fldAnode.Value) Then fldanode.value = 1 If IsNull(fldkathode.Value) Then fldkathode.value = 1 rstcellen.update ' Data wegschrijven intanode = fldanode.value intkathode = fldkathode.value Exit Do Loop Do While True rstcellen.find str If rstcellen.nomatch Then Exit Do rstcellen.edit ' Lege velden vullen If IsNull(fldAnode.Value) Then fldanode.value = intanode + 1 If IsNull(fldkathode.Value) Then fldkathode.value = intkathode + 1 rstcellen.update ' Data wegschrijven intanode = fldanode.value intkathode = fldkathode.value Loop Teller = 0 Set fldkathode = Nothing Set fldanode = Nothing Set rstcellen = Nothing Private Sub CelNummersToevoegen() ECN-I--03-007 21

Dim strsql As String DoCmd.SetWarnings False ' Geen waarschuwingen weergeven strsql = "INSERT INTO GegevensCellen (Opstellingnummer, Celnummer, Oppervlak) " & _ "SELECT Choose([ExpID]-9,1,2,3,4,5,6,7,8,9,10,11) AS OpstelNr, " & _ "Registraties.ExpNr, " & _ "Choose([OpstelNr],81,10,10,16,10,100,81,100,100,100,100) AS Opp " & _ "FROM Registraties;" DoCmd.RunSQL strsql ' Nieuwe celnummers toevoegen Public Sub Bijwerken() CelNummersToevoegen GaasTellersBijwerken ' Nieuwe celnummers ' Tellers voor anode en kathode gazen bijwerken 22 ECN-I--03-007

5. DATABACKUPCOMPACT Deze database voert vijf functies uit. De eerste functie is het kopiëren van de nieuw gegenereerde data naar back-updatabases. Hierdoor wordt alle data per opstelling bewaard in één back-updatabase. De tweede functie is het beperken van de door Wizcon geproduceerde brondatabases. Indien deze databases te groot worden neemt het dumpen van de data naar deze brondatabases veel tijd in beslag. Uiteindelijk wordt Wizcon door de grote datafiles instabiel. De derde functie bestaat uit het kopiëren van deze back-updatabases naar een netwerkschijf zodat ze beschikbaar komen voor de gebruikers. De vierde functie is het beperken van twee Wizcon logfiles. Als deze te groot worden verminderd de betrouwbaarheid van het systeem. De vijfde functie bestaat uit het periodiek comprimeren van de datafiles. Deze database bevat : 0 tabellen 0 queries 0 formulieren 0 rapporten 3 macro s 7 modules. 5.1 Macro s De drie macro s in de database DataBackupCompact zijn : Afsluiten ComprimeerBron DataBackUp Macro s hebben acties en beschrijvingen. De acties geven aan wat de macro moet doen en de beschrijvingen geven een mogelijkheid om in de macro uitleg te geven over die actie. 5.1.1 Afsluiten De structuur van de macro afsluiten is weergegeven in Tabel 1. Tabel 3 De structuur van macro 'Afsluiten' Actie Beschrijving BerichtenInstellen Geen berichten Deze actie zorgt ervoor dat vensters die normaal gesproken om actie vragen van de gebruiker worden genegeerd. De macro wordt niet meer onderbroken. ProcedureUitvoeren AlgemeneDataModule, functie VerbreekVerbinding(), alle koppelingen verbreken Deze actie start een procedure die alle gekoppelde tabellen uit de database verwijdert Afsluiten Database afsluiten Deze actie sluit de database af 5.1.2 ComprimeerBron De structuur van de macro ComprimeerBron is weergegeven in Tabel 2. ECN-I--03-007 23

Tabel 4 De structuur van macro 'ComprimeerBron' Actie Beschrijving BerichtenInstellen Geen berichten Deze actie zorgt ervoor dat vensters die normaal gesproken om actie vragen van de gebruiker worden genegeerd. De macro wordt niet meer onderbroken. ProcedureUitvoeren DeclaratieModule, functie Initialisatie(), geeft startwaarde aan alle variabelen Deze actie start een procedure die de gebruikte variabelen de juiste waarde geeft ProcedureUitvoeren AlgemeneDataModule, functie StartAlgemeen(), controle en linken Deze actie start een serie van procedures die controleren welke brondatabases bestaan. De tabellen van deze databases worden dan gekoppeld voor verder gebruik. ProcedureUitvoeren ComprimeerDataModule, functie Comprimeer(), bron en backupdatabases comprimeren Deze actie zorgt ervoor dat de bron en de backupdatabases allen gecomprimeerd worden ProcedureUitvoeren BeperkingDataModule, functie BeperkStatus(), de tabel Status uit Wiz0x0 in grootte beperken. Deze actie beperkt de grootte van de tabel, anders zou deze oneindig groeien en uiteindelijk instabiliteit verzorgen ProcedureUitvoeren BeperkingDataModule, functie BeperktblStatus(), de tabel tblstatus uit WizIV in grootte beperken. Deze actie beperkt de grootte van de tabel, anders zou deze oneindig groeien en uiteindelijk instabiliteit verzorgen MacroStarten Database afsluiten Deze actie sluit de database af 5.1.3 DataBackUp De structuur van de macro DataBackUp is weergegeven in Tabel 5. Tabel 5 De structuur van macro 'DataBackUp' Actie Beschrijving BerichtenInstellen Geen berichten Deze actie zorgt ervoor dat vensters die normaal gesproken om actie vragen van de gebruiker worden genegeerd. De macro wordt niet meer onderbroken. ProcedureUitvoeren DeclaratieModule, functie Initialisatie(), geeft startwaarde aan alle variabelen Deze actie start een procedure die de gebruikte variabelen de juiste waarde geeft ProcedureUitvoeren AlgemeneDataModule, functie StartAlgemeen(), controle en linken Deze actie start een serie van procedures die controleren welke brondatabases bestaan. De tabellen van deze databases worden dan gekoppeld voor verder gebruik. ProcedureUitvoeren QueryDataModule, functie TransportData(), toevoegen data aan backup en beperken originele datahoeveelheid Deze actie start een procedure die voor elke gekoppelde tabel twee query s uitvoerd. De eerste transporteert data van bron naar backupdatabase, de tweede beperkt de datatot maximaal vijftig dagen. ProcedureUitvoeren KopieerModule, functie Transport(), kopiëren van de databases naar de XP schijf Deze actie start een procedure die backupdatabases kopieert naar doeldatabases. MacroStarten Database afsluiten Deze actie sluit de database af 24 ECN-I--03-007

5.2 Modules De zeven modules zijn : AlgemeneDataModule BeperkingdataModule ComprimeerDataModule DeclaratieModule KopieerModule OmzettingModule QueryDataModule Modules zijn verzamelingen van stukjes programma die elk een eigen functionaliteit hebben. Deze programmacode is weergegeven als tekst. 5.2.1 AlgemeneDataModule Deze module heeft de volgende stukjes programmacode : 7. De functie StartAlgemeen roept diverse andere programmadelen aan in een gedefinieerde volgorde. 8. De procedure BestaatSO controleert of de brondatabases bestaan. 9. De procedure BestaatET controleert of de back-updatabases bestaan. 10. De procedure KoppelenSO maakt een gekoppelde tabel aan voor elke brondatabase die bestaat als die een brontabel met meetgegevens heeft. 11. De procedure KoppelenET maakt een gekoppelde tabel aan voor elke back-updatabase die bestaat. Als de back-uptabel niet bestaat wordt deze aangemaakt en gekoppeld. Als de backupdatabase niet bestaat en de brondatabase wel, dan wordt er een back-updatabase aangemaakt met een juiste tabel. Deze tabel wordt alsnog gekoppeld. 12. De functie VerbreekVerbinding verwijdert alle gekoppelde tabellen uit de database. Option Compare Database Option Explicit ' Deze module verzorgt alle noodzakelijke instellingen bij opstart ' en past databases aan bij veranderingen Public Function StartAlgemeen() VerbreekVerbinding BestaatSO BestaatET KoppelenSO KoppelenET ' Verbreek alle koppelingen ' blnso : welke database bestaat ' blnet : welke backup bestaat ' Koppelingen naar SO databases maken ' Koppelingen naar backup databases maken Private Sub BestaatSO() On Error GoTo Foutafhandeling ' Als er een fout optreedt For Teller = 0 To conmax ' Voor alle opstellingen blnso(teller) = True ' Database bestaat FileLen (strwizdir(souitint(teller))) ' Bepaal bestandsgrootte van database Teller = 0 Exit Sub Foutafhandeling: ' Verlaat procedure ECN-I--03-007 25

' Dit gedeelte wordt uitgevoerd als er een fout optreedt If Err = 53 Then ' Indien fout : kan het bestand niet vinden blnso(teller) = False ' Dan : database bestaat niet Resume ' Ga verder met de volgende Else ' Anders : Dim intfoutnummer As Integer intfoutnummer = Err Err.Clear Err.Raise intfoutnummer ' Geef de juiste foutmelding Private Sub BestaatET() On Error GoTo Foutafhandeling For Teller = 0 To conmax blnet(teller) = True FileLen (strcdir(etuitint(teller))) Teller = 0 ' Als er een fout optreedt ' Voor alle opstellingen ' Backup database bestaat ' Bepaal bestandsgrootte van database Exit Sub ' Verlaat procedure Foutafhandeling: ' Dit gedeelte wordt uitgevoerd als er een fout optreedt If Err = 53 Then ' Indien fout : kan het bestand niet vinden blnet(teller) = False ' Dan : backup database bestaat niet Resume ' Ga verder met de volgende Else ' Anders : Dim intfoutnummer As Integer intfoutnummer = Err Err.Clear Err.Raise intfoutnummer ' Geef de juiste foutmelding Private Sub KoppelenSO() On Error GoTo Foutafhandeling ' Als er een fout optreedt Dim strso As String For Teller = 0 To conmax ' Voor alle opstellingen If blnso(teller) = True Then ' Als database bestaat strso = SOUitint(Teller) ' Dan : maak een koppeling DoCmd.TransferDatabase aclink, "Microsoft Access", strwizdir(strso),,contabel, strso& "IN" Exit Sub ' Verlaat procedure Foutafhandeling: ' Dit gedeelte wordt uitgevoerd als er een fout optreedt If Err = 3011 Then ' Indien fout : tabel bestaat niet blnso(teller) = False ' Dan : beweer dat database niet bestaat Resume ' Ga verder met de volgende Else ' Anders : Dim intfoutnummer As Integer 26 ECN-I--03-007

intfoutnummer = Err Err.Clear Err.Raise intfoutnummer ' Geef de juiste foutmelding Private Sub KoppelenET() On Error GoTo Foutafhandeling ' Als er een fout optreedt Dim objdatabase As Object Dim stret As String Dim strso As String For Teller = 0 To conmax ' Voor alle opstellingen stret = ETUitint(Teller) strso = SOUitint(Teller) If blnet(teller) = True Then ' Als backup database bestaat ' Dan : maak een koppeling DoCmd.TransferDatabase aclink, "Microsoft Access", strcdir(stret),, strso, strso & "UIT" ElseIf blnso(teller) = True Then ' Als database bestaat, maar backup database niet ' Dan : maak backup database Set objdatabase = CreateDatabase(strCdir(ETUitint(Teller)), dblangdutch) Set objdatabase = Nothing ' En kopieer de nieuwe datatabel (via de huidige database) naar de backup DoCmd.TransferDatabase acimport, "Microsoft Access", strwizdir(strso),, contabel, strso DoCmd.TransferDatabase acexport, "Microsoft Access", strcdir(stret),, strso, strso CurrentDb.TableDefs.Delete strso ' En maak een nieuwe koppeling DoCmd.TransferDatabase aclink, "Microsoft Access", strcdir(stret),, strso, strso & "UIT" Exit Sub ' Verlaat procedure Foutafhandeling: ' Dit gedeelte wordt uitgevoerd als er een fout optreedt If Err = 3011 Then ' Indien fout : tabel bestaat niet ' Dan : kopieer de nieuwe datatabel (via de huidige database) naar de backup DoCmd.TransferDatabase acimport, "Microsoft Access", strwizdir(strso),, contabel, strso DoCmd.TransferDatabase acexport, "Microsoft Access", strcdir(stret),, strso, strso CurrentDb.TableDefs.Delete strso ' En maak een nieuwe koppeling DoCmd.TransferDatabase aclink, "Microsoft Access", strcdir(stret),, strso, strso & "UIT" Resume ' Ga verder met de volgende Else ' Anders : Dim intfoutnummer As Integer intfoutnummer = Err Err.Clear Err.Raise intfoutnummer ' Geef de juiste foutmelding Public Function VerbreekVerbinding() For Teller = CurrentDb.TableDefs.Count - 1 To 0 Step 1 ' Alle tabellen controleren If CurrentDb.TableDefs(Teller).Attributes And dbattachedtable Then ' Als tabel is gekoppeld ECN-I--03-007 27

CurrentDb.TableDefs.Delete CurrentDb.TableDefs(Teller).Name Teller = 0 ' Tabel verwijderen 5.2.2 BeperkingDataModule Deze module heeft de volgende stukjes programmacode : 1. De functie BeperkStatus beperkt de grootte van de tabel Status van de Wizcondatabase Wiz0x0. De tabel wordt gelimiteerd op maximaal 5000 records en maximaal 300 dagen oud. De beperking van de tabel is nodig omdat Wizcon zelf deze tabel ongestoord laat groeien. Dit veroorzaakt uiteindelijk problemen. 2. De functie BeperktblStatus beperkt de grootte van de tabel tblstatus van de Wizcondatabase WizIV. De tabel wordt gelimiteerd op maximaal 5000 records en maximaal 300 dagen oud. De beperking van de tabel is nodig omdat Wizcon zelf deze tabel ongestoord laat groeien. Dit veroorzaakt uiteindelijk problemen. Option Compare Database Option Explicit ' Deze module beperkt de grootte van de Wiz0x0 Database en de WizIV Database Public Function BeperkStatus() Const conaantal As Long = 5000 Const contijd As Integer = 300 Dim intaantal As Long Dim inteind As Long Dim dbswiz As Object Dim rststatus As Object ' Maximaal aantal records ' Maximale tijdsspanne Set dbswiz = DBEngine.Workspaces(0).OpenDatabase(strWiz0x0) ' Openen Wiz0x0 Set rststatus = dbswiz.openrecordset("status") ' Openen Status rststatus.index = "ID" intaantal = rststatus.recordcount rststatus.movelast inteind = rststatus.fields("id").value rststatus.movefirst ' ID als index ' Aantal records ' Ga naar laatste record ' Hoogste nummer ' Ga naar eerste record If intaantal > conaantal Then ' Als : aantal groter dan maximaal Do ' Dan : voor alle records : If rststatus.fields("id").value < inteind - conaantal Then ' Als : waarde kleiner dan toegestaan rststatus.delete ' Dan : verwijderen rststatus.move ' Volgende record Loop Until rststatus.fields("id").value = inteind rststatus.movefirst ' Ga naar eerste record Do ' Voor alle records : If rststatus.fields("dt").value < Now() - contijd Then ' Als : record is ouder dan toegestaan rststatus.delete ' Dan : verwijderen 28 ECN-I--03-007

rststatus.move ' Volgende record Loop Until rststatus.fields("id").value = inteind Set rststatus = Nothing Set dbswiz = Nothing Public Function BeperktblStatus() Const conaantal As Long = 5000 Const contijd As Integer = 300 Dim intaantal As Long Dim inteind As Long Dim dbswiz As Object Dim rststatus As Object ' Maximaal aantal records ' Maximale tijdsspanne Set dbswiz = DBEngine.Workspaces(0).OpenDatabase(strWizIV) Set rststatus = dbswiz.openrecordset("tblstatus") ' Openen WizIV ' Openen tblstatus rststatus.index = "ExpID" intaantal = rststatus.recordcount rststatus.movelast inteind = rststatus.fields("id").value rststatus.movefirst ' ExpID als index ' Aantal records ' Ga naar laatste record ' Hoogste nummer ' Ga naar eerste record If intaantal > conaantal Then ' Als : aantal groter dan maximaal Do ' Dan : voor alle records : If rststatus.fields("id").value < inteind - conaantal Then ' Als : waarde kleiner dan toegestaan rststatus.delete ' Dan : verwijderen rststatus.move ' Volgende record Loop Until rststatus.fields("id").value = inteind rststatus.movefirst ' Ga naar eerste record Do ' Voor alle records : If rststatus.fields("date").value < Now() - contijd Then ' Als : record is ouder dan toegestaan rststatus.delete ' Dan : verwijderen rststatus.move ' Volgende record Loop Until rststatus.fields("id").value = inteind Set rststatus = Nothing Set dbswiz = Nothing 5.2.3 ComprimeerDataModule Deze module heeft de volgende stukjes programmacode : 1. De functie Comprimeer zorgt ervoor dat zowel de bron als de backupdatabases worden gecomprimeerd. ECN-I--03-007 29

2. De procedure ControleerFiles verwijdert hulpfiles die door de functie Comprimeer worden gemaakt. Option Compare Database Option Explicit ' Deze module zorgt voor het comprimeren van de brondatabases en de doeldatabases Public Function Comprimeer() Dim strbron As String Dim strdoel As String ControleerFiles For Teller = 1 To conmax ' Voor alle databases If blnso(teller) = True Then ' Als : brondatabase bestaat strbron = strwizdir(souitint(teller)) ' Dan : strdoel = Uitvoer(strBron, "COMPRIMEER") DBEngine.CompactDatabase strbron, strdoel ' Comprimeer brondatabase van strbron naar strdoel Kill strbron ' Verwijder strbron FileCopy strdoel, strbron ' Kopieer van strdoel naar strbron Teller = 0 For Teller = 1 To conmax ' Voor alle databases If blnet(teller) = True Then ' Als : doeldatabase bestaat strbron = strcdir(etuitint(teller)) ' Dan : strdoel = Uitvoer(strBron, "COMPRIMEER") DBEngine.CompactDatabase strbron, strdoel ' Comprimeer doeldatabase van strbron naar strdoel Kill strbron ' Verwijder strbron FileCopy strdoel, strbron ' Kopieer van strdoel naar strbron Teller = 0 ControleerFiles Private Sub ControleerFiles() Dim strbron As String Dim strdoel As String For Teller = 1 To conmax ' Voor alle databases strbron = strwizdir(souitint(teller)) ' Bron database strdoel = Uitvoer(strBron, "COMPRIMEER") ' Nieuwe database uit brondatabase If Dir(strDoel) <> "" Then ' Als : de nieuwe database bestaat Kill strdoel ' Dan : deze verwijderen Teller = 0 For Teller = 1 To conmax ' Voor alle databases strbron = strcdir(etuitint(teller)) ' Doel database strdoel = Uitvoer(strBron, "COMPRIMEER") ' Nieuwe database uit doeldatabase 30 ECN-I--03-007

If Dir(strDoel) <> "" Then Kill strdoel Teller = 0 ' Als : nieuwe database bestaat ' Dan : deze verwijderen 5.2.4 DeclaratieModule Deze module heeft de volgende stukjes programmacode : 6. De declaraties verzorgen de variabelen en constanten die nodig zijn binnen deze database. De hier gedeclareerde waarden zijn beschikbaar binnen de hele database. 7. De functie Initialisatie roept de initialisatie routines aan. Dit is nodig omdat de diverse initialisatie routines niet van buiten deze module kunnen worden aangeroepen. 8. De procedure InitialisatieBLN geeft de publieke variabelen blnso en blnet een startwaarde. 9. De procedure InitialisatieSchijf zet alle computerspecifieke verwijzingen goed. De keuze wordt bepaald door de waarde van consysteem. De mogelijkheden zijn Test (voor testen), 020 (voor Wiz020) en 030 (voor Wiz030). 10. De procedure RijCelVullen is bedoeld voor uitbreidingen. Option Compare Database Option Explicit ' Deze module verzorgt alle noodzakelijke declaraties die door de gehele database worden gebruikt Public Const conmax As Integer = 30 Public Const contabel As String = "Data" Public blnso(0 To conmax) As Boolean Public blnet(0 To conmax) As Boolean Public Teller As Integer Public strxpschijf As String Public strcschijf As String Public strgschijf As String Public strwizschijf As String Public strwiz0x0 As String Public strwiziv As String ' Aantal opstellingen ' Naam tabel in Wizcon output ' Rij met bestaande Wizcon databases ' Rij met bestaande BackUp databases ' Waarde gebruikt in For.. lussen ' Verwijzing naar XP directorie ' Verwijzing naar BackUp directorie ' Verwijzing naar Database directorie ' Verwijzing naar Wizcon directorie ' Verwijzing naar Wiz0x0 database ' Verwijzing naar WizIV database Dim RijCel(1 To 26) As String Const consysteem As String = "030" ' Bepaalt de waarde van verwijzingen naar schijven Public Function Initialisatie() InitialisatieBLN InitialisatieSchijf RijCelVullen ' Alle bln's initialiseren ' Schijfverwijzingen goedzetten ' Celnummers goedzetten Private Sub InitialisatieBLN() ECN-I--03-007 31

For Teller = 0 To conmax blnso(teller) = False blnet(teller) = False Teller = 0 ' Voor alle opstellingen ' Initialiseer blnso ' Initialiseer blnet Private Sub InitialisatieSchijf() Select Case consysteem ' Waarde van consysteem Case "test" ' Als "test" dan : ' worden de schijf strings goedgezet voor het test systeem strxpschijf = "C:\Data\XP\" strcschijf = "C:\Data\C\" strwizschijf = "C:\Data\WIZ\" strgschijf = "C:\Data\G\" ' en de database strings voor het test systeem strwiz0x0 = "C:\Data\wiz\Wiz030.mdb" strwiziv = "C:\Data\wiz\WizIV.mdb" Case "020" ' Als "020" dan : ' worden de schijf strings goedgezet voor Wiz020 strxpschijf = "\\ECNTS1\G_sofcxp\Wizcon\" strcschijf = "D:\Data\BackUp\" strwizschijf = "D:\Wizprj\Wiz020\Database\" ' en de database strings voor Wiz020 strwiz0x0 = "D:\Wizprj\Wiz020\Database\Wiz020.mdb" strwiziv = "D:\Wizprj\Wiz020\Addons\WizIV.mdb" Case "030" ' Als "030" dan : ' worden de schijf strings goedgezet voor Wiz030 strxpschijf = "\\ECNTS1\G_sofcxp\Wizcon\" strcschijf = "G:\BackUp\" strgschijf = "G:\Databases\" strwizschijf = "C:\Wizprj\Wiz030\Database\" ' en de database strings voor Wiz030 strwiz0x0 = "C:\Wizprj\Wiz030\Database\Wiz030.mdb" strwiziv = "C:\Wizprj\Wiz030\Addons\WizIV.mdb" End Select Private Sub RijCelVullen() RijCel(1) = "A" RijCel(2) = "B" RijCel(3) = "C" RijCel(4) = "D" RijCel(5) = "E" RijCel(6) = "F" RijCel(7) = "G" RijCel(8) = "H" RijCel(9) = "I" RijCel(10) = "J" RijCel(11) = "K" 32 ECN-I--03-007

RijCel(12) = "L" RijCel(13) = "M" RijCel(14) = "N" RijCel(15) = "O" RijCel(16) = "P" RijCel(17) = "Q" RijCel(18) = "R" RijCel(19) = "S" RijCel(20) = "T" RijCel(21) = "U" RijCel(22) = "V" RijCel(23) = "W" RijCel(24) = "X" RijCel(25) = "Y" RijCel(26) = "Z" 5.2.5 KopieerModule Deze module heeft de volgende stukjes programmacode : 1. De functie Transport kopieert alle bestaande back-updatabases naar de XP schijf. 2. De procedure Transport2 kopieert functiedatabases naar de XP schijf. 3. De procedure ExportSO exporteert de SO tabellen naar de werkdatabase LopendeCel. Van daaruit wordt de data in gecomprimeerde vorm overgebracht naar functiedatabase LopendeCel030C. 4. De functie Overzetten voert de procedures ExportSO en Transport2 uit. Option Compare Database Option Explicit ' Deze module zorgt voor het kopieren van de files naar de XP schijf Public Function Transport() On Error GoTo Foutafhandeling ' Als er een fout optreedt For Teller = 1 To conmax ' Voor elke backup FileCopy strcdir(etuitint(teller)), strxpdir(etuitint(teller)) Teller = 0 ' Kopieer deze van C naar XP Exit Function ' Verlaat functie Foutafhandeling: ' Dit gedeelte wordt uitgevoerd als er een fout optreedt If Err = 53 Then ' Indien fout : kan het bestand niet vinden Resume ' Dan : ga verder met de volgende Else ' Anders : Dim intfoutnummer As Integer intfoutnummer = Err Err.Clear Err.Raise intfoutnummer ' Geef de juiste foutmelding Private Sub Transport2() On Error GoTo Foutafhandeling ' Als er een fout optreedt ECN-I--03-007 33

Dim str As String str = "Celgegevens" FileCopy strgdir(str), strxpdir(str) str = "LopendeCel030C" FileCopy strgdir(str), strxpdir(str) ' Kopieer van G naar XP ' Kopieer van G naar XP Exit Sub ' Verlaat functie Foutafhandeling: ' Dit gedeelte wordt uitgevoerd als er een fout optreedt If Err = 53 Then ' Indien fout : kan het bestand niet vinden Resume ' Dan : ga verder met de volgende Else ' Anders : Dim intfoutnummer As Integer intfoutnummer = Err Err.Clear Err.Raise intfoutnummer ' Geef de juiste foutmelding Private Sub ExportSO() Dim strso As String Dim stret As String Dim strbron As String Dim strdoel As String stret = "LopendeCel" For Teller = 0 To conmax ' Voor alle SO tabellen strso = SOUitint(Teller) If blnet(teller) Then ' Die bestaan DoCmd.TransferDatabase acexport, "Microsoft Access", strgdir(stret),, strso, strso ' Exporteer naar LopendeCel strso = "GegevensCellen" ' Idem voor GegevensCellen DoCmd.TransferDatabase acexport, "Microsoft Access", strgdir(stret),, strso, strso strso = stret & "030C" strbron = strgdir(stret) strdoel = strgdir(strso) If Dir(strDoel) <> "" Then ' Als : de nieuwe database bestaat Kill strdoel ' Dan : deze verwijderen DBEngine.CompactDatabase strbron, strdoel ' Comprimeer doeldatabase van strbron naar strdoel Public Function Overzetten() ExportSO Transport2 ' Alle tabellen overzetten ' De databases overzetten 34 ECN-I--03-007

5.2.6 OmzettingModule Deze module heeft de volgende stukjes programmacode : 9. De functie strwizdir geeft het volledige datapad van een brondatabase terug. 10. De functie strxpdir geeft het volledige pad van een doeldatabase op de XP schijf terug. 11. De functie strcdir geeft het volledige pad van een back-updatabase terug. 12. De functie strgdir geeft het volledige pad van een functie- of een werk-database terug. 13. De functie struitint geeft de stringwaarde van een integer terug. 14. De functie ETUitint geeft ET + stringwaarde integer terug 15. De functie SOUitint geeft SO + stringwaarde integer terug 16. De functie Uitvoer past de uitvoer van een schijfverwijzing naar wens aan. Option Compare Database Option Explicit ' Deze module verzorgt alle noodzakelijke omzettingen die door de hele database terugkomen Public Function strwizdir(naam As String) As String strwizdir = strwizschijf & Naam & ".mdb" ' Geeft een string met het juiste pad en de gekozen naam Public Function strxpdir(naam As String) As String strxpdir = strxpschijf & Naam & ".mdb" ' Geeft een string met het juiste pad en de gekozen naam Public Function strcdir(naam As String) As String strcdir = strcschijf & Naam & ".mdb" ' Geeft een string met het juiste pad en de gekozen naam Public Function strgdir(naam As String) As String strgdir = strgschijf & Naam & ".mdb" ' Geeft een string met het juiste pad en de gekozen naam Public Function struitint(nummer As Integer) As String struitint = CStr(Nummer) If Nummer < 10 Then struitint = "0" & struitint ' Zet integer om in string ' Als : geen voorloopnul ' Dan : voorloopnul toevoegen Public Function ETUitint(Nummer As Integer) As String ECN-I--03-007 35

ETUitint = "ET" & struitint(nummer) ' ET + nummer Public Function SOUitint(Nummer As Integer) As String SOUitint = "SO" & struitint(nummer) ' SO + nummer Public Function Uitvoer(Invoer As String, Tussen As String) As String Uitvoer = Left(Invoer, (Len(Invoer) - 4)) & Tussen & ".mdb" ' Invoer aanpassen met Tussen 5.2.7 QueryDataModule Deze module heeft de volgende stukjes programmacode : 1. De functie TransportData voert voor elk paar van bestaande databases 2 queries uit. De eerste is het toevoegen van nieuwe data uit de brondatabases aan de back-updatabases. De tweede query beperkt de brondatabases tot een termijn van 50 dagen. 2. De procedure AanpassenET wordt gebruikt als de tabellen in de bron en back-up database verschillen van structuur. De procedure geeft de oude tabel in de back-updatabase een nieuwe naam en kopieert de tabel uit de brondatabase en plaatst deze in de back-updatabase. Option Compare Database Option Explicit ' Transport van data uit SOxx.mdb contabel naar ETxx.mdb "SOxx" Public Function TransportData() On Error GoTo Foutafhandeling Dim strsql As String DoCmd.SetWarnings False ' Als er een fout optreedt ' Geen waarschuwingen weergeven For Teller = 0 To conmax ' Voor alle opstellingen If blnet(teller) = True And blnso(teller) = True Then ' Die beide databases hebben strsql = "INSERT INTO " & SOUitint(Teller) & "UIT " & _ "SELECT " & SOUitint(Teller) & "IN.* " & _ "FROM " & SOUitint(Teller) & "IN;" DoCmd.RunSQL strsql ' Voeg data toe aan de backupdatabase strsql = "DELETE " & SOUitint(Teller) & "IN.DT, " & SOUitint(Teller) & "IN.* " & _ "FROM " & SOUitint(Teller) & "IN " & _ "WHERE (((" & SOUitint(Teller) & "IN.DT)<Now()-50));" DoCmd.RunSQL strsql ' Beperk de originele data tot 50 dagen Teller = 0 Exit Function Foutafhandeling: ' Verlaat procedure 36 ECN-I--03-007

' Dit gedeelte wordt uitgevoerd als er een fout optreedt If Err = 3070 Then ' Indien fout : de tabeldefinities verschillen AanpassenET (Teller) ' Procedure AanpassenET Resume ' Dan : ga verder met de volgende Else ' Anders : Dim intfoutnummer As Integer intfoutnummer = Err Err.Clear Err.Raise intfoutnummer ' Geef de juiste foutmelding Private Sub AanpassenET(Nummer As Integer) Dim Bron As Object Dim Tabel As Object Dim Naam As String Dim strso As String Dim stret As String Set Bron = OpenDatabase(strCdir(ETUitint(Nummer))) strso = SOUitint(Nummer) stret = ETUitint(Nummer) ' Open de database For Teller = 0 To Bron.TableDefs.Count 1 ' Voor elke tabeldefinitie in de geopende database Set Tabel = Bron.TableDefs(Teller) Naam = Tabel.Name If Naam = SOUitint(Nummer) Then ' Als de goede tabel is gevonden dan : CurrentDb.TableDefs.Delete strso & "UIT" ' Verwijder de koppeling in de huidige database Tabel.Name = Naam & "_tot_" & Now() ' Hernoem de tabel ' Kopieer de nieuwe datatabel (via de huidige database) naar de backup DoCmd.TransferDatabase acimport, "Microsoft Access", strwizdir(strso),, contabel, strso DoCmd.TransferDatabase acexport, "Microsoft Access", strcdir(stret),, strso, strso CurrentDb.TableDefs.Delete strso ' En maak een nieuwe koppeling DoCmd.TransferDatabase aclink, "Microsoft Access", strcdir(stret),, strso, strso & "UIT" Teller = Nummer Set Tabel = Nothing Set Bron = Nothing ' Zet globale waarde 'Teller' weer op de goede waarde voor de lus ' Geef 'Tabel' vrij ' Geef 'Bron' vrij ECN-I--03-007 37

38 ECN-I--03-007

6. IVCEL De database is een functiedatabase. Deze heeft als functie het laten zien van (zojuist) opgenomen I-V curven van nog lopende cellen. De operators hebben hiermee een eenvoudige methode om te controleren of de I-V curve naar wens is opgenomen en geregistreerd. Deze database bevat : 0 tabellen 0 queries 1 formulier 0 rapporten 1 macro 3 modules. 6.1 Formulieren Het formulier in de database IVcel is : IVGrafiek Een formulier is een methode om interactief data te presenteren aan de gebruiker. Figuur 5 Weergave van het formulier IVgrafiek uit de database IVcel Het formulier bestaat uit meerdere onderdelen. Het kader ( Cel Keuze ) dient om een opstelling te selecteren. De grafiek wordt weergegeven door een object voor grafiekweergave. Verder is er een formuliermodule om diverse acties in goede banen te leiden. De bron voor het formulier en voor de grafiek is een koppeling naar één van de SOxx brondatabases. Welke koppeling wordt bepaald door de keuze van de opstelling. ECN-I--03-007 39

De module, die is verbonden aan het formulier, is relatief eenvoudig. Option Compare Database Option Explicit Private Sub Form_Open(Cancel As Integer) ' Bij openen formulier Initialisatie StartAlgemeen KnoppenUit KnoppenAan ' Beginwaarden goedzetten ' Verbindingen maken ' Alle knoppen in kader onzichtbaar maken ' Geselecteerde knoppen zichtbaar maken Private Sub KnoppenUit() Me.ET01.Visible = False Me.ET02.Visible = False Me.ET03.Visible = False Me.ET04.Visible = False Me.ET05.Visible = False Me.ET06.Visible = False Me.ET07.Visible = False Me.ET08.Visible = False Me.ET09.Visible = False Me.ET10.Visible = False Me.ET11.Visible = False ' Knop ET01 onzichtbaar maken ' Knop ET02 onzichtbaar maken ' Knop ET03 onzichtbaar maken ' Knop ET04 onzichtbaar maken ' Knop ET05 onzichtbaar maken ' Knop ET06 onzichtbaar maken ' Knop ET07 onzichtbaar maken ' Knop ET08 onzichtbaar maken ' Knop ET09 onzichtbaar maken ' Knop ET10 onzichtbaar maken ' Knop ET11 onzichtbaar maken Private Sub KnoppenAan() For Teller = 0 To conmax ' Voor alle opstellingen If blnet(teller) = True Then ' Die bestaan Select Case Teller Case 1 Me.ET01.Visible = True ' Knop Zichtbaar maken Me.Kader1.Value = 1 ' Opstelling = 1 Case 2 Me.ET02.Visible = True ' Knop Zichtbaar maken Me.Kader1.Value = 2 ' Opstelling = 2 Case 3 Me.ET03.Visible = True ' Knop Zichtbaar maken Me.Kader1.Value = 3 ' Opstelling = 3 Case 4 Me.ET04.Visible = True ' Knop Zichtbaar maken Me.Kader1.Value = 4 ' Opstelling = 4 Case 5 Me.ET05.Visible = True ' Knop Zichtbaar maken Me.Kader1.Value = 5 ' Opstelling = 5 Case 6 Me.ET06.Visible = True ' Knop Zichtbaar maken Me.Kader1.Value = 6 ' Opstelling = 6 Case 7 Me.ET07.Visible = True ' Knop Zichtbaar maken Me.Kader1.Value = 7 ' Opstelling = 7 Case 8 Me.ET08.Visible = True ' Knop Zichtbaar maken Me.Kader1.Value = 8 ' Opstelling = 8 40 ECN-I--03-007

Case 9 Me.ET09.Visible = True ' Knop Zichtbaar maken Me.Kader1.Value = 9 ' Opstelling = 9 Case 10 Me.ET10.Visible = True ' Knop Zichtbaar maken Me.Kader1.Value = 10 ' Opstelling = 10 Case 11 Me.ET11.Visible = True ' Knop Zichtbaar maken Me.Kader1.Value = 11 ' Opstelling = 11 End Select RijbronGrafiek (Me.Kader1.Value) ' Pas de grafiek aan Private Sub RijbronGrafiek(intOpstelling As Integer) Dim strrijbron As String Dim strso As String Dim strvcel As String Dim stricel As String Dim intmax As Integer strso = SOUitint(intOpstelling) ' SOxx intmax = DMax("[ExpNr]", strso & "IN") ' Max celnummer strvcel = "[" & strso & "_V_CEL_A_1]" ' Selectie string stricel = "[" & strso & "_I_CEL_A_1]" strrijbron = "TRANSFORM Avg(" & strvcel & ") AS [Vcel] " & _ "SELECT " & stricel & " " & _ "FROM [" & strso & "IN] " & _ "WHERE ((([Code]) = ""P"") AND (([ExpNr]) = " & intmax & ")) " & _ "GROUP BY " & stricel & " " & _ "PIVOT [RegNr];" Me.Grafiek1.RowSource = strrijbron ' Grafiek maken Me.Koptekst.Caption = ETUitint(intOpstelling) & "-" & intmax ' Titel maken Private Sub Kader1_AfterUpdate() RijbronGrafiek (Me.Kader1.Value) ' Bij kiezen opstelling ' Nieuwe grafiek maken 6.2 Macro s De macro in de database IVcel is : Afsluiten Macro s hebben acties en beschrijvingen. De acties geven aan wat de macro moet doen en de beschrijvingen geven een mogelijkheid om in de macro uitleg te geven over die actie. 6.2.1 Afsluiten De structuur van de macro afsluiten is weergegeven in Tabel 1. ECN-I--03-007 41

Tabel 6 De structuur van macro 'Afsluiten' Actie Beschrijving BerichtenInstellen Geen berichten Deze actie zorgt ervoor dat vensters die normaal gesproken om actie vragen van de gebruiker worden genegeerd. De macro wordt niet meer onderbroken. ProcedureUitvoeren AlgemeneIVModule, functie VerbreekVerbinding(), alle koppelingen verbreken Deze actie start een procedure die alle gekoppelde tabellen uit de database verwijdert Afsluiten Database afsluiten Deze actie sluit de database af 6.3 Modules De drie modules zijn : AlgemeneIVModule DeclaratieModule OmzettingModule Modules zijn verzamelingen van stukjes programma die elk een eigen functionaliteit hebben. Deze programmacode is weergegeven als tekst. 6.3.1 AlgemeneIVModule Deze module heeft de volgende stukjes programmacode : 13. De functie StartAlgemeen roept diverse andere programmadelen aan in een gedefinieerde volgorde. 14. De procedure BestaatSO controleert of de brondatabases bestaan. 15. De procedure KoppelenSO maakt een gekoppelde tabel aan voor elke brondatabase die bestaat als die een brontabel met meetgegevens heeft. 16. De functie VerbreekVerbinding verwijdert alle gekoppelde tabellen uit de database. 17. De procedure OpstellingSelectie selecteert de opstellingen met P data eruit Option Compare Database Option Explicit ' Deze module verzorgt alle noodzakelijke instellingen bij opstart ' en past databases aan bij veranderingen Public Function StartAlgemeen() VerbreekVerbinding BestaatSO KoppelenSO OpstellingSelectie ' Verbreek alle koppelingen ' blnso : welke database bestaat ' Koppelingen naar SO databases maken ' Opstellingen met P data selecteren Private Sub BestaatSO() On Error GoTo Foutafhandeling For Teller = 0 To conmax ' Als er een fout optreedt ' Voor alle opstellingen 42 ECN-I--03-007

blnso(teller) = True ' Database bestaat FileLen (strwizdir(souitint(teller))) ' Bepaal bestandsgrootte van database Teller = 0 Exit Sub ' Verlaat procedure Foutafhandeling: ' Dit gedeelte wordt uitgevoerd als er een fout optreedt If Err = 53 Then ' Indien fout : kan het bestand niet vinden blnso(teller) = False ' Dan : database bestaat niet Resume ' Ga verder met de volgende Else ' Anders : Dim intfoutnummer As Integer intfoutnummer = Err Err.Clear Err.Raise intfoutnummer ' Geef de juiste foutmelding Private Sub KoppelenSO() On Error GoTo Foutafhandeling ' Als er een fout optreedt Dim strso As String For Teller = 0 To conmax ' Voor alle opstellingen If blnso(teller) = True Then ' Als database bestaat strso = SOUitint(Teller) ' Dan : maak een koppeling DoCmd.TransferDatabase aclink, "Microsoft Access", strwizdir(strso),,contabel, strso& "IN" Exit Sub ' Verlaat procedure Foutafhandeling: ' Dit gedeelte wordt uitgevoerd als er een fout optreedt If Err = 3011 Then ' Indien fout : tabel bestaat niet blnso(teller) = False ' Dan : beweer dat database niet bestaat Resume ' Ga verder met de volgende Else ' Anders : Dim intfoutnummer As Integer intfoutnummer = Err Err.Clear Err.Raise intfoutnummer ' Geef de juiste foutmelding Public Function VerbreekVerbinding() For Teller = CurrentDb.TableDefs.Count - 1 To 0 Step -1 ' Alle tabellen controleren If CurrentDb.TableDefs(Teller).Attributes And dbattachedtable Then ' Als tabel is gekoppeld CurrentDb.TableDefs.Delete CurrentDb.TableDefs(Teller).Name ' Tabel verwijderen Teller = 0 ECN-I--03-007 43

Private Sub OpstellingSelectie() Dim strso As String For Teller = 0 To conmax ' Voor alle opstellingen If blnso(teller) = True Then ' Als : database bestaat strso = SOUitint(Teller) & "IN" ' Dan : If DMax("[ExpNr]", strso, "[Code] = ""P"" ") Then blnet(teller) = True ' Dan : IV bestaat Teller = 0 ' Als : er een P code is 6.3.2 DeclaratieModule Deze module heeft de volgende stukjes programmacode : 11. De declaraties verzorgen de variabelen en constanten die nodig zijn binnen deze database. De hier gedeclareerde waarden zijn beschikbaar binnen de hele database. 12. De functie Initialisatie roept de initialisatie routines aan. Dit is nodig omdat de diverse initialisatie routines niet van buiten deze module kunnen worden aangeroepen. 13. De procedure InitialisatieBLN geeft de publieke variabelen blnso en blnet een startwaarde. 14. De procedure InitialisatieSchijf zet alle computerspecifieke verwijzingen goed. De keuze wordt bepaald door de waarde van consysteem. De mogelijkheden zijn Test (voor testen), 020 (voor Wiz020) en 030 (voor Wiz030). 15. De procedure RijCelVullen is bedoeld voor uitbreidingen. Option Compare Database Option Explicit ' Deze module verzorgt alle noodzakelijke declaraties die door de gehele database worden gebruikt Public Const conmax As Integer = 30 Public Const contabel As String = "Data" Public blnso(0 To conmax) As Boolean Public blnet(0 To conmax) As Boolean Public Teller As Integer Public strxpschijf As String Public strcschijf As String Public strgschijf As String Public strwizschijf As String Public strwiz0x0 As String Public strwiziv As String ' Aantal opstellingen ' Naam tabel in Wizcon output ' Rij met bestaande Wizcon databases ' Rij met bestaande BackUp databases ' Waarde gebruikt in For.. lussen ' Verwijzing naar XP directorie ' Verwijzing naar BackUp directorie ' Verwijzing naar Database directorie ' Verwijzing naar Wizcon directorie ' Verwijzing naar Wiz0x0 database ' Verwijzing naar WizIV database Dim RijCel(1 To 26) As String Const consysteem As String = "030" ' Bepaalt de waarde van verwijzingen naar schijven Public Function Initialisatie() 44 ECN-I--03-007

InitialisatieBLN InitialisatieSchijf RijCelVullen ' Alle bln's initialiseren ' Schijfverwijzingen goedzetten ' Celnummers goedzetten Private Sub InitialisatieBLN() For Teller = 0 To conmax blnso(teller) = False blnet(teller) = False Teller = 0 ' Voor alle opstellingen ' Initialiseer blnso ' Initialiseer blnet Private Sub InitialisatieSchijf() Select Case consysteem ' Waarde van consysteem Case "test" ' Als "test" dan : ' worden de schijf strings goedgezet voor het test systeem strxpschijf = "C:\Data\XP\" strcschijf = "C:\Data\C\" strwizschijf = "C:\Data\WIZ\" strgschijf = "C:\Data\G\" ' en de database strings voor het test systeem strwiz0x0 = "C:\Data\wiz\Wiz030.mdb" strwiziv = "C:\Data\wiz\WizIV.mdb" Case "020" ' Als "020" dan : ' worden de schijf strings goedgezet voor Wiz020 strxpschijf = "\\ECNTS1\G_sofcxp\Wizcon\" strcschijf = "D:\Data\BackUp\" strwizschijf = "D:\Wizprj\Wiz020\Database\" ' en de database strings voor Wiz020 strwiz0x0 = "D:\Wizprj\Wiz020\Database\Wiz020.mdb" strwiziv = "D:\Wizprj\Wiz020\Addons\WizIV.mdb" Case "030" ' Als "030" dan : ' worden de schijf strings goedgezet voor Wiz030 strxpschijf = "\\ECNTS1\G_sofcxp\Wizcon\" strcschijf = "G:\BackUp\" strgschijf = "G:\Databases\" strwizschijf = "C:\Wizprj\Wiz030\Database\" ' en de database strings voor Wiz030 strwiz0x0 = "C:\Wizprj\Wiz030\Database\Wiz030.mdb" strwiziv = "C:\Wizprj\Wiz030\Addons\WizIV.mdb" End Select Private Sub RijCelVullen() RijCel(1) = "A" RijCel(2) = "B" RijCel(3) = "C" RijCel(4) = "D" ECN-I--03-007 45

RijCel(5) = "E" RijCel(6) = "F" RijCel(7) = "G" RijCel(8) = "H" RijCel(9) = "I" RijCel(10) = "J" RijCel(11) = "K" RijCel(12) = "L" RijCel(13) = "M" RijCel(14) = "N" RijCel(15) = "O" RijCel(16) = "P" RijCel(17) = "Q" RijCel(18) = "R" RijCel(19) = "S" RijCel(20) = "T" RijCel(21) = "U" RijCel(22) = "V" RijCel(23) = "W" RijCel(24) = "X" RijCel(25) = "Y" RijCel(26) = "Z" 6.3.3 OmzettingModule Deze module heeft de volgende stukjes programmacode : 17. De functie strwizdir geeft het volledige datapad van een brondatabase terug. 18. De functie strxpdir geeft het volledige pad van een doeldatabase op de XP schijf terug. 19. De functie strcdir geeft het volledige pad van een back-updatabase terug. 20. De functie strgdir geeft het volledige pad van een functie- of een werk-database terug. 21. De functie struitint geeft de stringwaarde van een integer terug. 22. De functie ETUitint geeft ET + stringwaarde integer terug 23. De functie SOUitint geeft SO + stringwaarde integer terug 24. De functie Uitvoer past de uitvoer van een schijfverwijzing naar wens aan. Option Compare Database Option Explicit ' Deze module verzorgt alle noodzakelijke omzettingen die door de hele database terugkomen Public Function strwizdir(naam As String) As String strwizdir = strwizschijf & Naam & ".mdb" ' Geeft een string met het juiste pad en de gekozen naam Public Function strxpdir(naam As String) As String strxpdir = strxpschijf & Naam & ".mdb" ' Geeft een string met het juiste pad en de gekozen naam Public Function strcdir(naam As String) As String 46 ECN-I--03-007

strcdir = strcschijf & Naam & ".mdb" ' Geeft een string met het juiste pad en de gekozen naam Public Function strgdir(naam As String) As String strgdir = strgschijf & Naam & ".mdb" ' Geeft een string met het juiste pad en de gekozen naam Public Function struitint(nummer As Integer) As String struitint = CStr(Nummer) If Nummer < 10 Then struitint = "0" & struitint ' Zet integer om in string ' Als : geen voorloopnul ' Dan : voorloopnul toevoegen Public Function ETUitint(Nummer As Integer) As String ETUitint = "ET" & struitint(nummer) ' ET + nummer Public Function SOUitint(Nummer As Integer) As String SOUitint = "SO" & struitint(nummer) ' SO + nummer Public Function Uitvoer(Invoer As String, Tussen As String) As String Uitvoer = Left(Invoer, (Len(Invoer) - 4)) & Tussen & ".mdb" ' Invoer aanpassen met Tussen ECN-I--03-007 47

48 ECN-I--03-007

7. LOOPCEL Deze database maakt de tabellen voor de database LopendeCel, comprimeert deze als LopendeCel030C en kopieert de laatste database samen met de database Celgegevens naar de XP schijf. Deze database bevat : 0 tabellen 0 queries 0 formulieren 0 rapporten 2 macro s 5 modules. 7.1 Macro s De twee macro s in de database LoopCel zijn : Afsluiten LopendeCelMaken Macro s hebben acties en beschrijvingen. De acties geven aan wat de macro moet doen en de beschrijvingen geven een mogelijkheid om in de macro uitleg te geven over die actie. 7.1.1 Afsluiten De structuur van de macro afsluiten is weergegeven in Tabel 1. Tabel 7 De structuur van macro 'Afsluiten' Actie Beschrijving BerichtenInstellen Geen berichten Deze actie zorgt ervoor dat vensters die normaal gesproken om actie vragen van de gebruiker worden genegeerd. De macro wordt niet meer onderbroken. ProcedureUitvoeren AlgemeneLoopModule, functie VerwijderSO(), alle tabellen verwijderen Deze actie start een procedure die alle tabellen uit de database verwijdert Afsluiten Database afsluiten Deze actie sluit de database af 7.1.2 LopendeCelMaken De structuur van de macro LopendeCelMaken is weergegeven in Tabel 2. Tabel 8 De structuur van macro 'LopendeCelMaken' Actie Beschrijving BerichtenInstellen Geen berichten Deze actie zorgt ervoor dat vensters die normaal gesproken om actie vragen van de gebruiker worden genegeerd. De macro wordt niet meer onderbroken. ProcedureUitvoeren DeclaratieModule, functie Initialisatie(), geeft startwaarde aan alle variabelen Deze actie start een procedure die de gebruikte variabelen de juiste waarde geeft ECN-I--03-007 49

ProcedureUitvoeren AlgemeneLoopModule, functie StartLoopCel(), haalt data binnen Deze functie importeert alle tabellen die noodzakelijk zijn om de database LopendeCel van data te voorzien ProcedureUitvoeren QueryLoopModule, functie VerwerkSO(), verwerkt alle tabellen Deze functie filtert alle data en zet deze om naar het gewenste formaat. ProcedureUitvoeren KopieerModule, functie Overzetten(), maakt LopendeCel030C en zet alles over naar de XP schijf. Deze functie exporteert de tabellen naar LopendeCel, maakt LopendeCel030C en zorgt ervoor dat de juiste databases voor gebruikers beschikbaar zijn via de XP schijf. MacroStarten Database afsluiten Deze actie sluit de database af 7.2 Modules De vijf modules zijn : AlgemeneLoopModule DeclaratieModule KopieerModule OmzettingModule QueryLoopModule Modules zijn verzamelingen van stukjes programma die elk een eigen functionaliteit hebben. Deze programmacode is weergegeven als tekst. 7.2.1 AlgemeneLoopModule Deze module heeft de volgende stukjes programmacode : 18. De functie StartLoopCel roept diverse andere programmadelen aan in een gedefinieerde volgorde. 19. De procedure BestaatET controleert of de back-updatabases bestaan. 20. De functie VerwijderSO verwijdert alle tabellen uit de database 21. De procedure HaalETBinnen importeert tabellen vanuit de back-updatabases Option Compare Database Option Explicit ' Deze module verzorgt alle noodzakelijke instellingen bij opstart ' en past databases aan bij veranderingen Public Function StartLoopCel() VerwijderSO BestaatET HaalETBinnen ' Verwijder alle SO tabellen ' blnet : welke database bestaat ' Haal de tabellen binnen Private Sub BestaatET() On Error GoTo Foutafhandeling For Teller = 0 To conmax blnet(teller) = True FileLen (strcdir(etuitint(teller))) ' Als er een fout optreedt ' Voor alle opstellingen ' Database bestaat ' Bepaal bestandsgrootte van database 50 ECN-I--03-007

Teller = 0 Exit Sub ' Verlaat procedure Foutafhandeling: ' Dit gedeelte wordt uitgevoerd als er een fout optreedt If Err = 53 Then ' Indien fout : kan het bestand niet vinden blnet(teller) = False ' Dan : database bestaat niet Resume ' Ga verder met de volgende Else ' Anders : Dim intfoutnummer As Integer intfoutnummer = Err Err.Clear Err.Raise intfoutnummer ' Geef de juiste foutmelding Public Function VerwijderSO() On Error GoTo Foutafhandeling ' Als er een fout optreedt Dim strso As String For Teller = 0 To conmax strso = SOUitint(Teller) CurrentDb.TableDefs.Delete strso Teller = 0 ' Alle SO tabellen afwerken ' Tabel verwijderen CurrentDb.TableDefs.Delete "GegevensCellen" ' Tabel gegevenscellen verwijderen Exit Function ' Verlaat functie Foutafhandeling: ' Dit gedeelte wordt uitgevoerd als er een fout optreedt If Err = 3265 Then ' Indien fout : kan het object niet vinden Resume ' Dan : ga verder met de volgende Else ' Anders : Dim intfoutnummer As Integer intfoutnummer = Err Err.Clear Err.Raise intfoutnummer ' Geef de juiste foutmelding Private Sub HaalETBinnen() Dim strso As String Dim stret As String For Teller = 0 To conmax ' Voor alle opstellingen strso = SOUitint(Teller) stret = ETUitint(Teller) If blnet(teller) Then ' Als opstelling bestaat DoCmd.TransferDatabase acimport, "Microsoft Access", strcdir(stret),, strso, strso ' Importeer tabel SOxx ECN-I--03-007 51

strso = "GegevensCellen" stret = "Celgegevens" DoCmd.TransferDatabase acimport, "Microsoft Access", strcdir(stret),, strso, strso ' Importeer 'GegevensCellen' 7.2.2 DeclaratieModule Deze module heeft de volgende stukjes programmacode : 16. De declaraties verzorgen de variabelen en constanten die nodig zijn binnen deze database. De hier gedeclareerde waarden zijn beschikbaar binnen de hele database. 17. De functie Initialisatie roept de initialisatie routines aan. Dit is nodig omdat de diverse initialisatie routines niet van buiten deze module kunnen worden aangeroepen. 18. De procedure InitialisatieBLN geeft de publieke variabelen blnso en blnet een startwaarde. 19. De procedure InitialisatieSchijf zet alle computerspecifieke verwijzingen goed. De keuze wordt bepaald door de waarde van consysteem. De mogelijkheden zijn Test (voor testen), 020 (voor Wiz020) en 030 (voor Wiz030). 20. De procedure RijCelVullen is bedoeld voor uitbreidingen. Option Compare Database Option Explicit ' Deze module verzorgt alle noodzakelijke declaraties die door de gehele database worden gebruikt Public Const conmax As Integer = 30 Public Const contabel As String = "Data" Public blnso(0 To conmax) As Boolean Public blnet(0 To conmax) As Boolean Public Teller As Integer Public strxpschijf As String Public strcschijf As String Public strgschijf As String Public strwizschijf As String Public strwiz0x0 As String Public strwiziv As String ' Aantal opstellingen ' Naam tabel in Wizcon output ' Rij met bestaande Wizcon databases ' Rij met bestaande BackUp databases ' Waarde gebruikt in For.. lussen ' Verwijzing naar XP directorie ' Verwijzing naar BackUp directorie ' Verwijzing naar Database directorie ' Verwijzing naar Wizcon directorie ' Verwijzing naar Wiz0x0 database ' Verwijzing naar WizIV database Dim RijCel(1 To 26) As String Const consysteem As String = "030" ' Bepaalt de waarde van verwijzingen naar schijven Public Function Initialisatie() InitialisatieBLN InitialisatieSchijf RijCelVullen ' Alle bln's initialiseren ' Schijfverwijzingen goedzetten ' Celnummers goedzetten Private Sub InitialisatieBLN() 52 ECN-I--03-007

For Teller = 0 To conmax blnso(teller) = False blnet(teller) = False Teller = 0 ' Voor alle opstellingen ' Initialiseer blnso ' Initialiseer blnet Private Sub InitialisatieSchijf() Select Case consysteem ' Waarde van consysteem Case "test" ' Als "test" dan : ' worden de schijf strings goedgezet voor het test systeem strxpschijf = "C:\Data\XP\" strcschijf = "C:\Data\C\" strwizschijf = "C:\Data\WIZ\" strgschijf = "C:\Data\G\" ' en de database strings voor het test systeem strwiz0x0 = "C:\Data\wiz\Wiz030.mdb" strwiziv = "C:\Data\wiz\WizIV.mdb" Case "020" ' Als "020" dan : ' worden de schijf strings goedgezet voor Wiz020 strxpschijf = "\\ECNTS1\G_sofcxp\Wizcon\" strcschijf = "D:\Data\BackUp\" strwizschijf = "D:\Wizprj\Wiz020\Database\" ' en de database strings voor Wiz020 strwiz0x0 = "D:\Wizprj\Wiz020\Database\Wiz020.mdb" strwiziv = "D:\Wizprj\Wiz020\Addons\WizIV.mdb" Case "030" ' Als "030" dan : ' worden de schijf strings goedgezet voor Wiz030 strxpschijf = "\\ECNTS1\G_sofcxp\Wizcon\" strcschijf = "G:\BackUp\" strgschijf = "G:\Databases\" strwizschijf = "C:\Wizprj\Wiz030\Database\" ' en de database strings voor Wiz030 strwiz0x0 = "C:\Wizprj\Wiz030\Database\Wiz030.mdb" strwiziv = "C:\Wizprj\Wiz030\Addons\WizIV.mdb" End Select Private Sub RijCelVullen() RijCel(1) = "A" RijCel(2) = "B" RijCel(3) = "C" RijCel(4) = "D" RijCel(5) = "E" RijCel(6) = "F" RijCel(7) = "G" RijCel(8) = "H" RijCel(9) = "I" RijCel(10) = "J" RijCel(11) = "K" RijCel(12) = "L" ECN-I--03-007 53

RijCel(13) = "M" RijCel(14) = "N" RijCel(15) = "O" RijCel(16) = "P" RijCel(17) = "Q" RijCel(18) = "R" RijCel(19) = "S" RijCel(20) = "T" RijCel(21) = "U" RijCel(22) = "V" RijCel(23) = "W" RijCel(24) = "X" RijCel(25) = "Y" RijCel(26) = "Z" 7.2.3 KopieerModule Deze module heeft de volgende stukjes programmacode : 5. De functie Transport kopieert alle bestaande back-updatabases naar de XP schijf. 6. De procedure Transport2 kopieert functiedatabases naar de XP schijf. 7. De procedure ExportSO exporteert de SO tabellen naar de werkdatabase LopendeCel. Van daaruit wordt de data in gecomprimeerde vorm overgebracht naar functiedatabase LopendeCel030C. 8. De functie Overzetten voert de procedures ExportSO en Transport2 uit. Option Compare Database Option Explicit ' Deze module zorgt voor het kopieren van de files naar de XP schijf Public Function Transport() On Error GoTo Foutafhandeling ' Als er een fout optreedt For Teller = 1 To conmax ' Voor elke backup FileCopy strcdir(etuitint(teller)), strxpdir(etuitint(teller)) Teller = 0 ' Kopieer deze van C naar XP Exit Function ' Verlaat functie Foutafhandeling: ' Dit gedeelte wordt uitgevoerd als er een fout optreedt If Err = 53 Then ' Indien fout : kan het bestand niet vinden Resume ' Dan : ga verder met de volgende Else ' Anders : Dim intfoutnummer As Integer intfoutnummer = Err Err.Clear Err.Raise intfoutnummer ' Geef de juiste foutmelding Private Sub Transport2() On Error GoTo Foutafhandeling ' Als er een fout optreedt 54 ECN-I--03-007

Dim str As String str = "Celgegevens" FileCopy strgdir(str), strxpdir(str) str = "LopendeCel030C" FileCopy strgdir(str), strxpdir(str) ' Kopieer van G naar XP ' Kopieer van G naar XP Exit Sub ' Verlaat functie Foutafhandeling: ' Dit gedeelte wordt uitgevoerd als er een fout optreedt If Err = 53 Then ' Indien fout : kan het bestand niet vinden Resume ' Dan : ga verder met de volgende Else ' Anders : Dim intfoutnummer As Integer intfoutnummer = Err Err.Clear Err.Raise intfoutnummer ' Geef de juiste foutmelding Private Sub ExportSO() Dim strso As String Dim stret As String Dim strbron As String Dim strdoel As String stret = "LopendeCel" For Teller = 0 To conmax ' Voor alle SO tabellen strso = SOUitint(Teller) If blnet(teller) Then ' Die bestaan DoCmd.TransferDatabase acexport, "Microsoft Access", strgdir(stret),, strso, strso ' Exporteer naar LopendeCel strso = "GegevensCellen" ' Idem voor GegevensCellen DoCmd.TransferDatabase acexport, "Microsoft Access", strgdir(stret),, strso, strso strso = stret & "030C" strbron = strgdir(stret) strdoel = strgdir(strso) If Dir(strDoel) <> "" Then ' Als : de nieuwe database bestaat Kill strdoel ' Dan : deze verwijderen DBEngine.CompactDatabase strbron, strdoel ' Comprimeer doeldatabase van strbron naar strdoel Public Function Overzetten() ExportSO Transport2 ' Alle tabellen overzetten ' De databases overzetten ECN-I--03-007 55

7.2.4 OmzettingModule Deze module heeft de volgende stukjes programmacode : 25. De functie strwizdir geeft het volledige datapad van een brondatabase terug. 26. De functie strxpdir geeft het volledige pad van een doeldatabase op de XP schijf terug. 27. De functie strcdir geeft het volledige pad van een back-updatabase terug. 28. De functie strgdir geeft het volledige pad van een functie- of een werk-database terug. 29. De functie struitint geeft de stringwaarde van een integer terug. 30. De functie ETUitint geeft ET + stringwaarde integer terug 31. De functie SOUitint geeft SO + stringwaarde integer terug 32. De functie Uitvoer past de uitvoer van een schijfverwijzing naar wens aan. Option Compare Database Option Explicit ' Deze module verzorgt alle noodzakelijke omzettingen die door de hele database terugkomen Public Function strwizdir(naam As String) As String strwizdir = strwizschijf & Naam & ".mdb" ' Geeft een string met het juiste pad en de gekozen naam Public Function strxpdir(naam As String) As String strxpdir = strxpschijf & Naam & ".mdb" ' Geeft een string met het juiste pad en de gekozen naam Public Function strcdir(naam As String) As String strcdir = strcschijf & Naam & ".mdb" ' Geeft een string met het juiste pad en de gekozen naam Public Function strgdir(naam As String) As String strgdir = strgschijf & Naam & ".mdb" ' Geeft een string met het juiste pad en de gekozen naam Public Function struitint(nummer As Integer) As String struitint = CStr(Nummer) If Nummer < 10 Then struitint = "0" & struitint ' Zet integer om in string ' Als : geen voorloopnul ' Dan : voorloopnul toevoegen Public Function ETUitint(Nummer As Integer) As String ETUitint = "ET" & struitint(nummer) ' ET + nummer 56 ECN-I--03-007

Public Function SOUitint(Nummer As Integer) As String SOUitint = "SO" & struitint(nummer) ' SO + nummer Public Function Uitvoer(Invoer As String, Tussen As String) As String Uitvoer = Left(Invoer, (Len(Invoer) - 4)) & Tussen & ".mdb" ' Invoer aanpassen met Tussen 7.2.5 QueryLoopModule Deze module heeft de volgende stukjes programmacode : 22. De procedure VerwijderP verwijdert alle P data uit een tabel. 23. De procedure VerwijderF verwijdert alle F data uit een tabel. 24. De procedure VerwijderQ verwijdert alle Q data uit een tabel. 25. De procedure MaxCelNummer verwijdert alle data uit een tabel, uitgezonderd de data van de laatste test. 26. De procedure MaakVeld voegt een leeg veld in de tabel in. Deze procedure wordt gebruikt door andere procedures die daarna het veld ook vullen met data. 27. De procedure MaakOpstelling maakt een veld en vult dit met het opstellingsnummer. 28. De procedure MaakVCel maakt een veld en vult dit met V(mV) data. 29. De procedure MaakTCel maakt een veld en vult dit met T( C) data. 30. De procedure MaakJCel maakt een veld en vult dit met J(mA/cm²) data. 31. De procedure MaakPCel maakt een veld en vult dit met P(mW/cm²) data. 32. De procedure MaakuFCel maakt een veld en vult dit met uf(%) data. 33. De procedure MaakTijdAs maakt een veld en vult dit met t(hrs) data. 34. De procedure Middelen zorgt ervoor dat het aantal datapunten niet te groot wordt. De grafiek kan maar een beperkt aantal datapunten aan (ongeveer 4000 punten). 35. De functie VanKommaNaarPunt zet komma s in een string om in punten. Dit is noodzakelijk omdat in SQL de Amerikaanse indeling voor getallen gebruikt. 36. De functie VerwerkSO roept de diverse programma delen in een gedefinieerde volgorde aan. 37. De procedure VerwijderVeld verwijdert alle overbodige velden uit een tabel. Option Compare Database Option Explicit ' Deze module verzorgt alle bewerkingen op de SOxx tabellen die noodzakelijk zijn Dim strsql As String Dim strso As String Dim strveld As String Dim strupdate As String Dim strset As String Dim strint As String Private Sub VerwijderP(intNummer As Integer) DoCmd.SetWarnings False strso = SOUitint(intNummer) ' Waarschuwingen uit ' Voor Tabel(Nummer) ECN-I--03-007 57

strsql = "DELETE " & strso & ".* " & _ "From " & strso & " " & _ "WHERE (((" & strso & ".Code)=""p""));" DoCmd.RunSQL strsql ' Verwijder alles met code P Private Sub VerwijderF(intNummer As Integer) DoCmd.SetWarnings False ' Waarschuwingen uit strso = SOUitint(intNummer) ' Voor Tabel(Nummer) strsql = "DELETE " & strso & ".* " & _ "From " & strso & " " & _ "WHERE (((" & strso & ".Code)=""f""));" DoCmd.RunSQL strsql ' Verwijder alles met code F Private Sub VerwijderQ(intNummer As Integer) DoCmd.SetWarnings False ' Waarschuwingen uit strso = SOUitint(intNummer) ' Voor Tabel(Nummer) strsql = "DELETE " & strso & ".* " & _ "From " & strso & " " & _ "WHERE (((" & strso & ".Code)=""q""));" DoCmd.RunSQL strsql ' Verwijder alles met code Q Private Sub MaxCelNummer(intNummer As Integer) On Error GoTo Foutafhandeling ' Als er een fout optreedt Dim intmax As Integer DoCmd.SetWarnings False ' Waarschuwingen uit strso = SOUitint(intNummer) intmax = DMax("[ExpNr]", strso) strsql = "DELETE " & strso & ".* " & _ "From " & strso & " " & _ ' Voor Tabel(Nummer) ' Bepaal het laatste celnummer "WHERE (((" & strso & ".ExpNr)<" & intmax & "));" DoCmd.RunSQL strsql ' Verwijder alle andere experimenten strsql = "DELETE GegevensCellen.* " & _ "FROM GegevensCellen " & _ "WHERE (((GegevensCellen.Opstellingnummer)=" & intnummer & ") " & _ "AND ((GegevensCellen.Celnummer)<>" & intmax & "));" DoCmd.RunSQL strsql ' Verwijder alle andere celgegevens Exit Sub ' Verlaat procedure Foutafhandeling: ' Dit gedeelte wordt uitgevoerd als er een fout optreedt If Err = 94 Then ' Indien fout : ongeldig gebruik van Null Resume ' Ga verder met de volgende Else ' Anders : Dim intfoutnummer As Integer 58 ECN-I--03-007

intfoutnummer = Err Err.Clear Err.Raise intfoutnummer ' Geef de juiste foutmelding Private Sub MaakVeld(strTabel As String, strnaam As String) Dim dbs As Object Dim tdftabel As Object Dim fldveld As Object Set dbs = CurrentDb ' Huidige database Set tdftabel = dbs.tabledefs(strtabel) ' Open tabel Set fldveld = tdftabel.createfield(strnaam, dbdouble) ' Maak nieuw veld tdftabel.fields.append fldveld ' En voeg het toe Set fldveld = Nothing Set tdftabel = Nothing Set dbs = Nothing Private Sub MaakOpstelling(intNummer As Integer) strveld = "OpstelNr" ' Veldnaam strso = SOUitint(intNummer) ' Voor Tabel(Nummer) strupdate = "UPDATE " & strso & " " strset = "SET " & strso & ".[" & strveld & "] = " & intnummer & ";" strsql = strupdate & strset MaakVeld strso, strveld DoCmd.RunSQL strsql ' Maak veld ' Veld vullen met waarden Private Sub MaakVCel(intNummer As Integer) strveld = "V (mv)" ' Veldnaam strso = SOUitint(intNummer) ' Voor Tabel(Nummer) strupdate = "UPDATE " & strso & " " strset = "SET " & strso & ".[" & strveld & "] = " strint = "Int([" & strso & "_V_CEL_A_1]);" strsql = strupdate & strset & strint MaakVeld strso, strveld DoCmd.RunSQL strsql ' Maak veld ' Veld vullen met waarden Private Sub MaakTCel(intNummer As Integer) strveld = "T ( C)" ' Veldnaam strso = SOUitint(intNummer) ' Voor Tabel(Nummer) strupdate = "UPDATE " & strso & " " strset = "SET " & strso & ".[" & strveld & "] = " strint = "Int([" & strso & "_T_CEL_A_1]);" ECN-I--03-007 59

strsql = strupdate & strset & strint MaakVeld strso, strveld DoCmd.RunSQL strsql ' Maak veld ' Veld vullen met waarden Private Sub MaakJCel(intNummer As Integer) Dim strinner As String Dim stron As String strveld = "J (ma/cm²)" ' Veldnaam strso = SOUitint(intNummer) ' Voor Tabel(Nummer) strupdate = "UPDATE " & strso & " " strinner = "INNER JOIN GegevensCellen " stron = "ON " & strso & ".OpstelNr = GegevensCellen.Opstellingnummer " strset = "SET " & strso & ".[" & strveld & "] = " strint = "Int(1000*[" & strso & "]![" & strso & "_I_CEL_A_1]/[GegevensCellen]![Oppervlak]);" strsql = strupdate & strinner & stron & strset & strint MaakVeld strso, strveld DoCmd.RunSQL strsql ' Maak veld ' Veld vullen met waarden Private Sub MaakPCel(intNummer As Integer) Dim strinner As String Dim stron As String strveld = "P (mw/cm²)" ' Veldnaam strso = SOUitint(intNummer) ' Voor Tabel(Nummer) strupdate = "UPDATE " & strso & " " strinner = "INNER JOIN GegevensCellen " stron = "ON " & strso & ".OpstelNr = GegevensCellen.Opstellingnummer " strset = "SET " & strso & ".[" & strveld & "] = " strint = "Int([" & strso & "]![" & strso & "_V_CEL_A_1]*" & _ "[" & strso & "]![" & strso & "_I_CEL_A_1]/" & _ "[GegevensCellen]![Oppervlak]);" strsql = strupdate & strinner & stron & strset & strint MaakVeld strso, strveld DoCmd.RunSQL strsql ' Maak veld ' Veld vullen met waarden Private Sub MaakuFCel(intNummer As Integer) Dim strsom As String strveld = "uf (%)" ' Veldnaam strso = SOUitint(intNummer) ' Voor Tabel(Nummer) strsom = "([" & strso & "_AN_H2_1]+[" & strso & "_AN_H2_2]+[" & strso & "_AN_CO_1]+"& _ "(3/2)*[" & strso & "_AN_NH3_1]+" & _ "4*[" & strso & "_AN_CH4_1]+4*[" & strso & "_AN_H2S_1])" strupdate = "UPDATE " & strso & " " strset = "SET " & strso & ".[" & strveld & "] = " strint = "Int(697*[" & strso & "_I_CEL_A_1]/" & strsom & ");" 60 ECN-I--03-007

strsql = strupdate & strset & strint MaakVeld strso, strveld DoCmd.RunSQL strsql ' Maak veld ' Veld vullen met waarden Private Sub MaakTijdAs(intNummer As Integer) On Error GoTo Foutafhandeling ' Als er een fout optreedt Dim strwhere As String Dim strtijdmin As String Dim dbltijdmin As Double strveld = "t (hrs)" strso = SOUitint(intNummer) ' Veldnaam ' Voor Tabel(Nummer) strwhere = "[" & strso & "_T_CEL_A_1]>200" dbltijdmin = DMin("[DT]", strso, strwhere) strtijdmin = VanKommaNaarPunt(dblTijdMin) strsql = "DELETE " & strso & ".* " & _ "From " & strso & " " & _ ' Select DT voor t = 0 uur ' Omzetten naar string "WHERE (((" & strso & ".DT)<" & strtijdmin & "));" DoCmd.RunSQL strsql ' DT lager dan t = 0 verwijderen strupdate = "UPDATE " & strso & " " strset = "SET " & strso & ".[" & strveld & "] = " strint = "Int(([DT]-" & strtijdmin & ")*240)/10;" strsql = strupdate & strset & strint MaakVeld strso, strveld DoCmd.RunSQL strsql ' Maak veld ' Veld vullen met waarden Exit Sub ' Verlaat procedure Foutafhandeling: ' Dit gedeelte wordt uitgevoerd als er een fout optreedt If Err = 94 Then ' Indien fout : ongeldig gebruik van Null dbltijdmin = Now ' Select DT voor t = 0 uur Resume ' Ga verder met de volgende Else ' Anders : Dim intfoutnummer As Integer intfoutnummer = Err Err.Clear Err.Raise intfoutnummer ' Geef de juiste foutmelding Private Sub Middelen(intNummer As Integer) Dim dbs As Object Dim tdftabel As Object Dim rsttabel As Object Dim varrij() As Variant Dim strfind As String Dim strcount As String Dim intcount As Integer ECN-I--03-007 61

Dim x As Integer, y As Integer Dim dblcount As Variant Dim dbltijd As Double strveld = "t_mid" strso = SOUitint(intNummer) ' Veldnaam ' Voor Tabel(Nummer) Set dbs = CurrentDb Set tdftabel = dbs.tabledefs(strso) intcount = tdftabel.recordcount ' Aantal records tellen Set tdftabel = Nothing Set dbs = Nothing Select Case intcount ' Afhankelijk van aantal records : Case 0 To 4000 ' Elk half uur een punt strint = "Int(([DT])*100000)/100000;" Case 4001 To 16000 ' Elke 2 uur een punt strint = "Int((Int(([DT])*12)/12)*10000)/10000;" Case Else ' Elke 6 uur een punt strint = "Int(([DT])*4)/4;" End Select strupdate = "UPDATE " & strso & " " strset = "SET " & strso & ".[" & strveld & "] = " strsql = strupdate & strset & strint MaakVeld strso, strveld DoCmd.RunSQL strsql ' Maak veld ' Veld vullen met waarden strsql = "SELECT * FROM " & strso & " ORDER BY DT;" Set rsttabel = CurrentDb.OpenRecordset(strSQL) intcount = rsttabel.fields.count ' Aantal velden tellen ReDim varrij(0 To intcount - 1) ' Rij definieren If rsttabel.recordcount = 0 Then Exit Sub ' Als : geen records, dan prodecure verlaten rsttabel.movelast rsttabel.movefirst ' Ga naar het eind ' Ga naar het begin Do y = 1 For x = 0 To intcount 1 varrij(x) = rsttabel.fields(x).value ' Rij vullen met beginwaarden dblcount = rsttabel.fields(strveld).value strcount = VanKommaNaarPunt(dblCount) ' Waarde ophalen uit "t_mid" ' Omzetten in string Do strfind = strveld & " = " & strcount rsttabel.find strfind ' Volgende record zoeken If rsttabel.nomatch Then Exit Do ' Als : geen record, dan : verlaat loop y = y + 1 ' Aantal records tellen For x = 0 To intcount - 1 ' Voor alle velden : Select Case rsttabel.fields(x).name Case "ExpNr", "RegNr", "DT", strveld ' Niets 62 ECN-I--03-007

Case "Code" ' Maak "Q" rsttabel.edit rsttabel.fields(x).value = "Q" rsttabel.update Case Else ' Sommeer varrij(x) = varrij(x) + rsttabel.fields(x).value End Select Loop For x = 0 To intcount - 1 ' Voor alle velden : Select Case rsttabel.fields(x).name Case "ExpNr", "RegNr", "Code", "DT", strveld ' Niets Case Else ' Bereken gemiddelde varrij(x) = varrij(x) / y End Select rsttabel.findfirst strfind ' Zoek eerste record For x = 0 To intcount - 1 ' Voor alle velden : rsttabel.edit rsttabel.fields(x).value = varrij(x) ' Vul de nieuwe waarden in rsttabel.update strfind = "Code = ""S""" rsttabel.find strfind If rsttabel.nomatch Then Exit Do ' Zoek de volgende groep records ' Als : geen records, dan : verlaat loop Loop Set rsttabel = Nothing Private Function VanKommaNaarPunt(Komma As Variant) As Variant Dim x As Integer Komma = CStr(Komma) VanKommaNaarPunt = Komma ' Maak string ' Geef waarde For x = 1 To Len(Komma) ' Voor elk karakter : If Right(Left(Komma, x), 1) = "," Then ' Als : is "," VanKommaNaarPunt = Left(Komma, x - 1) & "." & Right(Komma, Len(Komma) - x) ' Dan : zet om in "." Public Function VerwerkSO() Dim rsttabel As Object Dim intcount As Integer For Teller = 0 To conmax ' Voor elke tabel If blnet(teller) Then ' Als : tabel bestaat, dan : MaxCelNummer Teller ' Alleen de lopende cel ECN-I--03-007 63

VerwijderP Teller VerwijderF Teller Middelen Teller VerwijderQ Teller MaakOpstelling Teller ' Alleen S data ' Maximaal aantal datapunten ' Veld OpstelNr maken strso = SOUitint(Teller) ' Voor Tabel(Nummer) Set rsttabel = CurrentDb.OpenRecordset(strSO) intcount = rsttabel.recordcount ' Tel aantal records Set rsttabel = Nothing If intcount > 0 Then ' Als er records zijn : MaakTijdAs Teller ' Veld t (hrs) maken MaakVCel Teller ' Veld V (mv) maken MaakTCel Teller ' Veld T ( C) maken MaakJCel Teller ' Veld J (ma/cm²) maken MaakPCel Teller ' Veld P (mw/cm²) maken MaakuFCel Teller ' Veld uf (%) maken VerwijderVeld Teller Teller = 0 ' Overbodige velden verwijderen Private Sub VerwijderVeld(intNummer As Integer) Dim dbs As Object Dim tdftabel As Object Dim strtabel As String Dim strnaam As String Dim x As Integer strtabel = SOUitint(intNummer) Set dbs = CurrentDb Set tdftabel = dbs.tabledefs(strtabel) For x = tdftabel.indexes.count - 1 To 0 Step -1 tdftabel.indexes.delete tdftabel.indexes(x).name For x = tdftabel.fields.count - 1 To 0 Step -1 strnaam = tdftabel.fields(x).name Select Case strnaam Case "OpstelNr", "t (hrs)", "V (mv)", "T ( C)" Case "J (ma/cm²)", "P (mw/cm²)", "uf (%)" Case Else tdftabel.fields.delete tdftabel.fields(x).name End Select Set tdftabel = Nothing Set dbs = Nothing 64 ECN-I--03-007

8. LOPENDECEL De database is een werkdatabase. Deze heeft als functie het zichtbaar maken van het verloop van de testprocedure. De database wordt omgezet (gecomprimeerd) in een andere database (LopendeCel030C) en deze wordt dan beschikbaar gemaakt voor gebruik door derden. De functiedatabase LopendeCel030C heeft daarmee dezelfde objecten en functionaliteit als de werkdatabase LopendeCel. Deze database bevat : 12 tabellen 0 queries 1 formulier 0 rapporten 1 macro 3 modules. 8.1 Tabellen De tabellen in de database LopendeCel vallen uiteen in twee categorieën : GegevensCellen SOxx In de tabel GegevensCellen zijn de celgegevens opgeslagen van de cellen met het hoogste experiment nummer (de laatste cel). Figuur 6 Opbouw van de tabel GegevensCellen uit de database LopendeCel De velden Opstellingnummer en Celnummer verwijzen naar het juiste experiment zodat de bijbehorende data kunnen worden geselecteerd. Oppervlak geeft het oppervlak aan van de kathode en daarmee het actieve celoppervlak van de cel. Deze waarde, in vierkante centimeters, wordt gebruikt in de berekening van de stroomdichtheid. Celcodering geeft het type cel aan dat is gebruikt gedurende het experiment. Om verder nog relevante opmerkingen over het experiment op te slaan is het veld Opmerkingen toegevoegd. De velden Kathode en Anode slaan gegevens op over het aantal keren dat de respectievelijke gazen al in gebruik zijn. In de tabellen SOxx zijn de bewerkte data opgenomen van de betreffende opstelling. De data is zodanig bewerkt dat alleen die gegevens zijn opgenomen die nodig zijn voor het tekenen van een grafiek. Ook voor deze tabellen geldt dat ze alleen de data van de laatste cel bevatten. ECN-I--03-007 65

Figuur 7 Opbouw van de tabel SOxx uit de database LopendeCel 8.2 Formulieren Het formulier in de database LopendeCel is : LopendeCel Het formulier LopendeCel is bedoeld om gebruikers inzicht te geven in de prestaties van de cellen die nog getest worden. Figuur 8 Weergave van formulier 'LopendeCel' uit database 'LopendeCel' Het formulier bestaat uit meerdere onderdelen. Het kader ( Cel Keuze ) dient om een opstelling te selecteren. De grafiek wordt weergegeven door een object voor grafiekweergave. Verder is er een formuliermodule om diverse acties in goede banen te leiden. De bron voor het formulier en voor de grafiek is één van de SOxx tabellen. Welke tabel wordt bepaald door de keuze van de opstelling. De module, die is verbonden aan het formulier, is relatief eenvoudig. 66 ECN-I--03-007