Entwickler-Ecke

Datenbanken - Gespeicherte SQL-Datei nutzen/aufrufen


Miephos - Di 11.03.03 23:11
Titel: Gespeicherte SQL-Datei nutzen/aufrufen
Ich habe mit der Datenbankoberfläche ein paar SQL-Datei erstellen wollen. Schon bei dem Erstellen fuktioniert einiges nicht.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Select
 Mitglieder,
 Personen

From
 Register

Order By
 Personen


Ich habe die Datei genau in dem Verzeichnis gespeichert in dem die Tabelle ist, wenn ich aber auf "SQL-Ausführen" clicke kommt der Fehler "kann Tabelle nicht finden". versteh ich nicht????

Selbst wenn ich die Datei nun habe, wie kann ich die Abfrage starten?? Welchen Code brauche ich damit dies passiert was ich eigentlich in das SQL geschrieben habe.
Newbie-Frage ich weiß, bin aber erst noch beim lernen.

CU Miephos


infomio - Di 11.03.03 23:41

Erzähl mal: was für ne Datenbank? wie schauts mit deinem Quellcode aus?
welche Komponenten verwendest du?


infomio - Di 11.03.03 23:46
Titel: sorry
ich habs missverstanden... du arbeitest nur mit der Datenbankoberfläche.
Der Fehler kommt nicht,wenn du einen Eintrag in der BDE hast und dann den Alias auswählst.


bis11 - Mi 12.03.03 08:59

Ich nehme mal an, dass Du für Deine Paradox-Datenbank keinen Alias vergeben hast. Deshalb musst Du Dein Script ungefähr so ändern :

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Select 
Mitglieder, 
Personen 

From 
"C:\Test\Register.db"

Order By 
Personen


Für C:\Test gibst Du halt Dein Verzeichnis ein, wo Deine DB abgelegt ist.


kiwicht - Mi 12.03.03 09:09

Hallöle..

geht auch anders, ohne Aliase, und ohne das ich jedesmal den kompletten Pfad eingeben muss:

Einfach deiner Query-Eigenschaft "DATABASENAME" das Verzeichnis zuordnen, in dem deine DB liegt (NUR das Verzeichnis -> ExtractFilePath!)
Und dann, in deinen SQL-Anweisungen, reichts wenn du den DB-Namen selber angibst, ohne Endung, also so wie du es hattest:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
1. Query.DataBaseName := 'C:\Datenbanken';

2. Select 
Mitglieder, 
Personen 

From 
Register 

Order By 
Personen 

(Register steht in diesem Fallle für deine DB, also register.db!)


mfg


bis11 - Mi 12.03.03 09:11
Titel: Re: Gespeicherte SQL-Datei nutzen/aufrufen
Miephos hat folgendes geschrieben:
Ich habe mit der Datenbankoberfläche ein paar SQL-Datei erstellen wollen. Schon bei dem Erstellen fuktioniert einiges nicht.

Kiwicht, hast Du das gelesen ? Er ist noch nicht beim programmieren in Delphi.

Moderiert von user profile iconTino: Quote-Tag geschlossen.


kiwicht - Mi 12.03.03 09:16

hm, kennt ihr das berühmte "neiiiiin" von homer? das ist jetzt angebracht...

sorry.. :oops:


Miephos - Mi 12.03.03 23:13

Ich benutzt die BDE von Borland. Das mit dem Pfad habe ich verstanden, aber was immer noch mein Problem ist, wei ich die abgespeicherten SQL-Dateien nutzen kann.
Ich schreibe ein SQL:

Quelltext
1:
2:
3:
4:
5:
Select
 Mitarbeiter,
 Raum
From
 Kunden

dies speichere ich unter abfrage1.sql ab, wie kann ich nun die Abfarage in den Quelltext einbinden und abfargen???? So könnte man sich ein kleine Sammlung an SQLDateien anlegen, und so brauche ich sie nur laden, und gut ist.

Cu Miephos


hansa - Do 13.03.03 00:12

Miephos hat folgendes geschrieben:
Ich benutzt die BDE von Borland. Das mit dem Pfad habe ich verstanden, aber was immer noch mein Problem ist, weil ich die abgespeicherten SQL-Dateien nutzen kann.
Ich schreibe ein SQL:

Quelltext
1:
2:
Select
 Mitarbeiter, Raum From Kunden

Brauche Informationen über die verwendeten Komponenten.

Moderiert von user profile iconMarc: Quote-Tag geschlossen.


bis11 - Do 13.03.03 07:22

Du musst in Deinem Programm ein TDBgrid, TDatasource, TQuery Komponenten ziehen. Diese drei verknüpft du miteinander und schreibst dann folgenden Code in ein ButonClick rein :


Quelltext
1:
2:
3:
4:
5:
with query1 do begin
  Sql.Clear;
  Sql.LoadFromFile('C:\Abfrage1.Sql');
  Open;
end;


So dann wird Deine SQL-Datei ausgeführt und die Daten aus der Tabelle in einen DBGrid angezeigt.


kiwicht - Do 13.03.03 09:34

Gibt es denn auch die Möglichkeit, in einer Datei mehrere SQL-Anweisungen zu speichern, um dann aus diesen eine Auszuwählen?

(Ähnlich dem INI-Prinzip also.)


bis11 - Do 13.03.03 09:41

Sowas ist mir jetzt nicht bekannt. Dann musst Du die SQL-Befehle in eine INI-Datei schreiben.


Miephos - Do 13.03.03 10:29

Damit ist mir doch schon geholfen. vielen Dank.

Cu Miephos


kiwicht - Do 13.03.03 15:36

bis11 hat folgendes geschrieben:
Sowas ist mir jetzt nicht bekannt. Dann musst Du die SQL-Befehle in eine INI-Datei schreiben.


um darauf nochmal zurückzukommen, ich hoffe das liest jetzt noch einer :roll: .... und zwar klappts mit INI´s doch auch nur über den Umweg mit Variablen, oder?
Hab nämlich folgendes gemacht:

Zitat:
QueryFirmendt.SQL.Text := ini.ReadString('firmendt','unfilter','');


und das geht nicht: "Keine SQL-Anweisung gefunden!".

... Vermutung liegt nahe: Muss erst aus der INI-Lesen, in einer Variable speichern und dann dem SQL-Text zuweisen. Das ist aber schon wieder zu umständlich. Kann ich die SQL-Anweisung nicht direkt übergeben, so wie bei SQL.LoadFromFile??

mfg
der kiwicht


bis11 - Do 13.03.03 15:44

Da hat er probleme mit der Konvertierung. Was ist wenn Du es vor in eine String-Variable schreibst ?


kiwicht - Do 13.03.03 15:48

jepp, hatt ich gerade probiert... geht auch nicht. Gleiche Fehler. Dann bleib ich wohl erst mal bei der statischen Angelegenheit... Schwamm düber und trotzdem danke... :)


bis11 - Do 13.03.03 16:16

Probiere mal bitte folgendes aus :


Quelltext
1:
QueryFirmendt.SQL.Add := ini.ReadString('firmendt','unfilter','');                    


Und auch eventuell falls es nicht funktioniert nochmal mit einer Variable.


kiwicht - Do 13.03.03 19:43

Hi Bis11,

nimms mir nich übel, aber ich glaub das brauch ich nicht ausprobieren, weil muss es, wenn, dann so heißen:

SQL.Add (' ..... ');

bzw

SQL.Text := ('.....');

Oder meintest du Text? Jedenfalls hab ich jetzt alles durch, einmal mit Add, mit Text und mit "Variable davor deklarieren".... geht alles nicht.
Vielleicht liegt es daran, wie die Variablen aus der INI-Datein übernommen werden??

mfg / thx

kiwicht


bis11 - Do 13.03.03 20:37

Ganz dickes Sorry, ich habe etwas vergessen :oops:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Button1Click(Sender: TObject);
var
  ini : TIniFile;
begin
  ini := TIniFile.Create('C:\test.ini');
  with ADOQuery1 do begin
    Sql.Clear;
    Sql.Add(ini.ReadString('TEST','Test1',''));
    Sql.SaveToFile('C:\Test.sql');   <--- zum nachkontrollieren ob er es richtig macht
    Open;  <--- siehe Ini-File
  end;
end;


Meine Test.ini Datei :

Zitat:

[TEST]
Test1=SELECT * FROM anwendungen;


So funktioniert es jetzt, er übergibt richtig die SQL-Anweisung. Ich hatte die Klammern vergessen.


kiwicht - Fr 14.03.03 00:48

np


sieht erstmal vielversprechend aus, werd ich gleich morgen früh probieren, nur eine Frage:

Sql.SaveToFile('C:\Test.sql');

Zum Nachprüfen? Sehe ich das richtig das hier die Ergebnis-Menge gespeichert wird? Wenn ja, wozu dann, da ich die Ergebnis-Menge doch eh im Grid (...) anzeigen lasse? :?

danke erstma,

mfg


bis11 - Fr 14.03.03 08:42

Da wird nicht die Ergebnismenge gespeichert sondern Dein SQL-Skript.


kiwicht - Fr 14.03.03 09:49

äh, klar, logisch eigentlich

LoadFromFile <-> SaveToFile ... egal ;D

Aaaalso, zu deinem Script:

Daaaaaaankäääää! :D funzt,

und der Fehler lag in der "Addressierung" meiner SQL-Text.InI, erst mit absoluter Addressierung wie bei dir (c:\sql-text.ini) findet er die Datei auch...

thx nochma
mfg
kiwicht


// edit:
btw:
relative Adressierung wäre dann so:
.\sql-text.ini -> Datei liegt im aktuellen Verzeichnis, also da wo das Programm gerade ausgeführt wird...