Entwickler-Ecke

Datenbanken - databasename zur laufzeit zuweisen


tortom1000 - Mi 11.02.09 19:05
Titel: databasename zur laufzeit zuweisen
Hallo,
ich habe folgendes Problem:
In einer Ini-Datei befindet sich der Name der Datenbank in der Form 192.168.0.1:c:\programme\meinprogramm\datenbank.fdb.
Wenn ich die Ini-Datei bei OnCreate der Form einlesen möchte, bleiben die Variablen trotz korrekter Zuweisung undefiniert. Daher kann ich den DatabaseName im OnCreate der Form nicht zuweisen.
Im OnShow der Form funktioniert das Einlesen aus der Ini-Datei, aber das ist zu spät, da dann das Programm bereit abgestürzt ist ohne die erforderliche Datenbank.
Weiß hierzu jemand Rat?
Das Auslesen aus der Ini-Datei mache ich, damit ich bezüglich des Rechnernamens bzw. seiner IP und des Datenbankpfades variabel bin.

Gruß Tortom

Moderiert von user profile iconNarses: Beitragsformatierung überarbeitet.


Xentar - Mi 11.02.09 19:23

Bei mir geht das auch im OnCreate...
Zeig uns, wie du das machst, und wir sagen dir, was falsch ist.


tortom1000 - Mi 11.02.09 22:47

Hallo Xentar,
grundsätzlich geht die Zuweisung bei mir auch, wenn ich einen festen Wert zuweise.
Da ich den Wert aber aus der Ini-Datei auslesen muß bzw. möchte, damit ich bei dem
Datenbankpfad variabel bin, funktioniert es mit dem auslesen aus der Ini-Datei
im Oncreate nicht.
Die von mir verwendete Prozedur zum auslesen sieht folgendermaßen aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure INI_einlesen;
var ini: TIniFile;
begin
  ini:=TIniFile.Create(progdir + 'datenbank.ini');
  try
    databasename:=ini.ReadString('DATENBANK','Datenbankname','undefiniert');
   finally
    ini.free;
  end;
end;

Die Prozedure funktioniert z.B. im OnShow-Ereignis einwandfrei, nur halt nicht
im OnCreate.
Keine Ahnung, was das falsch ist

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Xentar - Mi 11.02.09 22:50

1. Kann es sein, dass progdir zu dem Zeitpunkt noch nicht definiert ist?
2. und wo wird databasename weiterverwendet? Den musst du ja irgendwo der Komponente zuweisen..
3. Hast mal nen Haltepunkt gesetzt, ob überhaupt der richtige Wert in databasename drinsteht?
4. Delphi Tags hier im Forum verwenden

Zeig mal mehr code..


Chemiker - Mi 11.02.09 23:44

Hallo tortom1000,

ich benutze dafür ein DataModul. Zu beachten ist, dass es als erstes aufgerufen wird.

z.B.:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
begin
  Application.Initialize;
  Application.Title := 'MEIN PROGRAMM';
  Application.CreateForm(TDM, DM);
  Application.CreateForm(TfrmSPSDAPHauptMenue, frmSPSDAPHauptMenue);

 usw.


Bis bald Chemiker


tortom1000 - Do 12.02.09 08:31

Schande über mein Haupt. Ich Depp hatte progdir tatsächlich
erst im OnShow definiert.
Dann kann das auch nicht gehen.
Ich hab das nun geändert und es funktioniert auf Anhieb.
Vielen Dank für deine/eure Hilfe.
Tortom