Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ExtractFilePath(ParamStr(0)) für 4 Datenmodule anwenden (https://www.delphipraxis.net/87721-extractfilepath-paramstr-0-fuer-4-datenmodule-anwenden.html)

dlenz 5. Mär 2007 10:12

Datenbank: TurboDB • Version: 5.10 • Zugriff über: TdbTable, Datasource

ExtractFilePath(ParamStr(0)) für 4 Datenmodule anwenden
 
Hallo Liebe Delphi-Gemeinde!

Mein Programm arbeitet mit 4 Datenmodulen und 4 DB-Grids. Es funktioniert soweit auch alles. Das Ding ist jetzt, wenn man das Programm auf einem anderen PC ausführt, dann muss die Turbo-DB - .tdbd - Datei wie bei meinem PC im gleichen Pfad liegen (E:\db\...), das tut Sie aber meistens auf einem anderen System nicht.

Bei einem einzigen Datenmodul hatt ich das bisher so gemacht:
Code:
procedure TForm1.FormCreate(Sender: TObject, Anzahl): integer;
 var dbfrm: string;

begin
 dbfrm := ExtractFilePath(ParamStr(0))+'db/db.tdbd';

FormCreate.TdbTable1.Active := False;
 try
  FormCreate.TdbTable1.DatabaseName := dbfrm;
  FormCreate.TdbTable1.TableName := 'pr';
  FormCreate.TdbTable1.Active := True;
 except
  MessageBeep(0);
  ShowMessage('Die Tabelle db.tdbd befindet' + #10#13 +'sich nicht im angegebenen Verzeichnis!')

 end

end;
jetzt ist mein Problem, dass ich ja 4 Datenmodule benutze. Jetzt hatte ich mir das mit meinem Freund, der FOR-Schleife, zu lösen und zwar ungefähr so:

Code:
procedure TForm1.FormCreate(Sender: TObject, Anzahl): integer;
 var dbfrm: string;
 var Anzahl: integer;
 var i: integer;
begin
 Anzahl:=4;

 for i:=1 to Anzahl do

 dbfrm := ExtractFilePath(ParamStr(0))+'db/db.tdbd';

FormCreate.TdbTable1.Active := False;
 try
  FormCreate.TdbTable1.DatabaseName := dbfrm;
  FormCreate.TdbTable1.TableName := 'pr';
  FormCreate.TdbTable1.Active := True;
 except
  MessageBeep(0);
  ShowMessage('Die Tabelle db.tdbd befindet' + #10#13 +'sich nicht im angegebenen Verzeichnis!')
 end

end;
jetzt sehe ich aber den Wald vor lauter Bäumen nicht mehr. Kann mir jemand helfen biddö... dangge.

sh17 5. Mär 2007 10:18

Re: ExtractFilePath(ParamStr(0)) für 4 Datenmodule anwenden
 
also
Delphi-Quellcode:
for i:=1 to Anzahl do

dbfrm := ExtractFilePath(ParamStr(0))+'db/db.tdbd';
erzeugt 4 mal den gleichen Namen.

Wo liegt denn Deine Datenbank nun?

mkinzler 5. Mär 2007 10:20

Re: ExtractFilePath(ParamStr(0)) für 4 Datenmodule anwenden
 
Zitat:

Delphi-Quellcode:
dbfrm := ...

kannst du außerhalb der Schleife zuweisen.
Deine Schleife macht ja viermal das Selbe ( selbes Modul)

Ich würde das nicht in Form1 sondern in den jeweiligen Datenmodulen lösen.

marabu 5. Mär 2007 10:27

Re: ExtractFilePath(ParamStr(0)) für 4 Datenmodule anwenden
 
Hallo,

ich fürchte, dass da eine Begriffsverwirrung vorliegt. Vermutlich gibt es ein Datenmodul und vier Forms auf denen DBGrids liegen. Zumindest wäre das ein vernünftiger Ansatz. Der Pfad zur Turbo-Datenbank wird dann nur im Initialisierungscode des Datenmoduls bestimmt. Dort liegen auch die DataSet-Komponenten. Auf den Forms liegen nur die DataSource-Komponenten und die interessiert der Pfad nicht.

Grüße vom marabu

dlenz 5. Mär 2007 10:49

Re: ExtractFilePath(ParamStr(0)) für 4 Datenmodule anwenden
 
Zitat:

Zitat von mkinzler
Zitat:

Delphi-Quellcode:
dbfrm := ...

kannst du außerhalb der Schleife zuweisen.
Deine Schleife macht ja viermal das Selbe ( selbes Modul)

Ich würde das nicht in Form1 sondern in den jeweiligen Datenmodulen lösen.

also auch einfach in der FormCreate-Prozedur für jedes Datenmodul dann?

mkinzler 5. Mär 2007 10:52

Re: ExtractFilePath(ParamStr(0)) für 4 Datenmodule anwenden
 
Ja, im .DataModuleCreate.

dlenz 5. Mär 2007 10:57

Re: ExtractFilePath(ParamStr(0)) für 4 Datenmodule anwenden
 
Zitat:

Zitat von mkinzler
Ja, im .DataModuleCreate.

ahhhhhaaaa... okay... dann weiß ich jetzt wo ich dran muss :) dangge

dlenz 5. Mär 2007 11:15

Re: ExtractFilePath(ParamStr(0)) für 4 Datenmodule anwenden
 
so, jetzt habe ich das wie folgt im 1. Datenmodul angewendet:
Delphi-Quellcode:
unit u_dm1;

interface

uses
  SysUtils, Classes, DB, TdbQuery, TdbDataSet, TdbLicense;

type
  TDataModule1 = class(TDataModule)
    TdbTable1: TTdbTable;
    DataSource1: TDataSource;
    procedure DataModuleCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  DataModule1: TDataModule1;
  TdbTable1: TTdbTable;
 
implementation

{$R *.dfm}

procedure TDataModule1.DataModuleCreate(Sender: TObject);
 var dbfrm: string;
begin
 dbfrm := ExtractFilePath(ParamStr(0))+'db/db.tdbd';
 self.TdbTable1.Active := False;
 self.TdbTable1.DatabaseName := dbfrm;
 self.TdbTable1.TableName := 'pr';
 self.TdbTable1.Active := True;
 end;
end.
Compiliert auch ohne Fehler, nur die Daten werden im DB-Grid nicht angeziegt :wall:
Hab ich noch was fundamentales vergessen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz