Entwickler-Ecke

Datenbanken - SQL-Script als Ressource


UGrohne - So 26.01.03 19:26
Titel: SQL-Script als Ressource
So, Leute,
ich hab hier ein SQL-Script, das eine Datenbank erzeugen soll, das Teil ist halt ziemlich lang, aber als einzelne Datei will ichs nicht haben. Ich dachte mir, ich mach das als Ressource da rein.

Hab also eine .rc-Datei erzeugt mit

Quelltext
1:
SQLScript RCDATA SQLScript.txt                    

Dann in die Unit eingebunden. Und jetzt die Frage: Wie lass ich das Teil ausführen, d.h. wie kriege ich das aus der Ressource raus und mit welcher Komponente kann man am besten solche komplett-Scripts durchziehen. Hab an IBSQL gedacht, aber wie hol ichs aus der Ressource raus.

Oder gibts bessere Möglichkeiten?

Gruß


Udontknow - Mo 27.01.03 11:25

Hi!

Die Klasse TResourceStream sollte dir weiterhelfen.

Cu, :)
Udontknow


UGrohne - Mo 27.01.03 13:22

Hab mir das jetzt mal angeschaut und eine Variable TResourceStream erstellt, diese mit Create aufgerufen und das Zeug eingetragen. Aber er bringt mir immer den Fehler, Ressource nicht gefunden.

Kannste mir vielleicht mal ein kleines CodeBeispiel posten, ich häng hier grad irgendwie ein bisschen :(

gruß


Udontknow - Mo 27.01.03 17:43

Klar, kein Problem.

Also, ich gehe folgendermassen vor:

Ich habe eine Textdatei namens Test.txt, in dieser steht "Dies ist ein Test!".
In einer weiteren Datei lege ich, wie du es schon gemacht hast, die zu kompilierenden Ressourcen fest. Ich habe dazu eine Datei testres.txt mit dem Inhalt "test RCDATA test.txt" angelegt.

Mit dem Programm BRCC32 kompiliere ich nun die Resource-Datei:

Quelltext
1:
BRCC32.exe testres.txt                    


Daraufhin wird eine Datei mit Namen testres.res erzeugt. Diese haue ich nun einfach in meine Unit:

Quelltext
1:
{$R testres.res}                    


Anschliessend kann ich den Inhalt der Resource folgendermassen abrufen:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button1Click(Sender: TObject);
var Stream:TResourceStream;
begin
  Stream:=TResourceStream.Create(hInstance,'test',RT_RCDATA);
  try
    Memo1.Lines.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;


Ich denke, du hast den Fehler gemacht, anstelle des ursprünglichen Ressourcennamens ('test') den Namen des erzeugten Files ('testres') an den Stream zu übergeben.

Cu,
Udontknow


UGrohne - Mo 27.01.03 17:48

Ne, ich hab nen ganz anderen blöden Fehler gemacht. Hab die Prozedur ursprünglich im Mainform gehabt, sie dann aber in ein Unterform kopiert, aber vergessen, die Resource da einzubinden *g*

Trotzdem danke....