Banktransacties

Inleiding

Medio 1997 heb ik besloten mijn bankrekeningen elektronisch te gaan beheren. Na enig zoeken ben ik in aanraking gekomen met het pakket DaviCash, dat ik als versie 7 in gebruik heb genomen. De basis functionaliteit van dit pakket bestaat uit het feit dat je aan elke financiële transactie een code kunt koppelen, b.v. "boodschappen" aan een pin-opname, waarna je op basis van deze codes overzichten kunt genereren. Vragen als "hoeveel heb ik aan boodschappen uitgegeven in deze periode?", "hoeveel heb ik gedurende deze periode besteed, en hoe verhoudt zich dat tot vorig jaar?", kunnen zo gemakkelijk beantwoord worden.

In het begin tikte ik de afschriften over, gewoon van papier, en bracht ze in DaviCash in. Later kreeg ik ABNAMRO Homebanking ter beschikking en kon ik de transacties in DaviCash inlezen vanuit Homebanking, dit maakte mijn archief completer daar nu de gehele omschrijving toegevoegd werd.

Het systeem werkte en ik had tevreden kunnen zijn, enkele zaken bevielen me echter niet. Ten eerste gebeurde het weleens dat DaviCash crashte, na opnieuw opstarten werd de database opnieuw opgebouwd, maar elke keer vond ik dit spannend: zou het opbouwen lukken of niet? Ten tweede had ik graag functionaliteit willen toevoegen, met name de functie in DaviCash die overzichten genereerde schoot tekort. En ten derde was ik afhankelijk was van één leverancier, hoelang zou die het product ondersteunen, en hoe? Ik wist het niet, maar wist dat de database jaren mee zou moeten. Een voorproefje kreeg ik toen DaviCash 8 uitkwam: deze versie zou het millennium probleem oplossen en tevens Euro- proofzijn. Inderdaad klopte dit, maar men had tegelijkertijd het gebruikersinterface veranderd, zo zwaar dat ik er nooit meer aan heb kunnen wennen. Ik vond het er erg op achteruit gegaan. Kortom, ik heb niet lang van versie 8 genoten: het was tijd voor iets anders !

Welke eisen stelde ik aan de nieuwe oplossing?

Deze combinatie van eisen leidde tot de conclusie dat ik de drie-eenheid: Apache/MySQL/PHP te hulp moest roepen. Met dit trio had ik een database ter beschikking (MySQL) en een mogelijkheid tot het maken van een gebruikersinterface (Apache/PHP) door middel van een normale webbrowser.

Tot slot moest ik nog een importeer functie maken, om de transacties vanuit Internetbankieren te importeren in MySQL. Ik was ondertussen al op Internetbankieren overgestapt. De transacties kunnen vanuit Internetbankieren al naar een ASCII bestand geëxporteerd worden, hier heeft ABNAMRO al voor gezorgd. De opgave bestaat dus uit het lezen van dit ASCII bestand en de gegevens in MySQL op te slaan.

Na wat zoeken, [1], bleek dat MySQL ook een C-API aanbiedt, dit betekent dat je vanuit een C-programma bij de MySQL database kunt. Ik ben verder goed bekend met Lex en Yacc, een duo programma's waarmee je filterskunt specificeren. Lex en Yacc genereren C-code. Ik concludeerde daarom dat ik een C-programma zou maken om de ASCII bestanden, opgeslagen vanuit de browser, te importeren in de MySQL database.

In dit document zal ik beschrijven hoe dit laatste gedaan is. Ik zal niet beschrijven hoe de PHP scripts werken, die eigenlijk het dagelijkse gebruik van de applicatie bepalen. Het import mechanisme is echter een essentieel onderdeel van de applicatie, en bevat verder een paar zeer interessante technische aspecten, daarom zal ik dit beschrijven. Voor de nieuwsgierigen naar de functies van de PHP scripts:

Wat heb je nodig om het programma te kunnen maken? Vermoedelijk zul je net als ik tot de conclusie komen dat op een Linux platform alle spullen voorhanden zijn ! Schaf je dus een Linux distributie aan, download er een of stel er een samen, kijk of een C-compiler en de andere gereedschappen geïnstalleerd zijn, en verheug je.

Referenties

[1] MySQL, Paul DuBois

Lijst van afkortingen

C-API C-Application Programmer Interface
GNU GNU is Not UNIX
HTML HyperText Markup Language
PC Personal Computer
PHP Hypertext Preprocessor
RDBMS Relational DataBase Management System
SQL Structured Query Language
SuSE Software und System Entwicklung, een Linux distributie
TCP/IP Transmission Control Protocol/Internet Protocol
$Id: inhoud.html,v 1.22 2016/07/29 18:37:16 luc Exp $Valid XHTML 1.0! Valid CSS 1.0!