Entwickler-Ecke

Dateizugriff - UNLOGIG!!! beim entpacken mit TCabFile


mexx - Sa 03.07.04 21:02
Titel: UNLOGIG!!! beim entpacken mit TCabFile
Hi,

ich benutze die TCabFile Komponente zum entpacken von Cabinetdatein. Wenn ich den Aufruf starte, dass er die cab entpacken soll, macht er es. Starte ich aber den Aufruf nach einer anderen Procedure, entpackt er nichts. Woran liegt das? Ich habe es auspobiert. Es liegt wirklich an der folgenden Procedure. Wenn sie ausgeführt wird, entpackt er nichts. Aber welchen Einfluss nimmt der folgende Quelltext auf das Entpacken der Datei.


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:
75:
76:
77:
78:
79:
OpenDialog1.Execute;

//titanconf öffnen
  titanconf := TiniFile.Create(OpenDialog1.FileName);
  //werte auslesen
  host := titanconf.ReadString('DB','Host''');
  port := titanconf.ReadInteger('DB','port', port);
  user := titanconf.ReadString('DB','user''');
  password := titanconf.ReadString('DB','Password''');
  US := titanconf.ReadString('DB','UnixSocket''');
  DB := titanconf.ReadString('DB','db''');
  UNP := titanconf.ReadString('DB','UseNamedPipe''');
  USSL := titanconf.ReadString('DB','UseSSL''');
  compress := titanconf.ReadString('DB','Compress''');
  TS := titanconf.ReadString('DB','TrySockets''');
  titanconf.Free;


//Verbindung zur DB mit werten herstellen
FMySQL := TMySQLClient.create;

FMysql.Host := host;
FMysql.port := port;
FMySql.user := user;
FMysql.Password := Password;
FMySQL.UnixSocket := US;
FMysql.Db := db;
 IF UNP = 'ja' then
  begin
   FMysql.UseNamedPipe := true;
  end;
 IF UNP = 'nein' then
  begin
   FMysql.UseNamedPipe := false;
  end;
 IF USSL = 'ja' then
  begin
   FMysql.UseSSL := true;
  end;
 IF USSL = 'nein' then
  begin
   FMysql.UseSSL := false;
  end;
 IF compress ='ja' then
  begin
   FMysql.Compress := true;
  end;
 IF compress ='nein' then
  begin
   FMysql.Compress := false;
  end;
 IF ts = 'ja' then
  begin
   FMysql.TrySockets := true;
  end;
 IF ts = 'nein' then
  begin
   FMysql.TrySockets := false;
  end;

IF FMySql.Connect then
 begin

  MessageDlg('Datenbankverbindung konnte aufgebaut werden.', mtInformation, [mbOk], 0);
  FMySQL.destroy;
  Label10.Caption := 'OK';
  Form1.button1.Enabled := true;
 end
  else

    MessageDlg('Fehler in der Datenbankverbindung ' + FMysql.LastError, mtError, [mbOk], 0);


procedure install;
begin
  Form1.CABFile1.CABFile := 'data.cab';
  Form1.CABFile1.TargetPath := 'C:Windowsmp2ico';
  Form1.CABFile1.ExtractAll;
end;


Moderiert von user profile iconMotzi: Code- durch Delphi-Tags ersetzt.
Moderiert von user profile iconTino: Topic aus Sonstiges verschoben am Mo 19.07.2004 um 13:29


mstuebner - Sa 03.07.04 21:55
Titel: Re: UNLOGIG!!! beim entpacken mit TCabFile
Das...
mexx hat folgendes geschrieben:

OpenDialog1.Execute;

...steht ein bischen seltsam im Raum herum. Soll der nachfolgende Code der Inhalt der Execute sein? Poste den Code doch mal vollständig.


Martin77 - So 04.07.04 09:46


Delphi-Quelltext
1:
2:
3:
4:
5:
IF FMySql.Connect then
 begin

  MessageDlg('Datenbankverbindung konnte aufgebaut werden.', mtInformation, [mbOk], 0);
  FMySQL.destroy;

Das sieht auch merkwürdig aus ,wenn du connecten konntest zerstörst du deine Instanz, wenn es fehl schlug dann nicht? Oder gibst du das dann auch frei?


Keldorn - So 04.07.04 10:16

Hallo

ich hab von den cabs-zeugs keine ahnung, aber
Zitat:

Starte ich aber den Aufruf nach einer anderen Procedure ...
...
Form1.CABFile1.CABFile := 'data.cab';

sieht für mich so aus, als wenn man hier wieder mit relativen Pfadangaben arbeitet. Wenn sich das aktuelle arbeitsverzeichnis (z.B. durch den opendialog) ändert, wird dann deine cab.datei evtl nicht mehr gefunden, probier mal, hier den kompletten Dateinamen mit pfad anzugeben.

und beim opendialog fehlt das if

Delphi-Quelltext
1:
2:
3:
4:
  if opendialog1.execute then
    begin
      
    end

so wie du das das stehen hast, wird der code immer ausgeführt, egal, ob der user abbrechen geklickt hat oder nicht.

Mfg Frank


mexx - Mo 05.07.04 16:35

Hallo,

ich danke euch für eurer Interesse und Entschuldigung für die Unordnung im Quelltext.

Erklärung:
Es handelt sich dabei um eine Art Setup für die Installation einer Client-Server-Anwendung. Deshalb wird der Connect wieder geschlossen, weil lediglich die Richtigkeit der Daten für den connect überprüft werden. Die Procedure zum Benutzen der CAB ist eine Procedure, die durch einen Button ausgeführt wird, der erst benutzbar ist, wenn der Connect funktioniert. Die Rrocedure wird einfach aufgerufen. Rufe ich diese CAB-Procedure durch einen Button auf, den ich einfach irgendwo plaziere, funktioniert sie, sofern ich nicht die Procedure mit der Verbindung zur Datenbank aufrufe.

Fazit:
Ohne Connect-CHECK funktioniert die Install-Procedure
Mit Connect-CHECK funktioniert die Install-Procedure NICHT

FRAGE:
In welcher Weise nimmt die Procedure für die Verbindung zu der Datenbank Einfluss auf die Install-Procedure. Und zwar so, dass sie nicht funktioniert.

Vielen Dank, Gruß mexx


Keldorn - Mo 05.07.04 18:47

hast du auch ausprobiert, was ich geschrieben habe?


mexx - Mo 12.07.04 15:26

Hattest mit Deiner Idee recht! Durch den Open-Dialog war eine Pfadangabe der CAB-Datei notwendig.