Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Master/Detail ohne DBGrid ? (https://www.delphipraxis.net/59084-master-detail-ohne-dbgrid.html)

Hansa 17. Dez 2005 02:31

Datenbank: FB 1.5 • Zugriff über: FIBplus

Master/Detail ohne DBGrid ?
 
Hi,

ich habe hier eine Form, auf der sind zwei DataSets und zwei DBGrids. Wechsele ich in dem einen Grid die Zeile, dann werden im zweiten die entsprechenden Detail Datensätze angezeigt. Die DBGrids dienen aber nur zu Testzwecken, denn die kann ich gar nicht gebrauchen. :mrgreen:

Es geht darum, daß die Daten beim Wechseln des Records im ersten Dataset berücksichtigt werden sollen. Hierzu bräuchte ich die entsprechenden Datensätze aus der Detailtabelle. Ich brauche also alle Daten aus der Detailtabelle, die geliefert werden, sofern sich die Zeile in der Mastertabelle ändert.

Wie gesagt, es geht mit DBGrids, aber das Ganze soll im Endeffekt in ein TChart.

Sharky 17. Dez 2005 06:13

Re: Master/Detail ohne DBGrid ?
 
Hai Hansa,

ich würde einfach im Delphi-Referenz durchsuchenAfterScroll deines ersten DataSets einen neuen Filter/Abfrage für das zweite DataSet aufbauen.
Keine Ahnung ob das beides Querys oder so sind (ich kenne die FIBPlus nicht). Mit einfachen Querys würde das bei mir so aussehen:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  with Query_Detail do
  begin
    Close;
    SQL.Text := 'SELECT * FROM detailtable WHERE fk_master = :id_master';
    ParamCheck := True;
  end;

  with Query_Master do
  begin
    Close;
    SQL.Text := 'SELECT * FROM mastertable';
    Open;
  end;
end;

procedure TForm1.Query_MasterAfterScroll(DataSet: TDataSet);
begin
  Query_Detail.Parameters[0].Value := DataSet.FieldByName('master_id').AsInteger;
  Query_Detail.Open;
end;

mschaefer 17. Dez 2005 08:25

Re: Master/Detail ohne DBGrid ?
 
Einen schönen guten Morgen

Alternativ zu Sharky´s Angebot könntest Du auch d
as OnChange-Ereignis der DataSource verwenden-

Grüße aus dem verschneiten Norden

// Martin



[Edit] PS: Das OnChange der DataSource is tunabhängig von der Zugriffskomponente was ich als Vorteil sehe. [/Edit]

Jelly 17. Dez 2005 09:25

Re: Master/Detail ohne DBGrid ?
 
Ich selbst nutze auch immer das OnAfterScroll Ereignis. Klappt genau nach meinen Vorstellungen.

Allerdings meine ich dass das OnAfterScroll bei den ADO Komponenten ein etwas anderes Verhalten mitbringt. Kann es sein, dass das Ereignis beim Öffnen der Mastertabelle dort nicht ausgelöst wird, sondern wenn die Datenmenge keine Records liefert. Das war bei mir ganz schön ärgerlich, da die vorherigen Detaildaten dann stehen blieben, statt diese dann auch neu zu öffnen und eben keine Records zurückzugeben. Bei der alten BDE ist das jedenfalls anders...

Kann das einer bestätigen?

alex517 17. Dez 2005 09:39

Re: Master/Detail ohne DBGrid ?
 
oder guckst du hier:
Devrace
alex

Hansa 17. Dez 2005 21:35

Re: Master/Detail ohne DBGrid ?
 
Thx @All. Habe es mal so ähnlich gemacht wie Sharky, also Parameter und Detail-Dataset im Afterscroll. Das OnDataChange läuft prinzipiell so ähnlich. Bei mir gabs nur folgenden Effekt : nach dem connecten wurde das OnDataChange ca. 50mal aufgerufen und blieb trotzdem immer auf dem selben Datensatz stehen. Da war kein Zusammenhang mit Datenmenge usw. zu erkennen. @Martin : schreibe mal bei Dir eine Showmessage da rein, nicht das da eine kleine Bremse eingebaut ist und du sie nicht mal siehst. Aber egal wie, parallel zu den beiden DBgrids ist jetzt noch ein Stringgrid da und das läuft schön synchron mit dem DBGrid. Das Prinzip wie ichs jetzt gemacht habe scheint also zu gehen. Jetzt muß ich das Ganze nur noch dem TChart beibringen. 8) So, jetzt muß ich mir mal noch den Link von Alex genauer ansehen. Wenn die so viel zu einem Thema schreiben, dann lohnt sich bestimmt, das zu lesen. :-D


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