Entwickler-Ecke

Datenbanken - OpenDataBase


O'rallY - Mi 31.07.02 16:38
Titel: OpenDataBase
In meinem Delphibuch (Nitty Gritty Delphi 6 von Frank Eller) ist in aller Kürze beschrieben, wie man mit Datenbanken arbeitet. Dort ist auch folgende Funktion aufgeführt (Zugriff über TTable) um die Datenbank zu erstellen:

Quelltext
1:
2:
3:
4:
5:
6:
7:
function TDataModule2.CreateDB(DBName: string): boolean;
begin
...
Table1.TableName := DBName;
Table1.CreateTable;
Result := OpenDataBase(DBName);
end;


Wenn ich das dann so übernehme protestiert der Compiler an dieser Stelle:

Quelltext
1:
Result := OpenDataBase(DBName);                    


Es seien zuviele Parameter übergeben worden. Tatsächlich ist die Funktion in der Hilfe nur so
function OpenDatabase: TDatabase;
aufgeführt.

Wie macht man es denn tatsächlich und warum steht in einem Lehrbuch ein solcher Fehler, wenns denn einer ist?


MrSpock - Mi 31.07.02 17:24

Hallo O'rallY,

es gibt tatsächlich zwei verschiedene Methode mit demselben Namen. Die eine hat einen Parameter, die andere nicht.


Quelltext
1:
Session.OpenDataBase('C:\MyDB.DB);                    


aber verbunden mit einem DBDataSet:


Quelltext
1:
MyTable.OpenDataBase;                    


Übrigens braucht man in der Regel OpenDataBase nicht direkt aufrufen.


GPF - Mi 31.07.02 18:18

Ich benutze folgende Methode zum Öffnen bzw. Erstellen von Datenbanken auf TTable-Basis. Für andere Datenquellen muß die Routine angepaßt werden. In diesem Beispiel und dem von Dir vorgestellten Codeschnipsel muß allerdings StoreDefs der Table auf true gesetzt sein bzw. werden. Die Fehlerabfangroutinen habe ich weggelassen, da der Code sonst zu unübersichtlich werden würde.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure OpenDB (Table: TTable; DBName: string);
begin
  if not assigned(Table) then Exit; //Abbruch falls Table nicht existiert (bzw =nil)
  if Table.Active and (CompareText(DBName, Table.Databasename)=0) then Exit; //Abbruch, da Endzustand bereits erreicht
  if Table.Open and (Table.State in [dsEdit, dsInsert]) then Table.CheckBrowseMode;  //Falls Datenbank aktiv Änderungen speichern, falls vorhanden
  Table.Close; //Datenbank schließen, funktioniert auch wenn die Datenbank bereits geschlossen ist
  Table.Databasename:=DBName;
  if not FileExists(IncludeTrailingBackSlash(Table.Databasename)+Table.Tablename) then Table.CreateTable; //Datenbank erstellen falls nicht existent
  Table.Open;  //Datenbank öffnen
end;


O'rallY - Mi 31.07.02 21:25

danke, es hat mir weitergeholfen!