AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ADOQuery berechnetes Feld

Ein Thema von Luckner · begonnen am 3. Jun 2019 · letzter Beitrag vom 11. Jun 2019
Antwort Antwort
Seite 2 von 4     12 34      
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#11

AW: ADOQuery berechnetes Feld

  Alt 5. Jun 2019, 15:19
Hallo,
habe mir alle Vorschläge zu Herzen genommen, vor allem die von Delphi.Narium und folgende SELECT-Abfrage gebastelt:
Delphi-Quellcode:
  SELECT Materialrollen.[Mat-Nr], sum((Materialrollen.[Arb-Breite] / 1000) * Materialrollen.lfm) as BESTAND, [Material-Stamm].Bezeichnung
  FROM Materialrollen
  LEFT JOIN [Material-Stamm] ON Materialrollen.[Mat-Nr] = [Material-Stamm].[Mat-Nr]
  WHERE (([Material-Stamm].[Lieferanten-Nr] = ' + Lieferantennr.Text + ') AND ([Material-Stamm].aktuell= -1)
  AND (Materialrollen.DatumAb is NULL) AND (Materialrollen.[Arb-Breite] > 179))
  group by Materialrollen.[Mat-Nr], [Material-Stamm].Bezeichnung
Jetzt werden mir die Daten in der DBGrid angezeigt und ich bin fast glücklich. Es werden mir jetzt Materialien angezeigt, deren (Materialrollen.[Arb-Breite] > 179 (mm)ist. Alle Materialrollen, deren die [Arb-Breite] <= 179 werden nicht angezeigt, was korrekt ist. Der Fall jedoch, wo es kein Material auf Lager gibt, weil verbraucht, geht verloren.
Hat Jemand, bitte, eine Idee, wie man das noch zusätzlich einbaut.

Danke, Luckner
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: ADOQuery berechnetes Feld

  Alt 5. Jun 2019, 15:45
Hallo,

or (Feld x is Null)
or (Feld1=Feld2) ??

Ich kenne deine Datenstruktur ja nicht.

Wie erkennst Du, dass das Material aufgebraucht ist?

Du kannst auch eine komplett neue Query "hintendranhängen"

Select Query 1
Union
Select Query 2

Es müssen nur die gleichen Datenfelder (Anzahl, Datentyp usw.) sein.
Heiko
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#13

AW: ADOQuery berechnetes Feld

  Alt 5. Jun 2019, 16:23
habe mir alle Vorschläge zu Herzen genommen, vor allem die von Delphi.Narium..
Sehr gut, ist doch nicht schlecht, wenn man sich gleich ne halbe Seite Code spart oder?

Zu der Frage:
Delphi-Quellcode:
.. FROM Materialrollen LEFT JOIN
     [Material-Stamm] ON Materialrollen.[Mat-Nr] = [Material-Stamm].[Mat-Nr]
Ist bereits left join, also "offen" für Lücken. Da ich Dein Datenmodel nicht kenne, aber sinngemäß die tabellennamen lesen kann, scheint mir, der left join ist falsch rum. Also entweder ein right join daraus machen oder die Tabellen Nennung tauschen


so
Delphi-Quellcode:
.. FROM Materialrollen RIGHT JOIN
     [Material-Stamm] ON Materialrollen.[Mat-Nr] = [Material-Stamm].[Mat-Nr]
oder
so
Delphi-Quellcode:
.. FROM [Material-Stamm] LEFT JOIN
      Materialrollen ON Materialrollen.[Mat-Nr] = [Material-Stamm].[Mat-Nr]
Gruß, Jo
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#14

AW: ADOQuery berechnetes Feld

  Alt 5. Jun 2019, 16:34
Es kann auch sein, dass die Zusatzbedingungen den Left Join "kaputt machen".

Einfachste Möglichkeit das zu testen, wäre aus der Where Bedingung ein Teil des Joins zu machen. Also 'where' raus und große Klammer ab ..on..

Und nur weil wir grad dabei sind, vielleicht lässt Du Dich ja auch noch von Formatierung überzeugen.
Gruß, Jo
  Mit Zitat antworten Zitat
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#15

AW: ADOQuery berechnetes Feld

  Alt 5. Jun 2019, 16:40
Hallo jobo,

habe ich geändert, jedoch ohne Veränderung in der Tabelle.

Gruß, Luckner
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#16

AW: ADOQuery berechnetes Feld

  Alt 5. Jun 2019, 17:23
Was hast Du geändert? Ich habe so 3-4 Vorschläge gemacht.
Und was bedeutet, "ohne Änderung in der Tabelle"?
Gruß, Jo
  Mit Zitat antworten Zitat
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#17

AW: ADOQuery berechnetes Feld

  Alt 6. Jun 2019, 10:53
Hallo jobo,

Zitat:

.. FROM [Material-Stamm] LEFT JOIN
Materialrollen ON Materialrollen.[Mat-Nr] = [Material-Stamm].[Mat-Nr]
Ergebnis: selbe Anzahl des Materials und die selben Ergebnisse aus der Multiplikation.

Wenn Material aufgebraucht ist, merke ich, wenn alle (Materialrollen.DatumAb <> NULL)ist. Also alle Materialrollen ein Abgangsdatum haben. Andererseits könnte es auch funktionieren, wenn man herausfindet, dass wenn das Produkt aus der Multiplikation = 0 ist. Irgendwas in dieser Richtung.

Gruß, Luckner
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#18

AW: ADOQuery berechnetes Feld

  Alt 6. Jun 2019, 11:45
Ist jetzt nur geraten.

Sinngemäß in etwa sowas?
SQL-Code:
SELECT
  Materialrollen.[Mat-Nr],
  sum((Materialrollen.[Arb-Breite] / 1000) * Materialrollen.lfm) as BESTAND,
  [Material-Stamm].Bezeichnung,
  Aufgebraucht
from (
  SELECT
    Materialrollen.[Mat-Nr],
    Materialrollen.[Arb-Breite],
    Materialrollen.lfm,
    [Material-Stamm].Bezeichnung,
    'neinas Aufgebraucht
  FROM Materialrollen
  LEFT JOIN [Material-Stamm] ON Materialrollen.[Mat-Nr] = [Material-Stamm].[Mat-Nr]
  WHERE (
             ([Material-Stamm].[Lieferanten-Nr] = ' + Lieferantennr.Text + ')
         AND ([Material-Stamm].aktuell= -1)
         AND (Materialrollen.DatumAb is NULL)
         AND (Materialrollen.[Arb-Breite] > 179)
        )
  UNION ALL
  SELECT
    Materialrollen.[Mat-Nr],
    Materialrollen.[Arb-Breite],
    Materialrollen.lfm,
    [Material-Stamm].Bezeichnung,
    'jaas Aufgebraucht
  FROM Materialrollen
  LEFT JOIN [Material-Stamm] ON Materialrollen.[Mat-Nr] = [Material-Stamm].[Mat-Nr]
  WHERE (
             ([Material-Stamm].[Lieferanten-Nr] = ' + Lieferantennr.Text + ')
         AND ([Material-Stamm].aktuell= -1)
         AND (Materialrollen.DatumAb is not NULL)
         AND (Materialrollen.[Arb-Breite] > 179)
        )
)
group by
  Materialrollen.[Mat-Nr],
  [Material-Stamm].Bezeichnung
  Aufgebraucht
Die aufgebrauchten Materialien sollten nun in der Spalte "Aufgebraucht" einen entsprechenden Hinweise, bestehend aus den Wörten 'ja' bzw. 'nein', stehen haben.

Geändert von Delphi.Narium ( 6. Jun 2019 um 16:30 Uhr) Grund: von TE gefundenen Fehler behoben.
  Mit Zitat antworten Zitat
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#19

AW: ADOQuery berechnetes Feld

  Alt 6. Jun 2019, 12:01
Hallo Delphi.Narium,

Hut ab von meiner Seite. Ich werde versuchen diese Anweisung zu übertragen und auszuprobieren. Wenn mein Kopf dann etwas freier ist, dann werde ich versuchen diese Anweisung auch zu verstehen. Dieses sprengt meine Grenzen. Vielen Dank für die Mühe.

Gruß, Luckner
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#20

AW: ADOQuery berechnetes Feld

  Alt 6. Jun 2019, 12:13
Eventuell geht auch dashier, ist kürzer und dürfte resourcen- / laufzeitschonender sein:
SQL-Code:
SELECT
  MaterialNr,
  sum((Arbeitsbreite / 1000) * lfm) as BESTAND,
  Bezeichnung,
  Aufgebraucht
from (
  SELECT
    Materialrollen.[Mat-Nr] As MaterialNr
    Materialrollen.[Arb-Breite] As Arbeitsbreite,
    Materialrollen.lfm,
    [Material-Stamm].Bezeichnung,
    case Materialrollen.DatumAb when null then 'neinelse 'jaend as Aufgebraucht
  FROM Materialrollen
  LEFT JOIN [Material-Stamm] ON Materialrollen.[Mat-Nr] = [Material-Stamm].[Mat-Nr]
  WHERE (
             ([Material-Stamm].[Lieferanten-Nr] = ' + Lieferantennr.Text + ')
         AND ([Material-Stamm].aktuell= -1)
         AND (Materialrollen.[Arb-Breite] > 179)
        )
)
group by
  MaterialNr,
  Bezeichnung,
  Aufgebraucht

Geändert von Delphi.Narium ( 6. Jun 2019 um 16:42 Uhr) Grund: Fehler (hoffentlich) behoben, war ja auch zu dämlich :-(
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 21:43 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