Inleiding
Voor de regelmatig noodzakelijke inspecties en aanpassingen in (dbf) databases gebruikte ik lange tijd een programma van Erik Visser, dbViewer, door mij al snel hernoemd naar dbv. Hij bouwde dbViewer op basis van de SDK source van de bij Cavo meegeleverde utility voor het bekijken van databases, die vanuit de dbserver editor kan worden opgestart. Dankzij Erik’s toevoegingen was en is het een programma met heel wat mogelijkheden. Vooral de inbouw van het Wildseek algoritme van Lutz Eckert was een enorme stap voorwaarts. Met het intypen van Ctrl A en een zoekstring, aanhalingstekens bij strings zijn niet nodig want er wordt binair gezocht in de file zelf, is een kleine database in een fractie van een seconde gefilterd op basis van die zoekstring. Zelfs in grote databases duurt die filtering zelden langer dan enkele seconden. Ik gebruik dit zelfs vaker dan een seek actie: de filtering geeft het gewenste overzicht en zoeken, inclusief de invoer, is meestal sneller dan een index seek actie. Erik’s toevoeging om direct van af de command prompt een database te openen (dbv mijnfile) scheelt me op jaarbasis duizenden muiskliks. Meerdere databases tegelijk openen via drag&drop kan ook. Door regelmatige samenwerking met Erik kreeg ik de source tot mijn beschikking en voegde er zelf ook nog het een en ander aan toe.

Naar DBMax
Helaas was de code (van het oorspronkelijke Cavo ontwikkelteam vooral) niet bug vrij. Een structuurwijziging zette bijvoorbeeld spontaan een byte in dbf om zodat de database opeens als OEM in plaats van ANSI werd gezien. Export en importopdrachten leverden regelmatig de melding op dat deze niet kon worden uitgevoerd, zonder reden of oorzaak. En zo lagen er wel meer problemen, en wensen. Zoals dat vaak gebeurt met utilities hadden Erik noch ik veel tijd (over) om er nog eens uitgebreid in te programmeren, dus ging ik eens goed kijken naar de met Cavo meegeleverde utility DBMax van de Duitser Sven Ebert. Zoals alle makers van de 3rd party producten is de meegeleverde versie door de maker gratis aan Grafx ter beschikking gesteld en hoopt de maker dat men de betaalde versie, die geen beperkingen heeft, zal aanschaffen. En zoals de meeste producten is dat het geld meer dan waard.
Product
Ik vroeg de auteur naar enkele door mij zo gewaardeerde opties uit ‘dbv’ en tot mijn verrassing bleek hij bereid deze (gelijkwaardig of redelijk gelijkwaardig aan die in dbv) binnen enkele dagen in te bouwen. Hierna kocht ik enkele licenties. Je kunt de volledige versie van de website www.ebertonline.de downloaden. Deze is 30 dagen geldig. De aankoop bestaat uit een keyfile die kan worden ingelezen waarna de beperkte geldigheid wordt opgeheven. Een geweldige optie is de mogelijkheid deze keyfile ook weer te ‘ontladen’, waardoor je bij een klant gebruikt kunt maken van DBMax in een volledige uitvoering en na afloop van je bezoek (slechts) de demoversie achter te laten in plaats van, illegaal, een volledig werkende versie. Bovendien kun je een password invoeren zodat je klanten DBMax zonder kennis hiervan niet kunnen opstarten.
Opties
DBMax is meertalig, de auteur belooft een gratis versie aan hen die aan de vertaling in een nog niet bestaande taal werken. Zo kun je wel eens een tooltip of andere tekst in het Duits aantreffen als je de Engelse DLL hebt geactiveerd. Er is geen help file, een logisch gevolg van de vele verkrijgbare talen, maar die heb je ook zelden nodig. De vormgeving is fraai, vooral de menu’s, waarvoor Sven Ebert een eigen library voor ontwikkelde zien er echt mooi uit. Databases kunnen exclusief of gedeeld worden geopend. Een van de op mijn verzoek toegevoegde opties is een knopje rechtsonder waarmee je van gedeeld naar exclusief kunt schakelen, waarmee je ook gelijk een controle hebt of iemand met jouw database bezig is. Ook het vanuit de command prompt openen van databases is door Sven Ebert toegevoegd.
Databases
De database inhoud wordt getoond in een browser waarvan naar keuze de eerste 2 kolommen het recordnummer respectievelijk een delete-markering worden getoond. Je kunt zelf niet alleen de kolommen verplaatsen maar ook een beperkt aantal velden voor weergave kiezen. Ook het splitsen van de weergave in 2 gesynchroniseerde helften is mogelijk. Een formulierweergave is niet mogelijk. Bij het editen van velden is ook goed nagedacht. De inhoud van een memoveld wordt in een separaat venster weergegeven waar een aankruisvakje RTF aanwezig is. Indien aan (wat automatisch gebeurt als de inhoud er als RTF uitziet) wordt een keurige RTF weergave getoond, waarbij zelfs het lettertype nog is te veranderen. Ook bij datumvelden is duidelijk dat Sven Ebert meer na heeft gedacht dan de ontwerpers van Microsoft. Waar de DateTimePicker van Microsoft geen mogelijkheid heeft om lege data weer te geven (je ziet gewoon de datum van vandaag, al kan dat dan ‘gedimd’) staat bij dBMax naast de al dan niet lege datum een aankruisvakje. Even aanzetten en de datum van vandaag is ingevuld; even uitzetten en een lege datum is ingevuld. Die DateTimePicker kan worden gebruikt om de datum in te vullen.

Memos
DBMax is voorzien van een optie om memovelden op corruptie te controleren, een helaas nogal eens voorkomende kwaal bij dbfcdx bestanden. De reparatie-optie is echter nogal drastisch: de inhoud gaat daarmee veelal verloren terwijl een kopieeractie de inhoud meestal nog wel intact laat. Ook een corruptie in de database zelf wordt tijdens het bladeren in een dialoog gemeld, al is hiervoor geen reparatie-optie ingebouwd.
Data opdrachten
Ook op mijn verzoek is een filter op basis van zoekacties toegevoegd. De snelste zoekactie kan worden gedaan op basis van 2 comboboxen: in de linker kan de zoekstring worden ingetypt, vanuit de rechter de indexorder worden gekozen. Iets uitgebreider: met Ctrl F (Edit/Find) verschijnt een venster waarmee kan worden gezocht op basis van een index, locate of full text search. Met het laatste kan in alle velden, waaronder ook de memovelden, worden gezocht. Als filter wordt aangekruist resulteert de zoekactie dus in een filter. Verder kan nog voor een ‘last’, ‘softseek’ en ‘case’ optie worden gekozen. De zoekactie is natuurlijk minder snel dan de eerder genoemde Wildseek en het is ook lastig dat tekst ook tussen aanhalingstekens moet worden gezet maar de mogelijkheden zijn ruim.
Een groot aantal database opdrachten is ondergebracht in de menuoptie Replace and other services. Links is uit de velden te kiezen, in het midden de scope, een for en while conditie en een replace waarde. Rechts zijn de acties replace, delete, recall, sum field, sum expression, count, max length of field en average te kiezen via radio buttons. Bij een keuze als Sum wordt de keuze lijst met velden direct beperkt tot de numerieke velden. Bij “max length of field” wordt gerapporteerd welk record (als eerste indien meer) de langste inhoud heeft in het geselecteerde veld. Zelfs eigengemaakte expressies kunnen worden gebruikt als ze in een dbmax.udf worden neergezet.
De index manager biedt open, reindex, rebuild en setorder opties voor verschillende database drivers.
Met de Relation Manager kan een verbinding tussen verschillende databases worden weergegeven. Helaas is het niet mogelijk vervolgens hiermee direct ergens velden (kolommen) toe te voegen uit verschillende gerelateerde databases, zodat je er bijvoorbeeld een export van kan maken. Wel kun je met Export workarea een DDF (Database Definition File) er van exporteren en weer openen maar de praktische toepassing hiervan ontgaat mij.
Aanmaak en wijzigen
Export en import werkt prima. Het is ook mogelijk van een database te importeren met een beperkter aantal velden dan de bestemmingsdatabase. Ook CSV/delimited en SDF import- en/of export is voorzien. Voor het openen van databases worden vele RDD’s en 30 nation drivers ondersteund.
Het wijzigen van een structuur is ook handig. Een toegevoegd veld heet FELD1, C10 en is dat is direct te editen. Pas na goedkeuring van de aangebrachte wijzigingen wordt de nieuwe structuur bewaard.
Veldnamen kunnen worden hernoemd waarbij de inhoud bewaard blijft. Met F9 is een uitgebreid informatiescherm over de geopende database en RDD op te roepen. Twee geopende databases kunnen per record en veld worden vergeleken. En natuurlijk zijn opties als pack (inclusief memobestanden), zap, sort allemaal aanwezig.
Conclusie
Wat verder opvalt is de aandacht die besteed is aan details. De software is heel stabiel en in extreme situaties, zoals bladeren door beschadigde databases of het in gebruikt zijn van een database waarop men probeert iets te bewerken, komt een run time error nauwelijks voor en een waarschuwing of retry mogelijkheid des te meer.
Mijn conclusie: dit product is de 98 euro per licentie meer dan waard voor gebruikers van dbf bestanden.
Dick van Kooten
meer informatie over dbMax op www.ebertonline.de