De gegeven voorbeelden zijn voorbeelden van het principe, niet van de techniek.
In werkelijkheid zit de techniek nog iets anders in elkaar. Daar gaat met TdbCustom gaan afleiden van een light memory-dataset. Ik zal moeten nazien om een voorbeeldje te maken, maar het probleem hierbij is dat het component dat ik nu gebruik een commercieel produkt is, en dat kan ik niet op een forum plaatsen.
Bij data-abstractie gaat het er over om onafhankelijk van eender welke bron ( database, tables, XML, of wat dan ook ) te gaan werken. In dit geval is de enige mogelijke optie om te werken met een dataset in het geheugen. Borland/Codegear is later tot dezelfde conclusie gekomen en heeft met zijn dbExpress trouwens dezelfde weg ingeslagen.
Het probleem ontstaat wanneer je gaat werken met verschillende databanken ( in de ruime zin van het woord ). Hierbij zijn hoe-dan-ook een aantal verschillen. Ik som er een aantal op:
1. De veldnamen kunnen anders zijn. Een voor de hand liggend probleem is waarbij in sommige systemen de lengte van de veldnamen beperkt is, bijvoorbeeld tot 8 karakters. Soms zijn ze case-sensitive, ... Ik ken zo'n situatie waarbij de veldnamen per land worden vertaald, maar ik moet er bij vertellen dat dit zeker niet mijn idee is.
2. Veldtypes die verschillen. Sommige veldtypes zijn bezonder handig, maar bestaan bij het ene systeem en bij het andere systeem niet. Soms moet je char-types gaan trimmen, ...
3. Bij sommige databanken zijn er optimalisaties mogelijk ( zoals batch-verwerking ), andere databanken hebben dit niet
4. ....
De data wordt hier op een vier-tal plaatsen gemanipuleerd.
1. Door middel van typecasting en aliassen op de databank.
SELECT CustoNo AS KlantNr, Name AS NAAM FROM customer WHERE ....
Code:
procedure SetKlantNr( value: string);
begin
SetF('CustNo', value);
end;
2. Door middel van code die geschreven wordt tussen de 'Query' en de Mem-dataset.
1+2 samen noemt men de Mapping. In zo goed als alle systemen die daarop gebaseerd zijn, gebeurt dit automatisch ( statisch, dynamisch of iets tussenin )
Vanaf de mem-dataset, kunnen er ook nog een aantal zaken gebeuren.
3. De voorstelling van de data kan aangepast worden door het visueel framework. Een typisch voorbeeld hier zijn de typische afrondingen van reals, het tonen van datums ('Maandag 6 september 2007') en dergelijke dingen meer.
4. De properties. Ook daar kunnen manipulaties gebeuren. Properties naar calculated fields zijn hier een typisch voorbeeld. Deze berekeningen kunnen ook elders uitgevoerd worden, maar dit kan ook door gebruikt te maken van properties. Meestal zijn deze read-only.
Twee voorbeelden:
Code:
property RecordCount: integer read GetRecordCount;
function RecordCount: integer;
begin
Result:= XGetValue('SELECT Count(*) FROM TblKlant', 0);
end;
Deze property is readonly, uiteraard.
Code:
property Naam: string read GetNaam write SetNaam;
function GetNaam: string;
begin
Result:= FamilieNaam+ ', '+ VoorNaam;
end;
procedure SetNaam( Value: string)
begin
FamilieNaam:= Copy(Value, 1, Pos(',', Value)-1);
VoorNaam := Copy(Value, Pos(',', Value)-1, length(Value));
end;
Ik hoop dat dit ongeveer het antwoord is op je vraag.
Bookmarks