Er frägt ja nach einem Vorteil von den Dingern. Aber nur zwei Komponenten ?
![Shocked](images/smilies/icon_eek.gif)
Wie geht das denn ?? Minimal wäre wohl eine TDataBase, TTransaction und TDataSet, also mindestens drei. Jetzt kommen da noch irgendwann stored procedures ins Spiel. Sollen die jetzt auch noch irgendwo auf einem Formular rumliegen ? Nach dem Motto : wo sind sie denn ?
![Mr. Green](images/smilies/icon_mrgreen.gif)
Bei mir sind es, wie gesagt 3 DataModules und zwar aus 2 Gründen : Übersichtlichkeit. Da hängt ja auch noch Source-Code dahinter und bei 1000 Zeilen pro
Unit fange ich langsam an, die Reißleine zu ziehen. Zudem werden die Daten für 2 nicht ganz gleiche Programme gebraucht. Die für beide Programme benötigten Datasets, DataSources usw. liegen zentral in einem DataModule. Database und Read/Write-Transaction braucht man auch nur einmal. Das größere Programm braucht allerdings noch mehr und erhält deshalb zusätzlich ein eigenes DataModule. Das dritte brauche ich für SPs. Es sind Überlegungen im Gange, dieses auch aufzuspalten. Das wurden nämlich mehr als vermutet und auch in dem Bereich werden nicht alle SPs überall gleichzeitig gebraucht. Na und ? Dann sinds eben 4 Datenmodule. Soviel erstmal zu den DataModules, wozu die gut sind. Aber nur hauptsächlich gut sind !
Der zweite Grund, bzw. Vorteil hat sich eigentlich erst im Nachhinein herausgestellt. Da gehts um das Anmelden an der Datenbank und somit um die Frage an sich. Weiß jetzt nicht mehr genau, aber da gabs auch hier komische Effekte. Die klärten sich aber rasch auf durch die Reihenfolge der Erzeugung der Forms. Lagere ich nun alles in Datenmodule aus, dann kann ich die separat erzeugen (
DPR beachten !) und dann erst die erste Form und die darf ruhig dann auch auf Daten zugreifen.
Hier könnte man leicht einen Login-Dialog einbauen :
Delphi-Quellcode:
procedure TDM.DataModuleCreate(Sender: TObject);
var Ini : TIniFile;
begin
Ini := TIniFile.Create (ExtractFilePath (ParamStr (0)) + '
DB.INI');
if not CDStart
then
DatenBankName := Ini.ReadString('
Datenbank','
Name',ExtractFilePath (ParamStr (0))+'
db\db.fdb')
else // falls INI nicht vorh. usw. ^^
DatenBankName := ExtractFilePath (ParamStr (0)+'
db\db.fdb');
end;
Da gehts jetzt mehr oder weniger nur darum, den
Db-Ort aus einer INI zu lesen, aber genau an der Stelle würde ich ansetzen für Login.
Aahhhh, roter Kasten. Habe zuviel und langsam getippt.
Access Violation. Warum wohl ? Beherzige besser meine Tips. Das sind genau die angesprochenen Effekte. Da wird was zu spät erzeugt bzw. zu früh drauf zugegriffen und es ist nicht glech zu sehen warum. Erzeuge das Datamodul und dann erst die erste Form und fertig.