Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DB Grid spalten sortieren (https://www.delphipraxis.net/101293-db-grid-spalten-sortieren.html)

Jack23 10. Okt 2007 20:34

Datenbank: Access • Zugriff über: ADO

DB Grid spalten sortieren
 
Hallo

Ich möchte in einem DBGrid spalten sortieren.

Dazu verwende ich folgenden Code:

Delphi-Quellcode:

var
  bSortOrder: Boolean;
  btn_Caption: string;



procedure TForm5.Alle(Sender: TObject);
var
  btn_Caption: string;
  begin
  btn_Caption := (Sender as TButton).Caption;
 end;

procedure TForm5.DBGrid1TitleClick(Column: TColumn);
var
  sSortColumn: String;
begin
    sSortColumn := DBGrid1.Columns.Items[Column.Index].FieldName;
    ADOQuery1.Close;
    if bSortOrder then
    if btn_Caption = 'Test1' then
  begin
      ADOQuery1.SQL.Text:= 'SELECT * FROM abc WHERE test like ' + QuotedStr(btn_Caption + '%') + ' ORDER BY ' + sSortColumn;
  end
  else
  begin
     ADOQuery1.SQL.Text:= 'SELECT * FROM abc WHERE test like '+ QuotedStr(btn_Caption + '%') + ' ORDER BY ' + sSortColumn + ' DESC';
  end;
  ADOQuery1.Open;
  bSortOrder := not bSortOrder;
end;
Aber ich kann leider den Fehler nicht finden. Vielleicht könnt ihr mir weiterhelfen?

mkinzler 10. Okt 2007 20:42

Re: DB Grid spalten sortieren
 
Da btn_Caption eine lokale Variable ist, bringt der Code so nicht.
In der 2. Methode ist sie zudem unbekannt.
Warum brauchst du für die Sortierungsrichtung einen eigenen Button und machst das nicht als Umkehrung bei weiterem Klick?

Jack23 10. Okt 2007 20:55

Re: DB Grid spalten sortieren
 
Wie mache ich die Variable Global?

Ich habe 10 Buttons mit unterschiedlichen werten. Also ein Button holt mehrere Daten aus der DB. Und für jeden Button brauche ich dann so etwas.

mkinzler 10. Okt 2007 20:57

Re: DB Grid spalten sortieren
 
Und was steuern die Buttons? Globale Variablen sind selten ne gute Option.

Jack23 10. Okt 2007 20:59

Re: DB Grid spalten sortieren
 
Ein Button sieht so aus:

Delphi-Quellcode:
procedure TForm5.Test(Sender: TObject);
begin
 ADOQuery1.Active:=false;
 ADOQuery1.Sql.Clear;
 ADOQuery1.Sql.Add('SELECT * FROM abc WHERE test like "we%" ORDER BY test asc ');
 ADOQuery1.Active:=true;
end;
Sie unterscheiden sich nur durch das like"%"

mkinzler 10. Okt 2007 21:06

Re: DB Grid spalten sortieren
 
Dann setzte doch nur die Abfrage bei Drücken der Buttons.

Jack23 10. Okt 2007 21:15

Re: DB Grid spalten sortieren
 
Ich versteh nicht ganz.

Aber ich möchte doch sortieren nach drücken des Button im DB Grid.

Wenn ich da dann in die Spalte klicke.

mkinzler 10. Okt 2007 21:16

Re: DB Grid spalten sortieren
 
Warum brauchst du dann extra Buttons?

Jack23 10. Okt 2007 21:18

Re: DB Grid spalten sortieren
 
Über einen Button rufe ich etwas aus der Datenbank. Und dann soll es hinterher im DBGrid durch klicken auf die einzelnen spalten sortiert werden.


Und da ich immer verschiedene Datensätze aus der DB hole deswegen die ganzen Button. Muss es doch so laufen oder?

mkinzler 10. Okt 2007 21:23

Re: DB Grid spalten sortieren
 
Ich würde dann in privaten Membern die zuletzt sortierte Spalte und Richtung ablegen.
Beim Klick auf die Buttons dann die Abfrage Ändern.
Keinesfalls würde ich die beiden Vorgänge, die unabhängig voneinander sind, zu einem machen zu wollen.

Jack23 10. Okt 2007 21:26

Re: DB Grid spalten sortieren
 
Keine schlechte Idee. Nur ich habe keine Ahnung wie ich das anfangen soll.

mkinzler 10. Okt 2007 21:37

Re: DB Grid spalten sortieren
 
TForm5:
Delphi-Quellcode:
...
  private
    sSortColumn, sOldSortColumn: String;
    sSortOrder: string;
    sAbfrage: String;
...
procedure TForm5.DBGrid1TitleClick(Column: TColumn);
begin
    sSortColumn := DBGrid1.Columns.Items[Column.Index].FieldName;  
    if sSortColumn = sOldSortColumn then
    begin
        if sSortOrder =' DESC ' then sSortOrder = ' ASC ' else sSortOrder =' DESC ';
    end
    else
        sSortOrder = ' ASC ';

    sOldSortColumn = sSortColumn;

    ADOQuery1.Close;

    ADOQuery1.SQL.Text:= sAbfrage + ' ORDER BY ' + sSortColumn+sSortOrder;
    ADOQuery1.Open;
end;

Jack23 10. Okt 2007 21:54

Re: DB Grid spalten sortieren
 
Ok. Ich habe mir jetzt ein wenig Zeit gelassen.

Wie definiere ich sAbfrage? Oder besser gesagt Wo?

mkinzler 10. Okt 2007 21:55

Re: DB Grid spalten sortieren
 
Das ist die Abfrage, welche du durch die Buttons setzt.

Jack23 10. Okt 2007 22:02

Re: DB Grid spalten sortieren
 
Ah ok. Mit der Zeile stimmt etwas nicht:

if sSortOrder =' DESC ' then sSortOrder = ' ASC ' else sSortOrder =' DESC ';

Es gibt die Meldung:

':=' erwartet, aber '=' gefunden

Und die Variable Definieren muss ich so oder?

Delphi-Quellcode:
sAbfrage=('SELECT * FROM abc WHERE test like "we%"');

mkinzler 10. Okt 2007 22:10

Re: DB Grid spalten sortieren
 
Delphi-Quellcode:
if sSortOrder =' DESC ' then sSortOrder := ' ASC ' else sSortOrder := ' DESC ';

Jack23 10. Okt 2007 22:22

Re: DB Grid spalten sortieren
 
Es wird gar keine Abfrage mehr gemacht. Habe ich irgend etwas vergessen?

edit: klappt jetzt alles. hatte nur etwas an der abfrage falsch. Danke für deine viele Mühe!


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