AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Master-Detail-Beziehung zur Laufzeit erstellen
Thema durchsuchen
Ansicht
Themen-Optionen

Master-Detail-Beziehung zur Laufzeit erstellen

Ein Thema von barnti · begonnen am 27. Mai 2004 · letzter Beitrag vom 1. Jun 2004
Antwort Antwort
Seite 2 von 2     12   
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Master-Detail-Beziehung zur Laufzeit erstellen

  Alt 28. Mai 2004, 11:05
Hi,

das geht auch über die Parameter der Where-Klausel. Habe ich vorher bereits gemacht.
Gruß,

Barnti
  Mit Zitat antworten Zitat
MarkusB

Registriert seit: 3. Apr 2004
Ort: Hamburg
105 Beiträge
 
#12

Re: Master-Detail-Beziehung zur Laufzeit erstellen

  Alt 30. Mai 2004, 13:33
Hallo branti!
Ich habe versucht Dein Problem nachzubilden. Ich habe 2 TQuery, 2 TDataSource, 2 TDBLookupListBox und ein TButton auf der Form platziert ohne irgendeine Eigenschaft der Elemente im Objektinspektor gesetzt zu haben. Alle Eigenschaften sollten während der Laufzeit gesetzt bzw. manipuliert werden. Dadurch ist der folgende Code entstanden und der funktioniert prima.

Und hier der vollständige Code:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, DBTables, StdCtrls, DBCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;

    MasterQuery: TQuery;
    MasterDataSource: TDataSource;
    MasterDBLookupListBox: TDBLookupListBox;

    DetailQuery: TQuery;
    DetailDataSource: TDataSource;
    DetailDBLookupListBox: TDBLookupListBox;

    procedure Button1Click(Sender: TObject);
    procedure MasterDBLookupListBoxClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  // MasterQuery
  MasterQuery.Active := false;
  MasterQuery.DatabaseName := 'FAM001_Lvs';

  MasterQuery.SQL.Clear;
  MasterQuery.SQL.Add('select distinct dnote_id from disp_head');

  MasterQuery.Prepare;

  MasterQuery.Active := true;

  // MasterDataSource
  MasterDataSource.DataSet := MasterQuery;

  // MasterDBLookupListBox
  MasterDBLookupListBox.ListSource := MasterDataSource;
  MasterDBLookupListBox.KeyField := 'dnote_id';

  // DetailQuery
  DetailQuery.Active := false;
  DetailQuery.DatabaseName := 'FAM001_Lvs';

  DetailQuery.SQL.Clear;
  DetailQuery.SQL.Add('select distinct art_id from disp_line');
  DetailQuery.SQL.Add(' where dnote_id = :dnote_id');

  DetailQuery.ParamByName('dnote_id').AsInteger;
  DetailQuery.Prepare;

  DetailQuery.DataSource := MasterDataSource;
  DetailQuery.Active := true;

  // DetailDataSource
  DetailDataSource.DataSet := DetailQuery;

  // DetailDBLookupListBox
  DetailDBLookupListBox.ListSource := DetailDataSource;
  DetailDBLookupListBox.KeyField := 'art_id';
end;

procedure TForm1.MasterDBLookupListBoxClick(Sender: TObject);
begin
  // DetailQuery neuaufbauen
  DetailQuery.Active := false;
  DetailQuery.Active := true;
end;

end.
Ich hoffe, dass ich Dir helfen konnte.

Viele Grüße
Markus
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: Master-Detail-Beziehung zur Laufzeit erstellen

  Alt 1. Jun 2004, 07:18
Hallo MarkusB,

das entspricht in etwa dem, was ich auch implementiert habe. Wie gesagt bei mir funktioniert es nicht. Das Problem dabei ist, dass ich beim 'OnScroll-Ereignis' die Datasets und ihre Abhängigkeiten aktualisieren muss. Dabei scheint das Problem aufzutauchen. Vielleicht finde ich den Fehler noch.
Danke für die Mühe! Sollte ich das Problem gelöst haben, werde ich es hier berichten...
Gruß,

Barnti
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: Master-Detail-Beziehung zur Laufzeit erstellen

  Alt 1. Jun 2004, 10:30
Hallo,

jetzt habe ich das Problem gelöst. Es funktioniert mit der normalen Master-Detail-Verbindung.
Folgende Komponenten konfiguriert:

Delphi-Quellcode:
...
MasterLookupBox.ListSource:= MasterSource;
DetailLookupBox.ListSource:= DetailSource;

MasterLookupBox.ListField:= 'ListFieldName'
DetailLookupBox.ListField:= 'ListFieldName';

MasterLookupBox.KeyField:= 'KeyName';
DetailLookupBox.KeyField:= 'KeyName';

...


procedure LookupBoxOnEnter(Sender: TObject);
begin
  SetMasterDetail(TDBLookupComboBox(Sender));
end;

procedure SetMasterDetail(...)
begin
  ...
  // Query der LookupBox
  DetailQuery.DataSource:= MasterLookupBox.ListSource;

  Tablename:= GetTableName;
  KeyName:= MasterLookupBox.ListSource.KeyName;
  DetailQuery:= GetQuery(TableName);

  // Parameter einfügen
  DetailQuery.Close;
  DetailQuery.SQL.Clear;
  DetailQuery.SQL.Add('SELECT * ');
  DetailQuery.SQL.Add('FROM '+Tablename);
  DetailQuery.SQL.Add('WHERE '+KeyName+'=:'+KeyName);
  DetailQuery.Open;
end;
Das in Kurzform. Für weitere Fragen stehe ich gern zur Verfügung.

Woran es jetzt gelegen hat vermag ich nicht zu sagen. Wahrscheinlich lag es am Zeitpunkt des Setzens der Master-Detail-Beziehung. So geht es auf jeden Fall.

Nochmals Danke an alle.
Gruß,

Barnti
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz