AGB  ·  Datenschutz  ·  Impressum  







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

Master-Detail-Beziehung zur Laufzeit erstellen

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

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

Master-Detail-Beziehung zur Laufzeit erstellen

  Alt 27. Mai 2004, 16:09
Hallo,
ich versuche zur Laufzeit eineMaster-Detail Beziehung zwischen zwei Tabellen zu erzeugen.
Delphi-Quellcode:
DetailQuery.Close;
DetailQuery.Datasource:= MasterDatasource;
DetailQuery.SQL.Clear;
DetailQuery.SQL.Add('SELECT *');
DetailQuery.SQL.Add('FROM '+TableName); // Abzufragende Tabelle
DetailQuery.SQL.Add('WHERE '+KeyField+'='+':'+KeyField); // Fremdschlüssel als QueryParameter
DetailQuery.Open;
Leider bekomme ich beim Zugriff (ScrollEvent) des Detail-Datasets immer eine AV.


Weiß jemand Rat?
Gruß,

Barnti
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.007 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

Re: Master-Detail-Beziehung zur Laufzeit erstellen

  Alt 27. Mai 2004, 16:13
Ist die MasterSource auch offen?
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
barnti

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

Re: Master-Detail-Beziehung zur Laufzeit erstellen

  Alt 27. Mai 2004, 16:13
Zitat von Stevie:
Ist die MasterSource auch offen?
Japp.
Gruß,

Barnti
  Mit Zitat antworten Zitat
barnti

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

Re: Master-Detail-Beziehung zur Laufzeit erstellen

  Alt 27. Mai 2004, 16:38
Hallo,

Korrektur: Die Fehlermeldung lautet: "DetailQuery: Field '' not found "

Kann jemand damit etwas anfangen? Ich schätze, dass der Parameter nicht erkannt wird?!
Gruß,

Barnti
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.007 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

Re: Master-Detail-Beziehung zur Laufzeit erstellen

  Alt 27. Mai 2004, 16:46
Stichwort: MasterField
Du musst dem DataSet sagen, über welches Feld es mit dem Master verbunden ist.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
barnti

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

Re: Master-Detail-Beziehung zur Laufzeit erstellen

  Alt 27. Mai 2004, 19:01
Hallo Steve,

wie Du am Statement erkennen kannst, verwende ich einen Parameter. Dieser stellt die Verbindung her...

Aber vielleicht ist das so nicht ganz richtig oder wird nicht richtig erkannt?
Gruß,

Barnti
  Mit Zitat antworten Zitat
barnti

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

Re: Master-Detail-Beziehung zur Laufzeit erstellen

  Alt 28. Mai 2004, 09:34
Hallo,

meine Query enthält das richtige Statement mit dem Parameter, wenn ich es mir anzeigen lasse.
Trotzdem funktioniert es nicht. Ich bekomme immer ein leeres DetailDataset.

Wenn ich folgendes mache:
Delphi-Quellcode:
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('SELECT *');
Query.SQL.Add('FROM '+TableName);
Query.SQL.Add('WHERE '+KeyName+'='+QuotedStr(2)) // Hier gebe ich den Fremdschlüssel direkt an,
                                                 // statt über Parameter.
...
So geht es. Ich verstehe das nicht.

Ich habe zwei Querys:

1. Kunde
Kunde_ID

2. Waren
Waren_ID
Kunde_ID

Ich möchte die folgende Master-Detail-Beziehung zur Laufzeit, beim erzeuge der Querys, erstellen.
Delphi-Quellcode:
WarenQuery.Close;
WarenQuery.SQL.Clear;
WarenQuery.SQL.Add('SELECT *');
WarenQuery.SQL.Add('FROM '+TableName);
WarenQuery.SQL.Add('WHERE '+KeyName+'=:'+KeyName) // Wobei 'KeyName' der Parameter dieser Query
                                                  // ist
Lasse ich mir das Statement beim Scrollen ausgeben, so steht der Parameter mit in der Query.
Nur das Ergebnis bleibt leer, obwohl ein Wert vorhanden sein sollte...

Kann jemand helfen und mir sagen wie ich den Parameter richtig miteingebunden bekomme?
Gruß,

Barnti
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Master-Detail-Beziehung zur Laufzeit erstellen

  Alt 28. Mai 2004, 09:47
Hai barnti,

an welcher Stelle setzt Du denn den Wert des Parameters?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
barnti

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

Re: Master-Detail-Beziehung zur Laufzeit erstellen

  Alt 28. Mai 2004, 10:13
Hallo Sharky,
Zitat von Sharky:
an welcher Stelle setzt Du denn den Wert des Parameters?
Ich erzeuge DBLookupBoxen sobald man eine Tabelle zur Ansicht aufruft. Die LookupBoxen dienen der Suche in der Tabelle. So kann man in der Tabelle 'Waren' nach Waren von bestimmten Kunden suchen, wenn man in der LookupBox 'Kunde' einen Kunden auswählt. In der nächsten Lookupbox sollen dann nur noch Waren des ausgewählten Kunde angezeigt werden.
Die Boxen werden erzeugt sobald der Benutzer auf den 'Tabelle Waren anzeigen'-Button drückt.
Delphi-Quellcode:
...
procedure SetExtraLookup(...)
...// Hier wird jeweils eine Box mit einem Standard-SQL-Statement konfiguriert(alle Daten der
   // Tabelle)
ListField:= GetListFieldLookupBox.ListSource:= GetXLookupDatasource(Tablename);
LookupBox.ListSource.DataSet.Open;
LookupBox.KeyField:= LookupBox.ListSource.DataSet.Fields[0].FieldName;
LookupBox.ListField:= ListField;

SetMasterDetail(LookupBox); // hier soll die Master-Detail-Beziehung etabliert werden
...


procedure SetMasterDetail(LookupBox: TDBLookupComboBox);
begin
...
  // Neu abzufragende Tabelle, Fremdschlüssel und die zugehörige Query
  Tablename:= GetTableName;
  KeyName:= MasterDataset.Fields[0].FieldName;
  DetailQuery:= GetDetailQuery;

  DetailQuery.Datasource:= MasterDatasource // Hier wird die Verbindung beider Quellen hergestellt

  DetailQuery.Close; // Hier wird das Statement neu gesetzt, so dass der
                                // Parameter 'KeyName'
  DetailQuery.SQL.Clear; // ermittelt aus dem Masterdataset eingesetzt wird
  DetailQuery.SQL.Add('SELECT *');
  DetailQuery.SQL.Add('FROM '+TableName);
  DetailQuery.SQL.Add('WHERE '+KeyName+'=:'+KeyName)};
  DetailQuery.SQL.Add('and valid is Null');
  DetailQuery.Open;
end;
Der Wert des Parameters ergibt sich aus der Verbindung der beiden Quellen. Da In der LookupBox 'Kunde' Werte vorhanden sind, scheint die Quelle 'Kunde' offen zu sein. In der Box der Waren werden halt nur keine Waren angezeigt. Das Statement wird aber ausgeführt...
Gruß,

Barnti
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.007 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

Re: Master-Detail-Beziehung zur Laufzeit erstellen

  Alt 28. Mai 2004, 11:50
Zitat von barnti:
Hallo Steve,

wie Du am Statement erkennen kannst, verwende ich einen Parameter. Dieser stellt die Verbindung her...

Aber vielleicht ist das so nicht ganz richtig oder wird nicht richtig erkannt?
Hmm, so hab ich das noch nie gemacht, heißt aber nix.
Du musst aber nicht die Where-Klausel in die Abfrage miteinfügen, sondern über Masterfield die Beziehung festlegen.
Dann wird auch die Detail-Datenmenge aktualisiert, wenn sich die Master-Datenmenge ändert.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:56 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