Autor Beitrag
Arne Danikowski
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194



BeitragVerfasst: Mo 05.01.09 17:13 
Ich zeige Daten einer Tabelle in einem DBGRID da. (Ich verwende immer noch die RX Tools also rxdbgrid).
Bei einem RXGrid kann man die TitelButtons auf True stellen. Wie kann ich diesen Buttons nun Funktionen zuordnen?
Kennt sich jemand damit aus?


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mo 05.01.2009 um 18:14
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19320
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 05.01.09 17:32 
Ich habe eine alte Version und die auch nicht installiert, aber auf den ersten Blick würde ich sagen, dass dafür OnTitleBtnClick gedacht ist. Es hört sich ja zumindest danach an.
Zitat:
ausblenden Delphi-Quelltext
1:
2:
3:
type
  TTitleClickEvent = procedure (Sender: TObject; ACol: Longint;
    Field: TField) of object;
Und wie du siehst wird auch die Spalte übergeben.
Arne Danikowski Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194



BeitragVerfasst: Mo 05.01.09 17:51 
Da habe ích auch schon versucht mit "rumzubasteln" :)
Hast Du da noch ein altes Beispiel?
Ich möchte zum Beispiel die Tabelle nach einem Klick auf den entsprechenden TitleButton sortieren (ORDER BY) Dazu müsste ich allerdings wissen, welcher TitleButton

Die Prozedur sieht glaub ich dann so aus
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm2.RxDBGrid1TitleBtnClick(Sender: TObject; ACol: Integer; Field:
    TField);
begin
end;


Ich habe mir das folgendes zusammengereimt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm2.RxDBGrid1TitleBtnClick(Sender: TObject; ACol: Integer; Field:
    TField);
    Var Z:Integer;
begin
with DM.JPQuery do

begin
  close;
  SQL.Clear;
  SQL.Add('Select *');
  SQL.Add('FROM JP');
  SQL.Add('ORDER BY'+RxDBGrid1.Columns[Z].FieldName);
  open;
end;
end;


Bekomme nun ein Fehlermeldung beim Betätigen eines TitleButtons
"Listenindex überschreitet das Maximum(532)"
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19320
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 05.01.09 19:44 
Du weist Z ja auch keinen Wert zu. Und genau das sagt dir auch der Compiler. Achte doch einfach mal auf die Hinweise und Warnungen, die dir dort angezeigt werden.

In diesem Fall wird da stehen, dass z nicht initialisiert ist.

Und wozu auch eine neue Variable? Die Spalte steht ja schon in ACol drin vermute ich.
Arne Danikowski Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194



BeitragVerfasst: Di 06.01.09 15:34 
Ich hatte eine Zeile vergessen. Hatte da noch Z:=ACol stehen. Funktionierte aber auch nicht. Die Spaltennummer steht in Acol drin,
habe die Prozedur mal so gestaltet:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm2.RxDBGrid1TitleBtnClick(Sender: TObject; ACol: Integer; Field:
  TField);
  VAR FELD:STRING;
  begin
  Feld:=RxDBGrid1.Columns[ACol].FieldName;
  with DM.JPQuery do
  begin
    close;
    SQL.Clear;
    SQL.TEXT:=('Select * FROM JP ORDER BY' +Feld);
    open;
  end;
end;


Nun bekomme ich einen Syntexfehler in der ORDER BY Klausel. In der Variablen FELD wird der Spaltenname übernommen.
Kann also nur noch was mit der SQL Abfrage sein.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19320
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 06.01.09 15:36 
Kann es sein, dass nach dem BY ein Leerzeichen fehlt? ;-)

Zudem kannst du dir das Clear denke ich sparen, weil du danach mit Text vermute ich ohnehin alles überschreibst in SQL.
Arne Danikowski Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194



BeitragVerfasst: Di 06.01.09 15:42 
Jep das fehlt. Schande über mein Haupt :oops:

Stimmt das Clear kann ich mir so sparen. war nur zum testen bau das nun wieder auf add um.

Danke für Deine Hilfe.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19320
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 06.01.09 15:54 
user profile iconArne Danikowski hat folgendes geschrieben Zum zitierten Posting springen:
Stimmt das Clear kann ich mir so sparen. war nur zum testen bau das nun wieder auf add um.
Das dauert allerdings ein ganz klein wenig länger. Solange das nicht in einer Schleife passiert ist das ja nicht so wichtig, aber solltest du das einmal in einer (oft ausgeführten) Schleife benutzen, dann sollte dir klar sein, dass mehrere Add-Anweisungen langsamer sind als eine Zeile mit Zuweisung von Text.
(Bei komplizierteren oder zusammengesetzten Anweisungen ist das natürlich etwas anderes ggf., wenn z.B. die Übersicht ohne mehrere Adds leidet.)