AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tutorial - Query

Ein Thema von davar · begonnen am 23. Okt 2005 · letzter Beitrag vom 3. Nov 2005
Antwort Antwort
davar

Registriert seit: 4. Feb 2005
311 Beiträge
 
Turbo Delphi für Win32
 
#1

Tutorial - Query

  Alt 23. Okt 2005, 12:54
Datenbank: Paradox • Version: 7 • Zugriff über: BDE
Hallo Leute,

wenn auch nur ganz langsam geschehen, habe ich begriffen, dass man sich irgendwann mal mit querys auseinandersetzen sollte.

Ich habe eine Paradox-Datenbank und möchte gern mit Querys darauf zugreifen, um z.B. für Quickreports o.ä. nur bestimmte Daten aus der Datenbank auszulesen, die auch noch in verschiedene Tabellen verteilt sind.

Wo finde ich ein Tuto o.ä., was mir einen Query gut erklären kann, bzw. gibt es eine andere Möglichkeit als Querys für den oben beschriebenen Fall?

Bin für jede Hilfe dankbar.

MfG

davar
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Tutorial - Query

  Alt 26. Okt 2005, 17:39
Wenn Du mit "Query" jetzt allgemein die "SQL-Syntax" meinst, habe ich hier ein paar Seiten, auf denen ich schon nützliche Infos sammeln konnte:

http://www.sql-und-xml.de/xml/index.xml
http://aam.ugpl.de/sql_hilfe
http://www.w3schools.com/sql/sql_join.asp


Die Komponente "Query" kenne ich zwar nur aus der Benutzung mit anderen DBs, aber vom Prinzip her ist das sicherlich gleich:

Du erstellst per Komponente oder zur Laufzeit die Query-Komponente und weist dieser die Datenbank zu.
Wenn du im Thread per Query Daten auslesen willst, musst du unbedingt auch eine eigene Session zuweisen.

Die Query fütterst Du dann mit dem SQL-Befehl:
Query.SQL.Text:= 'SELECT .... '); oder zeilenweise aufgebaut:
Delphi-Quellcode:
Query.SQL.Add('...');
Query.SQL.Add('...');
Den SELECT-Befehl führst du dann mit
Query.Open; aus.

Dann kannst Du entweder manuell zeilenweise eine gewünschte Komponente mit den Daten füllen, oder per DataSource eine DBKomponente verknüpfen. Letzeres ist natürlich der einfachere Weg.


So, ich hoffe du kannst was davon gebrauchen

Gruß
Pfoto
Jürgen Höfs
  Mit Zitat antworten Zitat
davar

Registriert seit: 4. Feb 2005
311 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Tutorial - Query

  Alt 26. Okt 2005, 21:59
Hallo,

danke für die Antwort.

Die SQL-Syntax ist eher weniger ein Problem, habe schon die eine oder andere Abfrage mit PHP gemacht.

Viel mehr hätte ich mir so ein umfangreiches Tutorial gewünscht, in dem ausführlich dargestellt wird, was ich wo wie einstellen muss, um die Komponente TQuery zu benutzen, wie ich z.B. die Datenbank erstelle, ob ich eine Query auch neben einer Tabelle benutzen kann usw.. Bisher arbeite ich mit Tabellen, aber da sind die Abfragen schon umständlich.

MfG

davar
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#4

Re: Tutorial - Query

  Alt 26. Okt 2005, 23:39
Denkanstöße
TQuery unterscheidet sich nicht so großartig von TTable, wie Du vielleicht annimmst. Stell Dir TQuery als TTable vor, mit dem Unterschied, das Du bei TQuery die Struktur/den Aufbau der zugrundeliegenden Tabelle selbst über die Eigenschaft/das Property "SQL" und die darin enthaltene Abfrage (engl. Query) bestimmst. Nimm weiterhin an, das eine Query in der SQL-Logik aus den physischen Tabellen der Datenbank eine temporäre "AntwortDatenMengenTabelle" erzeugt. Der Vorteil einer Query ist also im Wesentlichen der, daß Du mit ihr die feste Tabellenstruktur Deiner DB überwinden kannst und zur Laufzeit Deines Programmes genau die Tabelle aus den physisch vorhanden Tabellen Deiner DB erzeugen kannst, die Du gerade benötigst - Schlaraffenland also
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
davar

Registriert seit: 4. Feb 2005
311 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Tutorial - Query

  Alt 29. Okt 2005, 23:00
hmmmmmmm........

ich kann mich wohl nicht ganz ausdrücken..

Die Syntax und die Möglichkeiten mit TQuerys sind mir mehr oder weniger bekannt.

Mir geht es eigentlich nur um einen kleinen Einstieg "TQuery für ganz doofe". Quasi eine Schritt für Schritt-Anleitung...

Zwischenzeitlich habe ich mal versucht, es selbst zu verstehen, hänge aber immer noch dran.

