![]() |
DB nach Spalte sortieren (Index oder SQL?)
Hallo,
ich hab' eine kleine DBase Datenbank, die ich über ein DBGrid anzeigen lasse. TTable --> TDataSource -> TDBGrid. Nun möchte ich die Tabelle nach bestimmten Spalten sortieren. Biem Programmstart ist sie nach Spalte X sortiert, ich will aber auf Knopfdruck nach Spalte Y oder Z sortieren. Wie bekomm ich das hin? Ich hab jetzt schon einige Beispiele gelesen mit
Code:
, aber damit kann ich absolut nix anfangen.
SQL ( SELECT * FROM Tabellenname ORDER BY Spaltenname)
Oder die zweite Möglichkeit, die ich anscheinend hab mit
Code:
, wobei Indexname irgendwie auf den Spaltennamen verweisen muss (keine Ahnung wie..)
Table1.IndexName := IndexName;
Also: Kann mir jemand sagen, wie ich das Sortieren hinbekomme, entweder mit SQL oder mit den Indexen...würde mich sehr freuen. Ciao :) |
Re: DB nach Spalte sortieren (Index oder SQL?)
Moin Jetro,
Wenn du von Table auf Query wechselst, kannst du das mal versuchen.( im OnTitleClick-Event des Grids)
Delphi-Quellcode:
[Edit] "SelectStr" sol dein Select-Statement bis vor die "ORDER BY"-Clause enthalten[/Edit]
TQuery(Column.Grid.DataSource.DataSet).SQL.Text :=
SelectStr +#10+ 'ORDER BY ' + IntToStr(succ(Column.Index)); Ich weiß jetzt aber nicht, ob TTable auch eine SQL-property hat. Ich kenne mich aber mit dem BDE/ADO - zeugs nicht so aus p.s.: Wenn das die BDE kompos sind, dann nehme lieber ADO (BDE wird hier in der DP öfters als schlechter beschrieben) |
Re: DB nach Spalte sortieren (Index oder SQL?)
Hallo Jetro223,
erst einmal herzlich willkommen in der Delphi-Praxis. Wie GeorgeWNewbie schon sagte, empfiehlt sich die Verwendung einer Query:
Delphi-Quellcode:
Die Zeichenkette im ersten Add kannst Du auch in eine String-Variable legen.
Query1.Close;
Query1.SQL.Clear; Query1.SQL.Add ('SELECT * FROM tabelle'); Query1.SQL.Add ('ORDER BY ' + Column.FieldName); Query1.Open; @GeorgeWNewbie: Bei TTable gibt es keine Eigenschaft SQL. Die BDE ist nicht unbedingt schlecht, sie wird nur von Borland nicht mehr weiterentwickelt. Und ADO macht eigentlich nur Sinn, wenn man auf Access, MS SQL-Server und eventuell auf Oracle zugreifen will. Für alle anderen DB's muß man sich die (teilweise kostenpflichten) ADO-Treiber besorgen. Borland selbst empfiehlt DBExpress. |
Re: DB nach Spalte sortieren (Index oder SQL?)
Hallo nochmal und danke erstmal :)
Diese Möglichkeit hab ich auch schon einige Male gelesen. Aber wie genau verbind ich damit mein DBGrid und die DataSource... Wahrscheinlich fehlen mir nur noch die richtigen Verknüpfungen zwischen den Komponenten um es zum laufen zu bringen. Wäre echt genial, wenn mir die noch jemand aufschreiben könnte :) Ciao :) |
Re: DB nach Spalte sortieren (Index oder SQL?)
Hai Jetro223,
bei deiner DataSource stellst Du im OI bei DataSet dein Query1 ein. In deinem DBGrid stellst Du dann unter DataSource deine DataSource1 ein. Das Query muss natürlich mit einer Connection verbunden sein. |
Re: DB nach Spalte sortieren (Index oder SQL?)
Hmm, irgendwie schein ich zu blöd zu sein :) Ich kapiers nicht.
Also ich hab jetzt je einmal TQuery TTable --> hier verweis ich normalerweise bei Table1.TableName auf c:\blah.dbf, meine DBase Tabelle TDataSource --> hier kommt bei DataSet Table1 hin TDBGrid --> hier bei Datasource, DataSource1 Wie muss ich jetzt das TQuery in das Ganze einfügen, das mir trotzdem meine Daten im TDBGrid angezeigt werden, ich dann aber via SQL ordnen etc. kann. Ciao :) Edit: Oder beziehungsweise, was stell ich beim TQuery ein...denn dort gibt es nur DatabaseName, ich hab aber keine Aliase oder so Zeug :) Sorry, ihr merkts sicher schon, bin Anfänger in Richtung Datenbank :) |
Re: DB nach Spalte sortieren (Index oder SQL?)
Du brauchst noch eine TDataBase wenn ich mich nicht täuche.
Und dann anstelle der TTable die TQuery verwenden. |
Re: DB nach Spalte sortieren (Index oder SQL?)
Und wie mach ich das bei der TDatabase mit dem Databasename und wo ist da ne Verknüpfung zum Query...mist, im moment blick ich absolut nix...:(
Ciao :) |
Re: DB nach Spalte sortieren (Index oder SQL?)
Was hast Du denn für eine Delphi-Version? Eventuell ist es mit den ADO-Komponenten ja leichter zu lösen.
|
Re: DB nach Spalte sortieren (Index oder SQL?)
Ich hab Delphi 6 Enterprise. Kann ja nicht soooo schwer sein, einfach nach versch. Spalten zu ordnen :)
|
Re: DB nach Spalte sortieren (Index oder SQL?)
Also ich hatte es jetzt geschafft, die Tabelle mit SQL und dem Query so zu ordnen, wie ich es brauche (DatasourceX.DataSet := Query1;), das blöde ist nur: anscheinend kann ich jetzt nicht mehr löschen bzw. editieren. :(
Also er meint bei z.B.:
Code:
--> Datenmenge ist schreibgeschützt...
Query1.Delete;
Weiss jemand warum? Und wenn Datenmenge schreibgeschützt, bzw. wenn man allgemein mit einem TQUery Daten nur ANzeigen lassen kann, wozu gibt es dann noch Delete und Edit etc. ...bzw. was mach ich falsch :) Ciao :) |
Re: DB nach Spalte sortieren (Index oder SQL?)
Zwei Möglichkeiten: Entweder du schickst ein DELETE-Statement an die DB oder Du entfernst den Schreibschutz der Datenmenge (Eigenschaft RequestLive). Der ersten Alternative sollte der Vorzug gegeben werden.
|
Re: DB nach Spalte sortieren (Index oder SQL?)
Super, das mit dem DELETE funktioniert einwandfrei...Dankeschön! :)
Also quasi alles was ich machen will, was die DB manipuliert mit SQL, wenn's anders nicht geht :) Man, gibt's denn keine Komponente, die beides kann: Einfache Veränderungen UND SQL? Ciao :) |
Re: DB nach Spalte sortieren (Index oder SQL?)
Eigentlich kann TQuery beides. IMHO sollte man doch alles über SQL-Statements erledigen.
|
Re: DB nach Spalte sortieren (Index oder SQL?)
Hmm, stimmt, daher auch die ganzen Sachen wie Insert etc. :)
Wenn es jetzt noch möglich wäre diesen Schreibschutz aufzuheben, wäre ich für einen Moment der glücklichste Mensch der Welt :mrgreen: . Denn alles in SQL umzusetzen wäre im Gegensatz zu der Methode, wie ich sei mit TTable kenne großer Aufwand (wenn es sein muss, würde ich den auch betreiben, aber nur wenn es sein muss :)) Du meintest das ginge mit dem Setzen der Eigenschaft RequestLive zu TRUE. Die Onlinehilfe meint, dass das nur eine Anforderung ist und nicht unbedingt Erfolg hat. Also im Endeffekt ist meine DBASE Datenbank trotzdem schreibgeschützt...hab es eben auch mit einer Paradox Datenbank probiert und diese will leider auch nicht :(. Für was für Datenbanken und unter welchen Umständen hätte denn RequestLive Erfolg...weisst du das? Mfg :) Edit: Aha, alles klar...jetzt funktioniert es. Ich darf laut LocalSQL.hlp keine ORDER BY Klausel verwenden, also muss ich vor dem editieren etc. einfach die SQL Anweisung so drehen, das keine ORDER BY Klauseln etc. (sind nochn paar andere die nicht da sein dürfen) existiert und dann geht's...naja, mal schaun, ob ich das so mach', oder dann doch alles per SQL... |
Re: DB nach Spalte sortieren (Index oder SQL?)
Also ich weiß nicht, wie es sich dBase da verhält, aber wenn man so eine Anfrage an eine Oracle-DB schickt, dann erwartet sie, das die RowID mit selektiert wird.
Die RowID ist ein eindeutiger Zeiger auf einen Eintrag. Vielleicht braucht TQuery sowas ähnliches von deiner dBase DB. [Edit1]war zu langsam[/Edit1] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:08 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-2025 by Thomas Breitkreuz