Die Frage kommt daher, weil man tatsächlich ein Datenmodul nicht unbedingt braucht. Dann kommen aber einige gewichtige ABER ! Am Anfang hatte ich ein Datamodul. Das diente nur der Übersichtlichkeit. Dann kam ein zweites dazu. Warum ? Ein zweites Programm überschneidet sich mit dem ersten aber nicht in allem. Also habe ich das verteilt. Dann kam das dritte, weil das 2. Programm eine zusätzliche Datenbank braucht. Ab 500-1000 Zeilen wirds in jeder
Unit eng und unübersichtlich. Das gilt auch für Datenmodule. Deshalb gibt es jetzt auch ein viertes, welches nur strored Procedures enthält. Die werden allerdings auch von zwei Programmen genutzt. Insofern wird das auch noch aufgeteilt werden. Dann ist noch ein drittes Programm in Planung und wird sicherlich auch ein eigenes Datenmodul erhalten. Databases, Transactions sind allerdings immer nur zentralisiert in einem Datenmodul enthalten. Die Empfehlung, Datenmodule zu verwenden hat noch mehr gute Gründe : man stelle sich mal vor, allen Datasets eine andere Transaction zuzuweisen. Was ist zu tun ? Entweder alle Forms suchen, die ein Dataset haben und es umändern. Ich würde in einem solchen Fall hingehen und die betroffenen Datasets im Datamodul markieren (im
OI steht 22 Objekte ausgewählt) und das dort ändern. Das nächste ist der Ort der Datenbank. Wo wird denn der festgelegt ? Irgendwo in einer Form ? Es hindert einen ja auch keiner daran, ein ganzes Programm in eine
Unit zu legen. Ich mache das so :
Delphi-Quellcode:
procedure TDM.DataModuleCreate(Sender: TObject);
var Ini : TIniFile;
begin
Ini := TIniFile.Create (ExtractFilePath (ParamStr (0)) + '
DB.INI');;
if not CDStart
then
DBName := Ini.ReadString('
Datenbank-Ort','
DBName',ExtractFilePath (ParamStr (0))+'
db\db.fdb')
else
DBName := ExtractFilePath (ParamStr (0)+'
db\db.fdb');
DM.DataBase.Close;
DM.DataBase.DatabaseName := DBName;
DM.DataBase.Open;
DM.Transaction.Active := true;
Ini.free;
end;
Diese Prozedur steht einem aber nur in einem Dadamodul zur Verfügung. Dem Programm ist es dabei sogar egal, wenn es von CD gestartet wird. In den Schreibroutinen der Datenmodule wird dann eben auch die Variable CDStart berücksichtigt. Daß die Datenmodule vor der ersten Form erzeugt werden sollten wurde ja bereits gesagt. Es dürfte wohl jeder hinkriegen die paar Zeilen in der
DPR anders anzuordnen.