![]() |
Datenbank: Paradox • Version: 7 • Zugriff über: ADO ?!
DBgrid sortieren
Guten Tag,
bin gerade dabei eine kleine Adress-Datenbank als Projektarbeit zu schreiben. Man kann bereits Werte eingeben und die komplette Datenbank speichern/Laden. Allerdings wäre es genial wenn ich auch noch meine Werte im DBgrid sortieren lassen könnte; also wenn man auf den jeweiligen Title clickt wird die Spalte sortiert nach A-Z ; Z-A. Meine Realisierung funktioniert leider überhaupt nicht, dazu muss ich sagen das wir in der Schule nicht mit "komplexen" Datenbanken arbeiten, außerdem kenn ich mich (Bis Jetzt?!) nicht mit SQL aus. Für das Ereignis "TitleClick" habe ich folgende Procedure: (Aus dem Forum) als Varriablen sind
Delphi-Quellcode:
Dessweiteren habe ich die Komponente ADODataSet1 eingefügt und mit der DataSource verbunden.
sSortColumn: String;
bSortOrder: Boolean; // global festgelegt. procedure TForm5.DBGrid1TitleClick(Column: TColumn); begin if Column.FieldName <> sSortColumn then begin sSortColumn := Column.FieldName; end else begin bSortOrder := not bSortOrder; end; ADODataSet1.Close; if bSortOrder then begin ADODataSet1.CommandText := 'SELECT * FROM Table ORDER BY ' + sSortColumn; end else begin ADODataSet1.CommandText := 'SELECT * FROM Table ORDER BY ' + sSortColumn + ' DESC'; end; ADODataSet1.Open; //showmessage(column.fieldname); end; ICh benutze Paradox7 sowie TQuerry, wenn ich das jetzt alles Starte kommt die Fehlermeldung: Fehlende Connection oder ConnectionString! Wie schaffen ich das es mir das DBGrid sortiert ausgiebt?! Herrzlichen Dank für eure Hilfe, Mfg ice [edit=Sharky]Habe den Code mal mit den richtigen Tags versehen. Mfg, Sharky[/edit] |
Re: DBgrid sortieren
Hallo und herzlich willkommen in der DP!!! :dp:
Du must deine Datenbasis siortieren, dann wird sie auch so im Grid angezeigt. So weit ich weiß, geht das über das Grid selber nicht. Gruß oki |
Re: DBgrid sortieren
@ oki
Die Sortierung über die Datenbasis versucht icebreaker ja schon ;) @icebreaker EIn ADODataSet allein reicht nicht aus, um auf irgendwelcche Daten zuzugreifen, Die Fehlermeldung sagt ja schon eindeutig: es ist in den Eigenschaften KEIN ConnectionString einmgetragen :!: Vorgehensweise: 1) ADODataSet.ConnectionString -> Doppelklick in das leere Feld (oder auf den Ellipsenschalter) 2) Im Dialog-Fenster 'Verbindungsstring verwenden' -> Klick auf Button 'Aufbauen' 3) im Dialog Datenverknüpfungseigenschaften: - Provider -> Microsoft JET 4.0 OLE DB Treiber - Verbindung -> nach der AccessTabelle suchen (Klick auf den ...-Button) danach auf VErbindung testen Wenn das alles soweit funzt, dann sollte auch die ADODataSet-Abfrage funktionieren ... |
Re: DBgrid sortieren
Es geht nicht um Access, sondern um Paradox (laut Threadtitel) ;)
|
Re: DBgrid sortieren
Erstmal: Ganz leib das ihr mir gleich so helft.
Hab das alles so gemacht, anstatt bei Verbindungen Acess Datei habe ich meine Paradox 7 genommen ("adressen.db"). Doch wenn ichs sortieren will kommt folgende Fehlermeldung: Im Project Project1.exe ist eine Exeption der Klasse EOleExeption mit der Meldung " Nicht erkennbaresDatenbbankformat 'C:\.....\adressen.db" aufgetreten. Beim Verbindungstest sagt er auch gleich: Nicht erkennbares Datenbankformat. Eine Acces Datenbank konnte ich nicht anlegen, da zeigt er ne Fehlermessage mit dem Inhalt: -2147221164. Mfg ice |
Re: DBgrid sortieren
nimm statt der AdoDataSet eine TQuery...binde dann diese Query an Dein Grid über eine TDatasource.
|
Re: DBgrid sortieren
Hmm also es funktioniert nicht, außerdem habe ich es wahrscheinlich falsch umgesetzt.
Also ich habe: 1.Mein ADODataset durch ein weiteres Tquerry (querry2) ersetzt. 2.Das querry2 an die datasource1 angebunden 3.Den Quelltext wie folgt verändert:
Delphi-Quellcode:
Allerdings hat Tquerry ja keine Eigenschaft Command Text, was soll ich dafür verwenden?
if bSortOrder then
begin query2.CommandText := 'SELECT * FROM Table ORDER BY ' + sSortColumn; end else begin query2.CommandText := 'SELECT * FROM Table ORDER BY ' + sSortColumn + ' DESC'; end; query2.Open; Danke für die Hilfe :hello: Mfg ice |
Re: DBgrid sortieren
Zitat:
Delphi-Quellcode:
Query2.SQL.Text:='...';
|
Re: DBgrid sortieren
Ich bin echt etwas doof, bekomms leider nicht hin, jetzt kommt:
ungültiges Schlüsselwort Symbol-string: Table Zeilennummer:1 Konnte im Netz nix finden, auch habe ich selber nichts gefunden, liegt das an dem 2. Querry? Mfg ice |
Re: DBgrid sortieren
Du musst "Table" auch durch den Namen der abzufragenden Tabelle ersetzen. :-D
|
Re: DBgrid sortieren
Ist zum Mäuse melken.
Habe jetzt mein Querry2 mit der Datasource1 verbunden, dann
Delphi-Quellcode:
geändert, doch da wo Table stand geht das nicht.
query2.SQL.text := 'SELECT * FROM adressen.db ORDER BY ' + sSortColumn;
habe erst meinen DBGrid1 Namen reingeschrieben, jetzt den Datenbank Namen. Was muss da rein? den Namen der abzufragenden Tabelle und der wäre? Sry, ich bin ein hoffnungsloser Fall. EDIT: Also ich denke mal das da meine als Paradox7 erzeugte Datenbank namens: adressen.db reinmuss (wie oben beschrieben) aber wenn ich das mache compiliert er zwar, auch kann ich auf den Title des Grid klicken, ABER er sortiert nicht. :cry: |
Re: DBgrid sortieren
Wir können leider nicht hellsehen, daher kann Dir auch niemand sagen, wie Deine Tabellen heißen. :stupid:
|
Re: DBgrid sortieren
Das Statement an sich sieht gut aus, wie lauten die weiteren Einstellungen der Komponenete?
|
Re: DBgrid sortieren
Oh Krass seit ihr fix, das ist ja echt nicht schlecht. Schon mit nem Chat vergleichbar.
EDIT: Also ich denke mal das da meine als Paradox7 erzeugte Datenbank namens: adressen.db reinmuss (wie oben beschrieben) aber wenn ich das mache compiliert er zwar, auch kann ich auf den Title des Grid klicken, ABER er sortiert nicht. Crying or Very sad Von welcher Komponente? hab da so einiges zu bieten |
Re: DBgrid sortieren
Moment, die Daten werden aber im Grid dargestellt?
|
Re: DBgrid sortieren
ja die werden im Grid dargestellt.
|
Re: DBgrid sortieren
Zeig doch bitte n0ochmal den aktuellen Quelltext. Ich bin derweil mal schnell beim Abendbrot ;)
|
Re: DBgrid sortieren
Delphi-Quellcode:
lass dir schmecken, bis gleich... :bounce1:
unit Unit5;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, DBClient, Grids, DBGrids, ExtCtrls, DBCtrls, DBTables, Mask, ADODB; type TForm5 = class(TForm) Name: TLabel; Vorname: TLabel; Strasse: TLabel; hausnummer: TLabel; ClientDataSet1: TClientDataSet; ClientDataSet1Name: TStringField; ClientDataSet1Vorname: TStringField; ClientDataSet1Strae: TStringField; ClientDataSet1Hausnummer: TStringField; ClientDataSet1PLZ: TStringField; ClientDataSet1Ort: TStringField; ClientDataSet1Email: TStringField; DBNavigator1: TDBNavigator; DataSource1: TDataSource; DBEdit1: TDBEdit; DBEdit2: TDBEdit; DBEdit3: TDBEdit; DBEdit4: TDBEdit; DBEdit5: TDBEdit; DBEdit6: TDBEdit; DBEdit7: TDBEdit; GroupBox1: TGroupBox; DBGrid1: TDBGrid; Button3: TButton; Button4: TButton; Edit1: TEdit; Button1: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Query1: TQuery; Query2: TQuery; procedure DBGrid1TitleClick(Column: TColumn); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type datensatz=record end; var Form5: TForm5; sSortColumn: String; bSortOrder: Boolean; implementation uses Unit1, Unit4; {$R *.dfm} procedure TForm5.Button3Click(Sender: TObject); begin ClientDataSet1.SaveToFile('c:\Datenbank.da-guckst-du', dfXML); end; procedure TForm5.Button4Click(Sender: TObject); begin ClientDataSet1.LoadFromFile('C:\Datenbank.da-guckst-du'); end; procedure TForm5.DBGrid1TitleClick(Column: TColumn); begin if Column.FieldName <> sSortColumn then begin sSortColumn := Column.FieldName; end else begin bSortOrder := not bSortOrder; end; query2.Close; if bSortOrder then begin query2.SQL.text := 'SELECT * FROM adressen.db ORDER BY ' + sSortColumn; end else begin query2.sql.text := 'SELECT * FROM adressen.db ORDER BY ' + sSortColumn + ' DESC'; end; query2.Open; end. nebenbei: :dp: |
Re: DBgrid sortieren
Komisch, das sollte eigentlich funktionieren. Füg doch mal eine Zeile ein.
Delphi-Quellcode:
Und dann poste bitte die Meldung.
query2.Close;
if bSortOrder then begin query2.SQL.text := 'SELECT * FROM adressen.db ORDER BY ' + sSortColumn; end else begin query2.sql.text := 'SELECT * FROM adressen.db ORDER BY ' + sSortColumn + ' DESC'; end; ShowMessage(query2.SQL.Text); query2.Open; |
Re: DBgrid sortieren
Hast du das Grid auch mit Query2 verknüpft oder doch mit Query1?
|
Re: DBgrid sortieren
DBGrid ist mit DataSource1 verknüpft.
Wenn ich die Zeile einfüge zeigt er wie gewollt ne Showmessage mit: SELECT * FROM adressen.db ORDER BY /gewählter Title/ DESC; |
Re: DBgrid sortieren
Das SQL ist schon mal OK. Woran hängt denn die DataSource1?
|
Re: DBgrid sortieren
Die hängt an ClientDataSet1 das wiederum hängt an ClientDataSet1 und das ist mit adressen.db (Paradox7) verknüpft.
|
Re: DBgrid sortieren
Verknüpf doch mal die DataSource mit Query2.
|
Re: DBgrid sortieren
Das steht bei Datasource->DataSet garnicht zur Auswahl, wenn ichs manuel eingebe kommt:Zirkuläre Datenverbindungen sind nicht erlaubt
Wenn nicht setz ich das Program mal hier rein. Bin auch jetzt leider erstmal fort. |
Re: DBgrid sortieren
Was soll ich eigentlich mit wem verknüpfen?
Wieviel TQuery´s / DataSource brauche ich? AHbe jetzt alles mögliche miteinander verknüpft, ohne erfolg. :cry: |
Re: DBgrid sortieren
Guten Morgen,
du brauchst minimal eine TQuery, eine TDataSource und ein TDBGrid um deine Daten im Grid darzustellen und auch dort zu ändern, zu löschen oder neu zu erfassen. Nützlich wäre auch eine TDatabase, aber schau erstmal, dass du alles ohne zum laufen bringst. Der ClientDataSet scheint ein Überbleibsel von deinen früheren Versuchen zu sein. Die einzelnen DBEdits wohl auch, oder? Grüße vom marabu |
Re: DBgrid sortieren
Ne, über meine DBEdits lese ich die informationen fürs Grid ein.
Query1 hängt an DataSource1 das wiederum hängt an ClientDataSet1 und das ist mit adressen.db (Paradox7) verknüpft. Mal ne gaaanz andere frage, lässt es sich einfacher incrementieren im Grid einen Eintrag zu suchen? Mfg ice |
Re: DBgrid sortieren
Wenn das Grid an Query1 hängt, wird dir das ergebnis von Query2 natürlich nicht angezeigt.
|
Re: DBgrid sortieren
Nein, das Grid hängt an DataSource1.
Was soll ich nun tun? je länger ich dran sitz um so verzweifelter werde ich. :wiejetzt: |
Re: DBgrid sortieren
Das Grid an DataSource1 und diese wiederum an Query2.
|
Re: DBgrid sortieren
Hallo,
wenn du dein Projekt und eine leere Adressen.db bereit stellst, dann kann man dir besser helfen. Die Eintragung von DataSource1 bei der Komponente ClientDataSet1 ist ein Fehler. Schau dir dazu mal die Online Hilfe an. Freundliche Grüße |
Re: DBgrid sortieren
Liste der Anhänge anzeigen (Anzahl: 1)
Bei einer TTable muss man doch bei "Tablename" die Datenbank auswählen, das mus ich doch beim Query sicher auch machen, sonst werden die Datenbankwerte nicht im Grid angezeigt.
Aber egal, ich stelle mal das komplette prog rein. Das Progrmam befindet sich üprigens noch in Alpha Phase. :wink: |
Re: DBgrid sortieren
Delphi-Quellcode:
DataSet = ClientDataSet1
object DataSource1: TDataSource
Delphi-Quellcode:
DataSet = Query2
Left = 24 Top = 64 end |
Re: DBgrid sortieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hab Unit5 ein klein wenig geändert.
|
Re: DBgrid sortieren
Hallo,
das Programm scheint ursprünglich auf das Arbeiten mit einem XML-basierten ClientDataSet ausgelegt zu sein. Wenn das nun auf BDE und TQuery umgestellt werden soll, dann stören die "alten" Überbleibsel. Da würde ich erstmal beherzt löschen, was sich nicht wehrt, damit man sinnvoll weiter arbeiten kann. Übrigens:
Delphi-Quellcode:
So wird der Fall nicht behandelt, wenn der Benutzer den OpenDialog abbricht. Besser so:
procedure TForm4.Button3Click(Sender: TObject);
var i: integer; begin if openDialog1.Execute then assignfile(datei,openDialog1.FileName); reset(datei); // ...
Delphi-Quellcode:
Freundliche Grüße
procedure TForm4.Button3Click(Sender: TObject);
var i: integer; begin if not openDialog1.Execute then Exit; assignfile(datei,openDialog1.FileName); reset(datei); // ... |
Re: DBgrid sortieren
Tja, schuss in den Ofen.
@marabu: Deine Lösung beszieht sich auf form4 es geht aber um Form5. Auf Form4 hatte ich zuerst mit nem Stringgrid gearbeitet. Wenn du auf "EINTRAGEN" klickst, dann kommst du zum eigetnlichen Problem. @DaddyH: Wenn das richtig verknüpft ist gibts weiterhin ein Problem: Die navigation ist nichtmehr funktionsfähig, außerdem kann ich nix in die Edit fenster reinschreiben. |
Re: DBgrid sortieren
@icebreaker: du solltest dich mal mit den Grundlagen der Datenbankanbindung von Delphi bekannt machen.
Der Query liefert dir ja die Daten Tabelle, halt nur sortiert. |
Re: DBgrid sortieren
^^Klingt komisch is aber so.
Ja das stimmt. Doch Sobald ich den Navigator mit der ClientDataSource verknüpfeistr dieser nichtmehr funktionsfähig. Die DBEdit Fenster sind auch nichtmehr funktionsfähig, tut mir echt leid das ich euch die ganze Zeit auf denSack gehe, aber so kompliziert habe ich mir das vorgestellt. :( |
Re: DBgrid sortieren
Du mußt natürlich alle datensensitiven Komponenten mit der DataSource1 verbinden.
Den Query verbindest du mit einer TUpdateSQL, in der du die DML-Skripte hinterlegst. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz