Entwickler-Ecke

Sonstiges (Delphi) - DB-Programm auf anderem PC ausführbar machen...


dlenz - Mi 17.01.07 11:01
Titel: DB-Programm auf anderem PC ausführbar machen...
Hallo Liebe Gemeinde,

ich möchte mein DB-Verwaltungsprogramm gerne auf einem anderen PC ausführbar machen.
Irgendwie komme ich aber mit "ExtractFilePath(ParamStr(0));" irgendwie nicht zurande.

Ich benutze eine TurboDB "db.tdbd", die im Ordner /db in meinem Programmverzeichnis liegt.

Wo muss ich denn "ExtractFilePath(ParamStr(0));" genau im Code anwenden?


MisterBum83 - Mi 17.01.07 11:51

Ich verstehe dein Problem nicht so richtig. Was willst du denn machen?
ExtractFilePath(ParamStr(0)) liefert dir den Pfad zurück, wo dein Programm ausgeführt wird.

user profile icondlenz hat folgendes geschrieben:


Wo muss ich denn "ExtractFilePath(ParamStr(0));" genau im Code anwenden?



Für was denn?


dlenz - Mi 17.01.07 11:54

Wenn das Programm auf einem anderen PC ausgeführt wird, dann wird meine "db.tdbd" im Ordner /db nicht gefunden, da der andere PC einen ganz anderen Laufwerksbuchstaben und Programmpfad hat, in dem das Programm gestartet wird.

ich starte das Programm z.B. im Ordner E:\Delphi-Prgs\, der andere PC aber aus dem Ordner C:\Programme\ProgrammXYZ\ und dann wird die DB nicht gefunden.

Das mein ich damit :)


ZeitGeist87 - Mi 17.01.07 12:01

Hä?

Ich mach das immer so:


Delphi-Quelltext
1:
2:
3:
 pfad:= includetrailingpathdelimiter(extractfilepath(application.exename));
 //Datenbank
 db:= pfad + name_der_Datenbank;


und schon steht in DB der gesamte Pfad zu deiner DB
und in Pfad, der Pfad aus dem dein Anwendung ausgeführt wird

LG
Stefan


dlenz - Mi 17.01.07 12:13


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Mask, DBCtrls, DB, TdbLicense, TdbDataSet,
  Grids, DBGrids, Buttons;

type
    Tfrm_main = class(TForm)
    DBEdit1: TDBEdit;
    Image1: TImage;
    TdbTable1: TTdbTable;
    DataSource1: TDataSource;
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    DBEdit5: TDBEdit;
    DBEdit6: TDBEdit;
    DBNavigator1: TDBNavigator;
    DBEdit7: TDBEdit;
    DBEdit8: TDBEdit;
    DBEdit9: TDBEdit;
    DBEdit10: TDBEdit;
    DBEdit11: TDBEdit;
    DBEdit12: TDBEdit;
    DBGrid1: TDBGrid;
    DBEdit13: TDBEdit;
    BitBtn1: TBitBtn;
    DBEdit14: TDBEdit;
    DBCheckBox1: TDBCheckBox;
    procedure BitBtn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  frm_main: Tfrm_main;

implementation

uses u_qr1;

{$R *.dfm}

procedure Tfrm_main.BitBtn1Click(Sender: TObject);
begin
 liste.TdbQuery1.SQL.Clear;
 liste.TdbQuery1.SQL.Add('SELECT * FROM antragsgegner WHERE ID =' + DBEdit1.Text);
 showmessage(liste.TdbQuery1.SQL.text);
 liste.TdbQuery1.Open;
 liste.preview;
end;

procedure Tfrm_main.FormCreate(Sender: TObject);
 var verz: string;
begin
 verz := ExtractFilePath(ParamStr(0))+'/db/';
 TdbTable1.Active := False;
 try
  TdbTable1.DatabaseName := verz;
  TdbTable1.TableName := 'db.tdbd';
  TdbTable1.Active := True;                   <--- Fehlermeldung im Code-Explorer
 except
  MessageBeep(0);
  ShowMessage('Die Tabelle db.tdbd befindet' + #10#13 +'sich nicht im angegebenen Verzeichnis!')
 end
end;

end.


wieso ist da ein fehler? *grübel
im OI habe ich die Eigenschaft "DatabaseName" leer gelassen.

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt


ZeitGeist87 - Mi 17.01.07 12:19

Wir überlegen mal:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
 ...
 verz := ExtractFilePath(ParamStr(0))+'/db/';
 ...
 TdbTable1.DatabaseName := verz;
 TdbTable1.TableName := 'db.tdbd';
 ...


So!

Was steht jetzt in verz?

Der Pfad, aus der deine Anwendung heraus ausgeführt wird.
Meintwegen C:\Programme\Test\.

Und was machst du?
Hängst noch ein Unterverzeichnis dran, was total OK ist.

Also ist verz dann -> C:\Programme\Test\db\

Und bei


Delphi-Quelltext
1:
 TdbTable1.DatabaseName := verz;                    


weist du dem Datenbanknamen das Verzeichnis zu, in der die DB liegt.
Was fehlt?
Der Dateiname deiner Datenbank.

Diesen weißt du bei


Delphi-Quelltext
1:
TdbTable1.TableName := 'db.tdbd';                    


zu.

Ist natürlich falsch.

'db.tdbd' gehört noch an dein Verzeichnis mit dran und gehört dem


Delphi-Quelltext
1:
TdbTable1.Databasename:= verz + 'db.tdbd';                    


zugewiesen.

Ich hoffe du hast es verstanden.

LG
Stefan


dlenz - Mi 17.01.07 12:22

boahhh jau...
vielen Dank ZeitGeist! :)

stimmt, TableName ist ja nur die Tabelle in der Datenbankdatei... jetzt wo sies sagen, da merk ichs auch :)
wald vor lauter bäumen und so ;)


dlenz - Mi 17.01.07 12:48

Nun möchte ich die daten aus der DB-Tabelle über ein TdbQuery in einen Report übernehmen und eine Fehlermeldung sagt mir immer, dass er keine tabelle.dat findet, warum das nu wieder?


ZeitGeist87 - Mi 17.01.07 13:02

Hast du deinem


Delphi-Quelltext
1:
TdbTable1.TableName := Tabelle;                    


den Tabellen-Namen zugewiesen?

LG
Stefan


dlenz - Mi 17.01.07 13:35

ja, den habe ich zugewiesen


dlenz - Mi 17.01.07 14:58

okay, so gehts jetzt:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure Tfrm_main.BitBtn1Click(Sender: TObject);
 var verz : string;
begin
 verz := ExtractFilePath(ParamStr(0))+'db\db.tdbd';

 liste.TdbQuery1.Close;
 liste.TdbQuery1.DatabaseName := verz;

 liste.TdbQuery1.SQL.Clear;
 liste.TdbQuery1.SQL.Add('SELECT * FROM antragsgegner WHERE ID =' + DBEdit1.Text);

 showmessage(liste.TdbQuery1.SQL.text);

 liste.TdbQuery1.Open;

 liste.preview;
end;


danke nochmal an alle für die Mithilfe und vor allem an ZeitGeist! :)

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt