Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Master-/Verweisproblem (https://www.delphipraxis.net/8588-master-verweisproblem.html)

TypusMensch 8. Sep 2003 15:53


Master-/Verweisproblem
 
Schon wieder ein Problem mit Datenbanken.

Ich hab 2 Tabelle und ein Query. In etwa so:

Artikel.db (Tabelle):
- ANr *
- Bezeichnung
- Bestand
etc....

Verweis.db (Query):
- ID *
- Artikelnummer (Fremdschlüssel)
etc...

Wenn ich jetzt mittels SQL-Text die Anzahl der Einträge (z.b. suchen) von der Query (von DB: Verweis.db) ändere möchte ich auch noch eine Tabelle haben die mir genau nur diese Daten in einem einzelnen DBGrid angibt.

Beispiel:
In einer DBGrid mit Anschluss an die Query habe ich jetzt Artikelnummer 4,5 und 8, dann sollen auch in einer neuen DBGrid nur die Daten für Artikel 4,5 und 8 sein. Das hat was mit Master-Einstellung zu tun... aber irgendwie haut das nicht hin bei mir.

samson 8. Sep 2003 16:01

Re: Master-/Verweisproblem
 
Wie wäre es wenn Du zu dem DataSet (Tabelle1) in dem Ereignis: AfterScroll einfach das DataSet von Tabelle2 entsprechend selektierst???

TypusMensch 8. Sep 2003 16:25

Re: Master-/Verweisproblem
 
Zitat:

Zitat von samson
Wie wäre es wenn Du zu dem DataSet (Tabelle1) in dem Ereignis: AfterScroll einfach das DataSet von Tabelle2 entsprechend selektierst???

??? Versteh ich jetzt nicht. Sorry... kannst du das ein bissel genauer erläuern?

TypusMensch 8. Sep 2003 18:20

Re: Master-/Verweisproblem
 
:cry: ochhhh büdde.... hilfeee... :cry:

samson 8. Sep 2003 22:13

Re: Master-/Verweisproblem
 
Hallo!

Sorry das ich nicht eher schreiben konnte.

Also. Ich vermute mal das Du zwei TDataSet (DST) Komponenten auf Deinem Formular hast, welche eine Verbindung mit einer DataSource (DS) haben.

Ich nenne sie hier: DST1 für Tabelle 1 und DST2 für Tabelle 2.
DataSource1 ist Verbunden mit DST1 und DataSource2 mit DST2.

Weiter gehe ich davon aus, das Du zwei TDBGrid komponenten in deinem Formular plaziert hast.

Ich möchte Dir das an einem Beispiel demonstieren. In dem Fall habe ich einen Rechnungskopf und einen Rechnungsheader.
Wenn ich in dem Rechnungskopf einen Datensatz anklicke (Grid1) möchte ich die Positionen zu dieser Rechnung in dem zweiten Grid angezeigt bekommen.

Also hätte ich, je nach Zugriffskomponente, folgende SQL-Anweisung für DST1 implementiert.

SQL-Code:
select * from rechnungskopf
Wenn ich jetzt die zugeordneten Datensätze in dem zweiten Grid sehen möchte, muss ich ja die Datensätze in dem DST2 aktualisieren.

Also schreibe ich, in dem Ereignis 'OnAfterScroll' des DST1 folgende Anweisung:

Delphi-Quellcode:
DST2.Active := false;
DST2.SQL.Text := 'select * from rechnungsheader where NRRE = '+DST1.FieldByName('id').asString;
DST2.Active := true;
Somit hast Du die zugeordneten Datensätze in dem zweiten Grid selektiert und kannst Sie nach belieben bearbeiten.

Ich hoffe das ich Dir geholfen habe.

Gruss

Samson.

TypusMensch 9. Sep 2003 12:17

Re: Master-/Verweisproblem
 
Hm, neee. Ich glaub so war das net gemeint.

Tabelle 1:
ID ANR
1 4
2 5
3 8

Tabelle 2:
ANR Name
4 Brot
5 Butter
8 Fisch

Wenn ich jetzt auf Tabelle1 ID 2 klicke, sehe ich auch nur Artikel Butter inner Tabelle 2. Ich will aber alle Daten sehen, die in Tabelle 1 vorhanden sind.

Oder versteh ich da was falsch??

samson 9. Sep 2003 12:49

Re: Master-/Verweisproblem
 
Also wie ich das sehe, hast Du ein Datenbank Problem.

Nach deinem Schema, hätte ich eine 1:1 Beziehung. D. H. das genau ein Datensatz in einer anderen Entität zu meinem Datensatz gehört.

bsp.

Tabelle1

ID ARTNR
1 123
2 23
3 143
4 123

Tabelle2

ID Bezeichnung
123 Computer
23 Delphi
143 Monitor
123 Computer

Ist klar, dass er nach meinem Vorschlag auch nur die Zuordnungen anzeigt. Ich glaube das Du dein DB-schema etwas umbauen musst.

Tabelle3 (Beispiel Warengruppen)

id Bezeichnung
1 Hardware
2 Software

Tabelle1 (alte Verweistabelle)

NRWarengruppe NRArtikel
1 1
1 3
2 2
2 4

Tabelle2 (Artikel)

id Bezeichnung
1 Grafikkarte
2 Delphi 6.0 Enterprise
3 Motherboard
4 Delphi 7.0 Professional

Wenn du diese Datensätze (Tabelle1 und Tabelle3) im OnScroll-Ereignis des DataSets der Tabelle3 passend selektierst, dann bekommst Du die gewünschte Auswahl.

bsp.

in DBGrid mit DataSet von Tabelle3 wird der erste Datensatz mit der ID = 1 selektiert.

OnScroll selektiert:

Tabelle1 und Tabelle2

so wäre die Ausgabe im TDBGrid: Grafikkarte und Motherboard

Ich hoffe ich konnte helfen.

Gruss


Samson

TypusMensch 9. Sep 2003 14:31

Re: Master-/Verweisproblem
 
Ahhhhhh :bounce2: jetzt hab ich's gerafft....

Stellt sich nur die Frage wie löscht man dann in der Tabell 1 (Verweistabelle) einen Eintrag!?!? Man müsste ja vorher, so wie ich es jedenfalls immer tat, mit Locate suchen, naja, aber da man ja zwei Felder angeben muss, klappt das nicht.

Ich suche z.b. nach 1-3 (Hardware-Motherboard) und möchte diesen Verweis löschen, nicht Hardware, nicht Motherboard, nur den Verweis. Wie lokalisiere ich mich dann direkt auf diesen Verweis, um ihn mit Delete zu löschen???

Mit Locate sehe das ja so aus:
Zitat:

Datenbank.Locate('NRWarengruppe',1,[]);
Aber ich müsste nun nach NRWarengruppe=1 und NRArtikel=3 in einem suchen.... oder gibt es dafür wieder einen anderen Befehl???

TypusMensch 9. Sep 2003 15:21

Re: Master-/Verweisproblem
 
Ich weiß, es müsste auch anders gehen, habe aber der Tabelle noch n Auto-Feld hinzugefügt, nach der man suchen kann ;-)

