![]() |
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. |
Re: Master-/Verweisproblem
Wie wäre es wenn Du zu dem DataSet (Tabelle1) in dem Ereignis: AfterScroll einfach das DataSet von Tabelle2 entsprechend selektierst???
|
Re: Master-/Verweisproblem
Zitat:
|
Re: Master-/Verweisproblem
:cry: ochhhh büdde.... hilfeee... :cry:
|
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:
Wenn ich jetzt die zugeordneten Datensätze in dem zweiten Grid sehen möchte, muss ich ja die Datensätze in dem DST2 aktualisieren.
select * from rechnungskopf
Also schreibe ich, in dem Ereignis 'OnAfterScroll' des DST1 folgende Anweisung:
Delphi-Quellcode:
Somit hast Du die zugeordneten Datensätze in dem zweiten Grid selektiert und kannst Sie nach belieben bearbeiten.
DST2.Active := false;
DST2.SQL.Text := 'select * from rechnungsheader where NRRE = '+DST1.FieldByName('id').asString; DST2.Active := true; Ich hoffe das ich Dir geholfen habe. Gruss Samson. |
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?? |
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 |
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:
|
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. |
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:
Hier arbeite ich mit Oracle-Zugriffskomponenten, sollte jedoch bei anderen so ähnlich sein.
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; 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