|
|
|
|
Advantage Database Server
De Advantage Database Server (ADS) is niet het enige alternatief voor wie van de BDE af wil (of eindelijk eens moet), we kunnen ook InterBase/Firebird, BlackfishSQL, SQL Server of soms zelfs Access gebruiken.
Advantage Database Server heeft echter enkele grote voordelen die het bij uitstek geschikt maakt als BDE vervanger voor Paradox en dBASE tabellen:
Advantage Database Server
De Advantage Database Server is te downloaden van de website van Advantage – er is een 30-dagen probeerversie, en ook een gratis Advantage Local Server versie (voor lokale connecties – dus op dezelfde machine als de toepassing zelf).
Voor het gebruik in een Client/Server situatie, waarbij de Advantage Database Server dus op een andere machine kan staat, is ADS is niet altijd gratis, maar heeft een adviesprijs vanaf 207 Euro (voor een 1-User Windows Server) tot bijvoorbeeld € 846 voor 5- of € 1614 voor 10-users.
Dit betreft overigens de kosten van de deployment licentie – voor het ontwikkelen zelf kun je de Advantage Local Server licentie gebruiken.
Vergeleken bij de BDE is de Advantage Database Server duurder, maar het betreft dan ook een DBMS met volledige transactie ondersteuning, snelheid die vaak die van SQL Server overtreft, en waar nauwelijks beheerinspanningen voor nodig zijn.
De enkele taken die we moeten doen, kunnen we in de Advantage Data Architect doen, een gratis tool waar we ook de source code van krijgen.
In Delphi geschreven uiteraard, om de warme band van ADS met Delphi nog maar eens te benadrukken.
Migratie van BDE data naar ADS
Voor de migratie van BDE data naar het ADS formaat hebben we de gratis Advantage Data Architect nodig.
We kunnen hierbij in het menu voor Tools | Import Data kiezen.
In de dialoog die volgt kunnen we kiezen uit een aantal import data types, waaronder Parafox/dBASE bestanden of gewoon meteen een hele BDE Alias.
Voor het voorbeeld in dit artikel wil ik de hele BDE Alias DBDEMOS omzetten naar het ADS formaat en gebruiken met behulp van de Advantage TDataSet componenten.
Dus, eerst kies ik voor de BDE Alias, en daarna kan ik in een drop-down list kiezen uit de aanwezige BDE Aliases, en kies van voor de DBDEMOS alias.
In een volgend scherm kan ik dan een bestaande database Connection gebruiken, of een nieuwe maken.
Bij het maken van een nieuwe Connection kan ik aangeven waar de database of geconverteerde tabellen moeten komen, en of de server een local, remote of internet server moet zijn.
Voor tests op de lokale machine is de local server voldoende natuurlijk.
Voor ons voorbeeld geef ik aan dat de data in de directory c:\adsdata neergezet moet worden na conversie naar het ADS formaat.
Ook kan ik zelf een databasenaam aangeven, waarvoor ik wederom DBDEMOS heb aangegeven, maar hier kan je natuurlijk een andere naam opgeven als je wilt.
Door nu op OK te klikken wordt de nieuwe connectie aangemaakt en gekozen, en kunnen we migratie starten. Dat gebeurt in een scherm waarbij iedere tabel langs flitst (soms duurt het wat langer dan anders als er veel data in de tabel staat).
Uiteindelijk kunnen we in de Advantage Data Architect het resultaat van de migratie van de data bekijken. Bijvoorbeeld de inhoud van de biolife tabel, die nu een ADT extensie heeft gekregen.
Dit was de eenvoudigste manier om de data uit BDE tabellen te migreren naar het ADS formaat. We hadden ook een nieuwe database connection met een data dictionary kunnen maken om daarin de tabellen in op te nemen, waarbij er extra mogelijkheden beschikbaar komen, maar daar gaan we deze keer toch geen gebruik van maken, dus dat bewaar ik voor een volgende keer.
Advantage Delphi Components
Als de data eenmaal is omgezet naar het ADS formaat, moeten we er nog wel gebruik van maken.
Dit is het punt waarop ADS echt laat zen dat het aandacht heeft voor Delphi ontwikkelaars: er zijn namelijk speciale TDataSet Descendent componenten, voor zowel Delphi 7 en ouder, als voor Delphi 2006 en nieuwer.
En ook Delphi 2009 en 2010 worden ondersteund met de Unicode mogelijkheden.
De Advantage TDataSet Descendent componenten zijn geheel gratis, en leveren na installatie de volgende verzameling componenten op in het Tool Palette:
De TAdsConnection is daarbij te vergelijken met de oude BDE TDatabase component. De TAdsTable, TAdsQuery en TAdsStoredProc spreken voor zich, en zijn de vervangers van de TTable, TQuery en TStoredProc componenten (alhoewel de BDE zelf natuurlijk niet eens stored procedures ondersteunde voor dBASE of Paradox tabellen). De TAdsDictionary en TAdsSettings zijn specifieke ADS componenten die een volgende keer aan de orde komen, en de TAdsBatchMove kan gebruikt worden om snel data van het ene formaat naar het andere formaat om te zetten, bijvoorbeeld van dBASE of Paradox naar ADS als je daar niet eerst de Advantage Data Architect voor gebruikt had.
Het zal je opvallen dat er geen TAdsSession component is – dat is niet nodig, want de Advantage TDataSet componenten zijn thread-safe, en hebben geen expliciete Session component nodig.
TAdsConnection
De TAdsConnection is het component om met onze ADS database of verzameling tabellen te gaan werken.
Om met onze zojuist geconverteerde tabellen aan de slag te gaan, kunnen we eerst ADS vertellen dat de directory c:\adsdata een plek is waar de tabellen zich bevinden door daar een soort alias naar op te nemen.
Dit kan in de ADS.INI file, die zich default in de Windows directory bevindt.
Als we de voorbeeld data hebben geïnstalleerd, dan staat daar al één regel in voor de ADTDemoData.
We kunnen hier vervolgens zelf een regel aan toevoegen, bijvoorbeeld DBDEMOS, en die naar de directory C:\ADSDATA laten wijzen waar ik de tabellen in heb laten komen.
De inhoud van de ADS.INI is dan als volgt:
[Databases] ADTDemoData=C:\Program Files\Advantage 9.10\Help\ADS_DATA\;A DBDEMOS=C:\ADSDATA;A
Overigens kun je de ADS.INI ook in dezelfde directory neerzetten als je gecompileerde toepassing zelf, dus dat scheelt weer bij het deployen (dan kijkt hij eerst in de lokaleADS.INI en hoef je niet in de Windows directory te schrijven). Dit is in ieder geval iets fijner dat het handmatig vermelden van het pad in de ConnectionPath property van de TAdsConnection component. Hier willen we liever de AliasName gebruiken. En met een bijgewerkt ADS.INI bestand zal Delphi ons voor de AliasName property van de TAdsConnection component een keuze bieden tussen ADTDemoData en onze DBDEMOS.
Nadat de AliasName property gezet is, zet ik altijd de LoginPrompt op False, alhoewel dat niet uitmaakt als de database geen login nodig heeft (handig, dan wordt er niet onnodig om gevraagd). Vervolgens kunnen we testen of we met de tabellen kunnen communiceren door de IsConnected property op True te zetten.
Er zijn nog enkele leuke properties aan de TAdsConnection component die de moeite van het vermelden waard zijn. Zo kom ik regelmatig in problemen als een project van machine X open op machine Y, en dan niet bij m’n database kan (omdat die niet op machine Y staat bijvoorbeeld). Onhandig als dan de Connected of in dit geval de IsConnected property toch op True staat. Dat probleem is verholpen als we bij de TAdsConnection component de property StoreConnected op False zetten. Die geeft namelijk aan dat we de waarde van de IsConnected property *niet* zullen opslaan in de DFM, waardoor deze bij het opnieuw openen niet automatisch de verbinding met de database zal openen. Heel handig (maar we moeten nog wel even StoreConnected op False zetten, want default staat hij op True).
Een andere fijne property is de CompressionType, die default op ccAdsCompressionNotSet staat, maar die we op ccAdsCompressionInternet kunnen zetten, om aan te geven dat compression gebruikt wordt als we via het internet een verbinding maken, of op ccAdsCompressionAlways om aan te geven dat we altijd compressie willen gebruiken. Compressie levert minder data op die over de lijn moet, maar is natuurlijk zinloos als de tabellen en de toepassing op dezelfde machine staan (dan is het zelfs langzamer, omdat het ook een beetje tijd kost om de data te compressen en weer te decompressen). Voor echte Client/Server of web toepassingen is dit wel een fijne manier om de bandbreedte een beetje te kunnen beperken.
Er zijn ook UserName en Password properties, om desgewenst een username en password mee te geven met de connectie. Deze informatie kun je ook meegeven in de OnLogin event handler, waar je eventueel de Username en Password kunt doorgeven die de gebruiker net zelf heeft ingevoerd op het scherm bijvoorbeeld.
Er is ook een fijne ReadOnly property die je kan gebruiken in situaties waarin je zeker weet dat de gebruiker alleen maar data zal mogen lezen. Dan worden er dus geen INSERT, UPDATE of DELETE commando’s verstuurd, en ben je verzekerd dat de data in de tabellen of database ongewijzigd blijft.
TAdsTable
De TAdsTable is te vergelijken met de oude TTable van de BDE.
We moeten de AdsConnection property laten wijzen naar de TAdsConnection component, en kunnen dan voor de TableName property uit de lijst met aanwezige tabellen kiezen (aanwezig in de betreffende TAdsConnection).
De Active property werkt net als bij de oude TTable, en kan gebruikt worden om ook Live data tijdens design time te kunnen zien.
De biolife tabel, bijvoorbeeld, ziet er met een DBGrid, DBNavigator, DBMemo en DBImage component als volgt uit:
Ook nu is er weer een StoreActive property in de TAdsTable, waarmee we kunnen aangeven of de waarde van Active (True voor bovenstaand screenshot) bewaard moet worden in de DFM, of dat deze waarde niet opgeslagen moet worden.
Persoonlijk vind ik dat erg handig, zodat het project ook geopend kan worden door andere mensen die niet noodzakelijkerwijs over een ADS database beschikken.
Waar het eenvoudig is om een nieuwe toepassing te maken, zal het vaker voorkomen dat mensen met een bestaande BDE toepassing in hun maag (gesplitst) zitten, en deze zouden willen migreren naar een andere oplossing.
Migratie
Voor migratie van de BDE Paradox en dBASE tabellen naar Advantage Data Server formaat kunnen we de Advantage Data Architect gebruiken, zoals eerder gedemonstreerd.
Voor bestaande toepassingen zullen we echter ook de BDE componenten moeten vervangen.
Dat kost iets meer moeite, maar niet heel erg veel.
De TAdsTable gedraagt zich namelijk precies zoals we van een TTable gewend zijn.
Net als de TAdsQuery zich gedraagt als de TQuery, en de TAdsStoredProc als de TStoredProc.
De TDatabase en TSession hebben we niet meer nodig, en in plaats daarvan moeten we een TAdsConnection gebruiken.
Het recept voor een snelle migratie is dan ook als volgt:
Wie de migratie liever in overleg aanpakt, is overigens bij mij altijd welkom. Als Delphi en Sybase reseller (voor Advantage Database Server) biedt ik mijn klanten desgewenst persoonlijke ondersteuning bij de migratie. Mijn doel is zoveel mogelijk mensen van de BDE af te helpen, en ADS is daarbij een zeer goed middel (dat niet duur in aanschaf hoeft te zijn, gezien de gratis Advantage Local Server).
Samenvatting
De BDE is oud, versleten, en toe aan vervanging.
Al bijna 10 jaar.
Advantage Database Server is één van de geschikte database omgevingen om je BDE dBASE en Paradox tabellen en toepassingen naar te migreren.
Het omzetten van de data is een fluitje van een cent met de Advantage Data Architect, en het migreren van BDE toepassingen door gebruik te maken van de Advantage TDataSet Descendant is niet triviaal, maar ook niet echt heel complex.
Naast een ideale vervanging voor lokale BDE, kan de Advantage Database Server ook heel goed in een Multi-user en Client/Server omgeving gebruikt worden.
Referenties
Advantage Local Server (gratis)
ADS Deployment Prijzen van eBob42.