Conference to the Max 2001 |
Ik heb gebruikgemaakt van Delphi 5 Enterprise, Update Pack 1, samen met InterBase, en draai thuis onder Windows 2000, SP1 (op mijn laptop draait NT4 Server, maar geen InterBase).
MIDAS Server
We starten met een nieuwe applicatie, en zorgen dat de main form herkenbaar is.
Bijvoorbeeld door er een groot label op te zetten met als tekst het feit dat ik toch bij CttM 2001 aanwezig was:
Daarna moeten we een Remote Data Module toevoegen (te vinden op de Multitier tab van de Object Repository):
Als CoClass Name specificeer ik DrBob42 (da's makkelijk terugvinden straks), de overige opties staan default al goed:
De Remote Data Module gebruik ik om een verbinding te maken met een InterBase Database, tabel en query.
Allereerst moeten we de Database component neerzetten, de AliasName op IBLocal zetten en de Connectie testen (dit werkt dus niet meer op mijn laptop - sorry - maar wel op mijn machine thuis waar ik nu dit paper schrijf).
Als laatste moeten we met name opletten dat de LoginPrompt op False staat (we willen niet handmatig de MIDAS Server latten inloggen).
Maar zorg dan meteen dat het password (= masterkey) in de Params staat van de Database, anders krijg je straks toch nog problemen.
Voor real-world toepassingen kan het verstandiger zijn om een speciale method aan de Remote Data Module toe te voegen die de MIDAS Client dan kan gebruiken om de username/password gegevens over de lijn te sturen (indien nodig).
Nu de Database naar IBLocal wijst, kunnen we de Table (TblEmployee) naar EMPLOYEE openen, en een Query (QryEmployeeProject) invullen als volgt:
SELECT * FROM EMPLOYEE_PROJECT, PROJECT WHERE (EMPLOYEE_PROJECT.PROJ_ID = PROJECT.PROJ_ID) AND (EMPLOYEE_PROJECT.EMP_NO = :EMP_NO)
Deze query heeft één parameter, :EMP_NO, en die kunnen we automatisch laten invullen door de EMPLOYEE table.
We hebben hier een datasource component voor nodig, die naar de Table wijst en als DataSource property van de Query wordt gebruikt.
Tot slot hebben we nog een DataSetProvider nodig om de Table (en de daarbij behorende Query - als nested dataset) naar buiten te exporteren.
Het project bewaar ik onder CttMidasServer.dpr, de Main Unit als Unit1.pas en de Remote Data Module in RDataMod.pas. De source code voor RDataMod is als volgt:
unit RDataMod; interface uses Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr, DBClient, CttMidasServer_TLB, StdVcl, Provider, Db, DBTables; type TDrBob42 = class(TRemoteDataModule, IDrBob42) TblEmployee: TTable; Database1: TDatabase; QryEmployeeProjects: TQuery; dsEmployee: TDataSource; DataSetProvider1: TDataSetProvider; private { Private declarations } protected class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override; public { Public declarations } end; implementation {$R *.DFM} class procedure TDrBob42.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); begin if Register then begin inherited UpdateRegistry(Register, ClassID, ProgID); EnableSocketTransport(ClassID); EnableWebTransport(ClassID); end else begin DisableSocketTransport(ClassID); DisableWebTransport(ClassID); inherited UpdateRegistry(Register, ClassID, ProgID); end; end; initialization TComponentFactory.Create(ComServer, TDrBob42, Class_DrBob42, ciMultiInstance, tmApartment); end.
Nu is het alleen nog een kwestie van compileren en runnen om de server meteen te registreren op mijn lokale machine.
MIDAS Client
Ik heb meestal de Project Manager open staan, zodat ik meteen een nieuw project kan beginnen, en ze naast elkaar kan zien.
De MIDAS Client begint als normale Windows Client, maar kan ook een ActiveForm zijn of een web client (InternetExpress).
We hebben alleerst een connectie component nodig om een verbinding te maken tussen de MIDAS Client en de MIDAS Server.
Tijdens de sessie zal ik zowel de DCOMConnection, SocketConnection als WebConnection laten zien.
In dit paper begin ik met de DCOMConnection component.
Open de ServerName property editor en kies de juiste MIDAS 3 Server (in ons geval is dat CttMidasServer.DrBob42).
Door de Connected property op True te zetten kunnen we testen of de CttMidasServer al in de lucht wil komen.
Daarna hebben we een eerste ClientDataSet component nodig, en moeten de RemoteServer op DCOMConnection zetten, en de juiste Provider kiezen (er is er maar eentje).
Zet Active van de ClientDataSet op True om daadwerkelijk data over de lijn te sturen.
Eén van de leukst zaken is nu om met de Fields Editor (rechter muisknop - Add All Fields) te kijken welke velden er in de ClientDataSet zitten.
Dat zal een kleine verrassing zijn, want we hebben een extra veld:
De QryEmployeeProject is een zgn. DataSetField, en deze constructie wordt ook wel nested dataset genoemd.
De DataSetProvider aan de server kant is in staat geweest om alle "detail" records in te pakken bij de corresponderende "master" records.
Hoe pakken we het QryEmployeeProject veld uit?
Daar hebben we een tweede ClientDataSet voor nodig.
Deze keer zonder de RemoteProvider aan te geven, maar simpelweg door de DataSetField property van de tweede ClientDataSet te laten wijzen naar ClientDataSet1.QryEmployeeProject.
Nu nog twee DataSources en tweemaal een DBGrid, en het ziet er als volgt uit:
De MIDAS Client heeft alleen maar de MIDAS.DLL nodig, en kan via de DCOMConnection component een verbinding maken met de MIDAS Server. Doordat de MIDAS Client zelf geen database-specifieke drivers nodig heeft, en ook eenvoudig te installeren is, wordt dit ook wel een thin-client genoemd.
Meer Informatie
Mocht iemand nog vragen, opmerkingen of suggesties hebben, dan hoor ik die het liefst via .
Voor meer informatie over MIDAS (en DataSnap - de nieuwe naam van MIDAS in Delphi 6 en 7) verwijs ik graag naar mijn Delphi Clinic over dit onderwerp.