Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Inner join (https://www.delphipraxis.net/179299-inner-join.html)

Luckner 25. Feb 2014 14:59

Datenbank: Firebird • Version: 2.1 • Zugriff über: Dataset

Inner join
 
Hallo,
habe in einer Datenbank 3 Tabellen. Eine ARTIKEL-, eine Auftrag- und eine PLANNUNG-Tabelle. In der Artikeltabelle gibt es ID, Artikelnr, Artikelanzahl usw. In der Auftrag-Tabelle gibt es ein ID_Artikel (identisch mit ID aus Artikel) und andere Felder. In der Plannungs-Tabelle ist eine Auswahl aus Auftrag (select Rows), wobei Pro Artikel ein Auftrag. Auch hier gibt es ein Feld ID_Artikel = ID (aus Artikel). Für die Darstellung der Plannungstabelle benutze ich ein dbgrid.
Jetzt folgende Fragen:

Wie kann ich die Tabelle Plannung mit Artikel verbinden (inner join?) damit ich in der Plannung auch das Feld ARTIKELANZAHL aus ARTIKEL sehen kann, wobei dieses Feld nur bei Aufruf dieses DBGrids aktualisiert werden müsste. In der Plannung selbst braucht das Feld Artikelanzahl nicht gespeichert werden.

Danke, Luckner

DeddyH 25. Feb 2014 15:06

AW: Inner join
 
Ich habe das jetzt 4 mal gelesen, aber immer noch nicht verstanden. Kannst Du die Struktur mal kurz skizzieren (mit ein paar Beispieldaten) und das gewünschte Abfrageergebnis dazu posten?

Luckner 25. Feb 2014 15:40

AW: Inner join
 
Ich versuche es.

Artikel-Tabelle: ID ART_NR ART_NAME ART_ANZAHL Auftrag-Tabelle: ID ART_ID ART_NR ART_NAME BESTELLNR BESTELLANZ usw.
1 6353 Blauer Artikel 12000 1 1 6353 Blauer Artikel 7477838 5000
2 7676 Roter Artikel 0 2 3 5677 gelber Artikel 8547488 1000
3 5677 gelber Artikel 1000

Übergebe aus der Auftragstabelle über selectRows eine gewisse Anzahl der datensätze aus Auftrag an die Plannungstabelle. Das funktioniert schon.

Ergebnis Plannungs-Tabelle: ID ART_NR ART_ID ART_NAME PROD_DATUM usw.
1 6353 1 Blauer Artikel 29.02.14
2 5677 3 gelber Artikel 03.03.14

Zugriff auf die Plannungstabelle über DBGrid. Brauche ich die ART_Anzahl aus Artikel-Tabelle in diesem dbgrid. In der Plannungstabelle gibt es dieses Feld bisher nicht. Kann ich diese Art_Anzahl im dbgrid anzeigen (über eine join-Verknüpfung) ohne es in der Plannungstabelle einzubauen? Echt schwierig zu erklären.

Luckner 25. Feb 2014 15:42

AW: Inner join
 
Ah Schrott. Bei abspeichern ändert sich die formatierung

DeddyH 25. Feb 2014 15:44

AW: Inner join
 
So etwas?
SQL-Code:
SELECT
  P.ID, P.Art_Nr, P.Art_Name, A.Anzahl
FROM
  Plannung P
INNER JOIN
  Artikel A ON A.Art_Nr = P.Art_Nr

Sir Rufo 25. Feb 2014 15:46

AW: Inner join
 
Zitat:

Zitat von Luckner (Beitrag 1249541)
Ah Schrott. Bei abspeichern ändert sich die formatierung

Dafür gibt es ja auch die Code-Tags ...

Auftrag-Tabelle:

Code:
ID ART_ID ART_NR ART_NAME BESTELLNR BESTELLANZ
1 6353 Blauer Artikel 12000 1 
1 6353 Blauer Artikel 7477838 5000
2 7676 Roter Artikel 0 2 
3 5677 gelber Artikel 8547488 1000 
3 5677 gelber Artikel 1000
Man kann sogar eine Tabelle hier einfügen

Zitat:

Ergebnis Plannungs-Tabelle:
IDART_NRART_IDART_NAMEPROD_DATUM
163531Blauer Artikel29.02.14
256773gelber Artikel03.03.14

Code:
Ergebnis Plannungs-Tabelle:
[Table]ID|ART_NR|ART_ID|ART_NAME|PROD_DATUM
1|6353|1|Blauer Artikel|29.02.14
2|5677|3|gelber Artikel|03.03.14[/Table]

Luckner 25. Feb 2014 15:53

AW: Inner join
 
Hallo DeddyH,

so in etwa hatte ich das schon gemacht und zwar in der select-eigeschaft von meinem dataset. Der dataseteditor zeigt mir die Ergebnisfelder auch an, aber mein Feldeditor findet das Feld aus Artikel nicht.

Luckner 25. Feb 2014 15:55

AW: Inner join
 
Hallo Sir Rufo,

werde mir die tags mal reinziehen. Ja, so wird es vernünftig dargestellt. Danke

Sir Rufo 25. Feb 2014 15:56

AW: Inner join
 
Zitat:

Zitat von Luckner (Beitrag 1249547)
Hallo Sir Rufo,

werde mir die tags mal reinziehen. Ja, so wird es vernünftig dargestellt. Danke

Es steht dir frei deinen Beitrag zu bearbeiten ... ;)