ThX für die Hilfe... :spin:

NACHTRAG:
Muss trotzdem nachnach suchen... shit... Gibt das ein Mittel mit ner Funktion herauszubekommen, ob dieser Verweis schon in der Tabelle steht. Ich muss das irgendwie prüfen.

samson 9. Sep 2003 16:02

Re: Master-/Verweisproblem
 
Also!

DST1 ist Tabelle 1 (Verweise)
DST2 ist Tabelle 2 (Artikel)
DST3 ist Tabelle 3 (Warengruppen)

Wenn Du nun passend selektiert hast, hast Du in dem TDBGrid1 (Warengruppen) und in den TDBGrid2 (Artikel) nun die passenden Einträge selektiert.

Nun hast du DST2.fieldbyname('id').asstring
und DST3.fieldbyname('id').asstring

nun kannst Du eben mit einer kleiner Query den Eintrag aus der Verweistabelle löschen.

Delphi-Quellcode:
Function DeleteRecord;
var
  Query:TOracleQuery;
begin
  Query := TOracleQuery.Create(nil);
  try
    Query.session := oraclesession;
    Query.SQL.Text := 'delete from verweis where NRWarengruppe = '+DST3.fieldbyname('id').asstring + ' and NRArtikel = '+DST2.fieldbyname('id').asstring;

    Query.execute;
    DST3.Refresh;
  finally
    Query.free;
  end;
Hier arbeite ich mit Oracle-Zugriffskomponenten, sollte jedoch bei anderen so ähnlich sein.

Ich hoffe geholfen zu haben.

Gruss

Samson


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:54 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 by Thomas Breitkreuz