Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-Query, Ergebnisse in DBGrid darstellen? (https://www.delphipraxis.net/51252-sql-query-ergebnisse-dbgrid-darstellen.html)

theBlind 9. Aug 2005 09:26

Datenbank: InterBase • Version: 6.x • Zugriff über: SQL Query

SQL-Query, Ergebnisse in DBGrid darstellen?
 
Hallo erstmal.

Also, ich will eine SQL query an meine IB Datenbank senden und die Ergebnisse dann in einem DBGrid darstellen. Ich hab die Datenbank schon an meinem Frontend angeschlossen (Also DataModule mit IBDatabase, IBTransaction, IBDataSet und DataSource <- das sind auch die Namen)
Dann hab ich eine IBQuery1, deren DataBase, DataSource und Transaction eingestellt sind.
Ein DBGrid ist auch vorhanden, das zeigt mir auch alle Daten aus der Datenbank an.

Meine Idee war, einen Button zu platzieren und im onClick Ereignis folgenden code zu verwenden:

Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
     IBQuery1.SQL.Clear;
     IBQuery1.SQL.Add('SELECT * FROM adresse ORDER BY vorname');
     IBQuery1.Open;
     DBGrid.Refresh
end;
Tut aber nicht :( EDIT: D.h. es gibt die Ergebnisse nicht in das DBGrid aus, dort sind noch immer die "alten" Daten, die beim öffnen des Frames aus der DB gelesen wurden.


Ich gehe mal davon aus, das meine Frage recht standart ist. Ich arbeite aber erst seit weniger als einer Woche mit Delphi/Interbase und muss das wegen meines Praxissemesters ziemlich crashkursmässig lernen und dazu auch ohne Ansprechpartner (Stelle wurde gestrichen...)
Sprecht bei der Antwort bitte laut und deutlich und geht einfach davon aus, das ich ein wenig doof bin, dann passt das schon :)


-theBlind

Sharky 9. Aug 2005 09:29

Re: SQL-Query, Ergebnisse in DBGrid darstellen?
 
Hai theBlind,

versuche doch einfach mal vor dem neu setzen des SQL-Kommandos ein IBQuery1.Close (also vor deinem SQL.Clear).

Jelly 9. Aug 2005 09:55

Re: SQL-Query, Ergebnisse in DBGrid darstellen?
 
Zitat:

Zitat von theBlind
Tut aber nicht :(

WAS tut nicht :?:

theBlind 9. Aug 2005 10:03

Re: SQL-Query, Ergebnisse in DBGrid darstellen?
 
Also das IBQuery1.Close verändert im Verhalten nichts.

Zitat:

Tut nicht
Sorry für die unklarheit. Es gibt die Suchergebnisse nicht in dem DBGrid aus. Der Befehl wird, glaube ich, ausgeführt. Das Programm stürzt auch nicht ab oder so was.

Jelly 9. Aug 2005 10:06

Re: SQL-Query, Ergebnisse in DBGrid darstellen?
 
Hab ich das oben richtig gelesen, dass du die Eigenschaft Datasource von deiner IBQuery gesetzt hast? Lass die mal weg. Es reicht aus die Eigenschaft Dataset von deiner TDatasource zu setzen.

Luciano 9. Aug 2005 10:09

Re: SQL-Query, Ergebnisse in DBGrid darstellen?
 
Hi,

Ich kenen die IBQuery nicht aber vielleicht änderst du mal deine SQL-Abfrage, vielleivht fragst du 2 mal das gleiche ab. SELECT VORNMAE FROM ADRESSEN <-- was macht er dann?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
     IBQuery1.Close
     IBQuery1.SQL.Clear;
     IBQuery1.SQL.Add('SELECT VORNAME FROM ADRESSEN');
     IBQuery1.Open;
end;
So sollte das doch funktionieren

Greets

r_kerber 9. Aug 2005 12:10

Re: SQL-Query, Ergebnisse in DBGrid darstellen?
 
Zitat:

Zitat von theBlind
Dann hab ich eine IBQuery1, deren DataBase, DataSource und Transaction eingestellt sind.
Ein DBGrid ist auch vorhanden, das zeigt mir auch alle Daten aus der Datenbank an.

Das könnte der Fehler sein. Womit ist das DBGrid verbunden? Und in der IBQuery sollte nicht die DataSource eingestellt sondern umgekehrt in der DataSource sollte auf die IBQuery bezogen werden. Und das DBGrid sollte dann auf die DataSource zeigen

theBlind 9. Aug 2005 13:23

Re: SQL-Query, Ergebnisse in DBGrid darstellen?
 
Das DBGrid hat jetzt als DataSource DataSource, die IBQuery hat als DataBase DataBase, DataSource ist leer.

Die DataSource hängt an IBDataSet und das teilt sich mit zwei anderen IBDataSets eine IBTransaction, die wiederum an IBDataBase hängt. Bei IBDataBase ist IBTransaction als default transaction eingetragen.

Das setup funktioniert so wie es ist, wenn ich daten verändern, schreiben, lesen will. Was mir eigentlich irgendwie fehlt ist das ich das DBGrid auf die Ergebnistable des Query setzen kann.

Danke für die Vorschläge, bitte weiterschlagen :)

r_kerber 9. Aug 2005 14:38

Re: SQL-Query, Ergebnisse in DBGrid darstellen?
 
Geht die DataSource nicht an die Query?

theBlind 9. Aug 2005 15:33

Re: SQL-Query, Ergebnisse in DBGrid darstellen?
 
DataSource hat bei mir im ObjektInspektor die Felder
-AutoEdit
-DataSet
-Enabled
-Name
-Tag
Wie "geht die an die query"?

Die IBQuery hat bei DataSource nichts eingetragen, wie mir empfohlen wurde.

Active: false
Params und SQL leer

Wenn ich auf Generator Field gehe kommt leere SQL Anweisung, aber das hab ich als nicht schlimm empfunden, da die Anweisung ja leer ist.

Jelly 9. Aug 2005 15:37

Re: SQL-Query, Ergebnisse in DBGrid darstellen?
 
Zitat:

Zitat von theBlind
DataSource hat bei mir im ObjektInspektor die Felder
-AutoEdit
-DataSet
-Enabled
-Name
-Tag
Wie "geht die an die query"?

TQuery rsp. TIBQuery sind in irgendeiner Generation von TDataset abgeleitet. Im Datasource Modul musst du also als Dataset dein TIBQuery Objekt eintragen.

theBlind 9. Aug 2005 15:48

Re: SQL-Query, Ergebnisse in DBGrid darstellen?
 
Kommt die Query in eine Form oder ins Datenmodul?

Gibt es da nicht irgendwo ein tutorial mit Schritt für Schritt Anweisungen? :wall:

r_kerber 9. Aug 2005 16:05

Re: SQL-Query, Ergebnisse in DBGrid darstellen?
 
Zitat:

Zitat von theBlind
Kommt die Query in eine Form oder ins Datenmodul?

Das bleibt letzendlich Dir überlassen. Aber für ein ordentliches Design würde ich alle DB-Elemente bis hin zur TDataSource dort eintragen. Dann hast Du eine zentrale Stelle dafür.

theBlind 15. Aug 2005 08:15

Re: SQL-Query, Ergebnisse in DBGrid darstellen?
 
*freu*

Ich habs gelöst. :bounce1: Ich brauchte eine DataSource, die als DataSet die Query hat... jetzt hab ichs kapiert.
Danke für die vielen Vorschläge!

Also, nochmal langsam, zum mitschreiben, für die zwei Leuts, die es wie ich auch nicht kapiert haben:

DataModule:
1. Database (Adresse der DB eintragen)
2. Transaction (In der Database als default Transaction eintragen, die Database hier unter DefaultDatabase eintragen
3. Query (Hier die Database eintragen, sonst nüscht, wenn das SQL zur Laufzeit eingegeben wird oder sonstwie vom Himmel fallen wird)
4. DataSource (Hier als DataSet die Query eintragen)

Programm-Form:
5. Die Query mit
Code:
DataModule.Query.Close;    //Anstelle von DataModule natürlich den Namen des DataModuls eintragen,
DataModule.Query.SQL.Clear; //ebenso für die Query
DateModule.Query.SQL.Add := ('Hier SQL Statement');
DataModule.Query.Open;
irgendwo intitialisieren (zB von einem Button aus oder so)
6. Entweder das ausgabe Grid von vorneherein auf die Query-DataSource einstellen oder zur Laufzeit per
Code:
 DBGrid.DataSource := DataModule.QueryDataSource;
Das passt ganz gut direkt unter den Code oben.

Eh voilá, das DBGrid zeigt die ergebnisse der query an. Es herrscht freude.
Wer will kann natürlich auch mit einer Edit-Komponente und
DataModule.IBQuery.SQL.Text := EditKomponente.Text; //anstelle der IBQuery.SQL.Add anweisung
eine kleines Interface bauen (mit SQL kann mensch sooo schön leicht eindruck schinden :roll: )

Nochmal Danke an alle!
-theBlind

@Mods: kann jemand den titel des treads mit gelöst erweitern? Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:56 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