Autor Beitrag
madmat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Do 25.07.02 23:46 
Hi @ all,

wie kann man z.B. eine leere Access DB (als Absicherung) mit in eine EXE Datein einbinden und bei Bedarf aus der EXE auf Platte kopieren ?
Ich hab die DB jetzt mit brcc32.exe in eine *.res Datei umgewandelt und nun ?
Wie kann ich sie jetzt in die EXE einbinden und z.B auf Buttonclick wieder auf dem Datenträger speichern ?
Die RES Datei hab ich jetzt per
ausblenden Quelltext
1:
2:
3:
implementation
{$R *.DFM}
{$R DBRES.res}

eingebunden.
Die Extractionsfunktion hab ich mir zusammengesucht , die sieht jetzt ungefähr so aus :

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function ExtractRes(ResType, ResName, ResNewName: string): Boolean;
var
  Res: TResourceStream;
begin
  Result := False;
  Res := TResourceStream.Create(Hinstance, Resname, PChar(ResType));
  try
    Res.SavetoFile(ResNewName);
    Result := true;
  finally
    Res.Free;

           end;
    end;

Aber wie rufe ich das Ganze jetzt auf ? Bin ein wenig ratlos,
Danke im Voraus..

_________________
mfg
madmat
Life is what happens while you ´re making other plans
hitstec
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 295



BeitragVerfasst: Fr 26.07.02 02:09 
Einfacher gehts so: Mit brcc32 die Datei kompilieren, aber auf diese Weise

ausblenden Quelltext
1:
ACCESSDB RCDATA C:\DBRES.dbf					

oder so ähnlich, wichtig ist, dass du als Typ RCDATA nimmst.
dann ins Projekt einbinden

ausblenden Quelltext
1:
{$R DBRES.res}					


und die Funktion um die Datei zu extrahieren:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function ExtRes(ResName,sZiel: string): Bool;
var stmResource: TResourceStream;
begin
 result:=true;
 try
  stmResource:=TResourceStream.Create(0,ResName,RT_RCDATA);
  try
   stmResource.SaveToFile(sZiel);
  except
   result:=false;
  end;
  stmResource.free;
 except
  result:=false;
 end;
end;


Und zur Laufzeit die Datei entpacken:

ausblenden Quelltext
1:
if ExtRes('ACCESSDB','C:\dtabase.dbf') then ShowMessage('Datei extrahiert.');					


Eine Idee wäre die Datei zusätzlich mit ZLib zu komprimieren und zur Laufzeit zu dekomprimieren. So würde man noch die EXE-Datei kleiner halten.
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Fr 26.07.02 15:41 
oder du verschmilzt die DB mit deiner EXE.

hier das Tut: www.delphi-treff.de/...ne/index.php4?id=133

_________________
In the beginning was the word.
And the word was content-type: text/plain.
cbs
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207
Erhaltene Danke: 1



BeitragVerfasst: Fr 26.07.02 15:51 
tag auch

matze hat folgendes geschrieben:
oder du verschmilzt die DB mit deiner EXE

funktioniert dann aber noch die EXE? ich glaube nicht!
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Fr 26.07.02 18:46 
doch !! Das hauptfile bleibt ausführbar !!!

EDH hat folgendes geschrieben:
Nach dem verschmelzen ist die Hauptfile immer noch voll ausführbar (wenn sie keinen CRC Check oder so was besitzt) und die 2. Datei in der Hauptdatei drin.

_________________
In the beginning was the word.
And the word was content-type: text/plain.