p80286 25. Feb 2014 16:05

AW: Inner join
 
Zitat:

Zitat von Luckner (Beitrag 1249545)
so in etwa hatte ich das schon gemacht und zwar in der select-eigeschaft von meinem dataset. Der dataseteditor zeigt mir die Ergebnisfelder auch an, aber mein Feldeditor findet das Feld aus Artikel nicht.

Eigentlich dachte ich, ich hätte verstanden worauf Du hinaus willst, aber jetzt kommen mir doch Zweifel...

Wenn das Dataset, das Ergebnis eines selects ist, dann hast Du keine Verbindung mehr zu den ursprünglichen Tabellen. Da kannst Du nicht das "Feld aus Artikel" in irgendeiner Art und Weise bearbeiten.

Gruß
K-H

Luckner 25. Feb 2014 16:16

AW: Inner join
 
Wenn das Dataset, das Ergebnis eines selects dann müssten die Daten aus beiden Tabellen angezeigt werden. wenn das dbgrid auf dieses dataset zeigt, müssten, so nach meiner Logik, im dbgrid eben diese neuen Datensätze angezeigt werden. Oder braucht ein dbgrid eine echte Tabelle mit sämtlichen angezeigten Felder?

DeddyH 25. Feb 2014 16:18

AW: Inner join
 
Anzeigen sollte schon gehen, Bearbeiten aber nicht.

Furtbichler 25. Feb 2014 16:20

AW: Inner join
 
Zitat:

Zitat von DeddyH (Beitrag 1249554)
Anzeigen sollte schon gehen, Bearbeiten aber nicht.

Wieso nicht? ADO z.B. kriegt das hin.

Luckner 25. Feb 2014 16:29

AW: Inner join
 
anzeigen, würde es schon reichen. Also, ganz auf dem Holzweg bin ich dann nicht, dann werde ich weiter versuchen.

Danke, Luckner

Luckner 26. Feb 2014 15:32

AW: Inner join
 
Nach dem die "inner join" Geschichte mit einem weiterem Dataset realisiert habe, wirde ich jetzt gerne die selectierten Datensätze von dem einem Dataset in das andere einfügen. Das Ergebnis ist jedoch, dass diese Schleife zwar beide Datasets durchläuft, aber die werte des 2.-ten Datasets in die erste Zeile geschrieben werden. Ich hoffe, dass Das einigermassen verstädlich geschrieben habe.
Hie die Schleife:

for i := 0 to DatamodulePlannung.DataModule5.IBDataSetGridPlannu ng.RecordCount -1 do
begin
DatamodulePlannung.DataModule5.IBDataSetGridPlannu ng.Edit;
DatamodulePlannung.DataModule5.IBDataSetGridPlannu ngLAGERANZAHL.AsInteger := DatamodulePlannung.DataModule5.IBDataSetPlannungLA GERANZAHL1.AsInteger;

DatamodulePlannung.DataModule5.IBDataSetGridPlannu ng.Next;
DatamodulePlannung.DataModule5.IBDataSetPlannung.N ext;
end;

Danke

p80286 26. Feb 2014 16:55

AW: Inner join
 
Entschuldige, aber es ist immer noch (für mich) unverständlich.
Du sprichst von 2 Datasets. scheinst aber Daten von einem Dataset in ein DBGrid zu übernehmen.

Wenn Du durch mehrere selects mehrere Datasets erhalten hast, dann kannst Du diese einfach durch ein
Code:
Union
zusammen fassen, Du erhältst also ein Ergebnisdataset .

Code:
select f1,f2,f3 from ...
Union
select f1,f9,f5 from ...
Gruß
K-H

Luckner 26. Feb 2014 17:38

AW: Inner join
 
Eigentlich fiel mir gerade ein, dass ich die Spaltenwerte aus Tabelle1 per insert-Befehl in die Tabelle2 übernehmen könnte. Spare ich mir die ganze "inner join"-Geschichte. Ich will ja diese Werte aus Tabelle1 doch in der Tabelle2 haben. Jetzt nur noch ein vernüftigen SQL-string bauen.

Danke.

p80286 26. Feb 2014 17:50

AW: Inner join
 
Zitat:

Zitat von Luckner (Beitrag 1249737)
Eigentlich fiel mir gerade ein, dass ich die Spaltenwerte aus Tabelle1 per insert-Befehl in die Tabelle2 übernehmen könnte. Spare ich mir die ganze "inner join"-Geschichte. Ich will ja diese Werte aus Tabelle1 doch in der Tabelle2 haben. Jetzt nur noch ein vernüftigen SQL-string bauen.

Danke.

Bist Du sicher das Du das willst?
Das ist eigentlich der falsche Weg http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)

Gruß
K-H

Luckner 27. Feb 2014 12:36

AW: Inner join
 
Ich glaube ja, weil, wie in diesem Fall, die Lageranzahl des Arikels nur zum Zeitpunkt der Plannung wichtig ist, Wenn 5 Minuten später, bei einigen Artikeln sich die Anzahl am Lager ändert, spielt keine große Rolle mehr, weil die Plannung schon gedruckt worden ist. Auch werde ich einen Aktualisierung-Button einbauen und den kann man so oft drücken, wie man will.

Luckner


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