Wenn ich jetzt über den Objektinspektor unter SQL " SELECT * FROM test " eintrage (DB test wurde natürlich angelegt), bekomme ich den Inhalt der Datenbank und kann sie in einer Listbox anzeigen.

Wenn ich jetzt jedoch folgenden Code eingebe, kommt die Fehlermeldung "Ungültiges Schlüsselwort Symbol-String: FROM Zeilennnummer 1' ".

Delphi-Quellcode:
query1.close;
query1.SQL.clear;
query1.SQL.add('SELECT Vorname FROM `test`;');
query1.ExecSQL;

MfG

davar
  Mit Zitat antworten Zitat
Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Tutorial - Query

  Alt 29. Okt 2005, 23:16
Moin moin,
dann füg doch das selbe Statement wie im OI auch zur Laufzeit hinzu...
Delphi-Quellcode:
//..
query1.SQL.add('SELECT Vorname FROM test');
//..
[EDIT]
bei select Statements solltest du statt query1.ExecSQL besser query1.Open nehmen
(siehe Delphi Hilfe)
[/EDIT]
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat
davar

Registriert seit: 4. Feb 2005
311 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Tutorial - Query

  Alt 2. Nov 2005, 22:37
Hallo,

also der Verzweiflung komme ich immer einen Schritt näher

Jetzt hänge ich hier dran:

Delphi-Quellcode:
1: DBs.QHTrHin.close;
2: DBs.QHTrHin.SQL.clear;
3: DBs.QHTrHin.Params.ParamValues['datum'] := datetostr(date);
4: DBs.QHTrHin.SQL.add('SELECT * FROM DBs\Flugdate WHERE DatumHin = :datum');
5: DBs.QHTrHin.open;
6: Showmessage(DBs.QHTRhin.Fieldbyname('Datum').AsString);
Wenn ich das so ausführe, kommt die Fehlermeldung "Parameter 'datum' nicht gefunden.", und zwar in der Zeile 3. Wenn ich die Zeile 3 weglasse, kommt die Meldung "Feld 'datum' nicht gefunden".

Mit "DBs.QHTrHin.Params.ParamByName('datum').AsString: = datetostr(date);" habe ich es auch schon probiert, geht auch nicht.

Wenn ich aber die 3. Zeile weglasse und die SELECT-Abfrage ohne WHERE durchlaufen lasse, geht es ohne Probleme.


Also wer kann mir helfen?

MfG

davar
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#8

Re: Tutorial - Query

  Alt 2. Nov 2005, 22:48
heisst das feld datum oder datumhin ?
  Mit Zitat antworten Zitat
Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Tutorial - Query

  Alt 2. Nov 2005, 23:57
Moin moin,
Zitat von davar:
Wenn ich aber die 3. Zeile weglasse und die SELECT-Abfrage ohne WHERE durchlaufen lasse, geht es ohne Probleme.
Kleiner Tip: vertausche die Zeilen 3 und 4 einmal...
Du willst einem Parameter einen Wert zuweisen, der aber gar nicht existiert. Das kann dann so auch nicht funktonieren.
Erst wenn du dein Statemnt zugewiesen hast, ist auch der Parameter bekannt.

Gibt es bei TQuery nicht auch AsDateTime? dann brauchst du dein Datum nicht noch in einen String umwandeln...
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Tutorial - Query

  Alt 3. Nov 2005, 06:40
Zitat von x000x:
... Gibt es bei TQuery nicht auch AsDateTime? dann brauchst du dein Datum nicht noch in einen String umwandeln...
Hai davar,
wie x000x richtig anmerkte solltest Du zum setzen von Parametern immer versuchen den richtigen Datentyp zu verwenden.
Dies macht es nicht nur leichter für dich sondern Du hast durch Typumwandlungen auch immer eine unnötige Fehlerquelle erzeugt.

Dein Code könnte dann zum Beispiel so aussehen:
Delphi-Quellcode:
procedure TForm1.btn_SqlTestClick(Sender: TObject);
begin
  with DBs.QHTrHin do
  begin
    Close; // Verbindung schliessen
    ParamCheck := True; // Parameter benutzen
    SQL.Text := 'SELECT * FROM DBs\Flugdate WHERE DatumHin = :datum'; // SQL setzen
    Params.Items[0].AsDate := date; // Ersten Parameter setzen
    Open; // Abfrage durchführen
    ShowMessage(FieldByName('Datum').AsString); // Feld "Datum" als String
    Close; // Und nach dem arbeiten wieder schliessen
  end;
end;
Gerade bei Datumsfeldern kannst Du dir bei SQL-Abfragen ganz schnell ein Eigentor schiessen.
Jede Datenbank erwartet ein Datum, wenn es als String in dem Query steht, in dem vom DBMS vorgegebenen Format.
Bei mySQL wäre das: YYYY-MM-DD
Bei MSSQL ist es das in den Regionaloptionen des Rechners auf dem der Server läuft eingestellen Format
usw.
usw.

Datum solltest Du alles daran setzen ein Datum immer als TDate bzw. TDateTime an die DB zu senden.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz