Einzelnen Beitrag anzeigen

Luckner

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

ADOQuery berechnetes Feld

  Alt 3. Jun 2019, 13:59
Datenbank: Access • Version: 2008 • Zugriff über: ADOQuery
Hallo,

folgende Procedure:

Delphi-Quellcode:
procedure TForm1.ButtonMaterialSuchenClick(Sender: TObject);
var BestandMaterialNummer, BestandMaterial : real;
begin
  Datamodule1.ADOQueryGejoliste.Close;
  Datamodule1.ADOQueryGejoliste.SQL.Clear;
  Datamodule1.ADOQueryGejoliste.SQL.Add('SELECT [Material-Stamm].[Mat-Nr], [Material-Stamm].Bezeichnung, [Material-Stamm].[Lieferant Bezeichnung], ');
  Datamodule1.ADOQueryGejoliste.SQL.Add('[Material-Stamm].aktuell');
  Datamodule1.ADOQueryGejoliste.SQL.Add('FROM [Material-Stamm]');
  Datamodule1.ADOQueryGejoliste.SQL.Add('WHERE (([Material-Stamm].[Lieferanten-Nr]= ' + Lieferantennr.Text + ') AND ([Material-Stamm].aktuell= -1))');

  Datamodule1.ADOQueryGejoliste.Open;
  Datamodule1.ADOQueryGejoliste.Last;
  Datamodule1.ADOQueryGejoliste.First;

  BestandMaterial := 0;

  while not Datamodule1.ADOQueryGejoliste.Eof do
  begin
    Datamodule1.ADOQueryRollenJoinLagerplatz.Active := False;
    Datamodule1.ADOQueryRollenJoinLagerplatz.SQL.Clear;
    Datamodule1.ADOQueryRollenJoinLagerplatz.SQL.Add('SELECT DISTINCTROW Materialrollen.[Arb-Breite], Materialrollen.lfm, Materialrollen.[Mat-Nr], ');
    Datamodule1.ADOQueryRollenJoinLagerplatz.SQL.Add('Materialrollen.Rollennummer, Materialrollen.Mutterrolle, Materialrollen.DatumAb, Materialrollen.GrundAb, ');
    Datamodule1.ADOQueryRollenJoinLagerplatz.SQL.Add('Materialrollen.DatumZu, Materialrollen.GrundZu, ');
    Datamodule1.ADOQueryRollenJoinLagerplatz.SQL.Add('Materialrollen.DatumWE, Rollenlager.Lagerplatz, RollenPlanung.Kommentar, RollenPlanung.AuftragPlanung, ');
    Datamodule1.ADOQueryRollenJoinLagerplatz.SQL.Add('RollenPlanung.RestLaenge, RollenPlanung.RestBreite FROM (Materialrollen LEFT JOIN Rollenlager ON ');
    Datamodule1.ADOQueryRollenJoinLagerplatz.SQL.Add('Materialrollen.Rollennummer = Rollenlager.Rollennummer) LEFT JOIN RollenPlanung ');
    Datamodule1.ADOQueryRollenJoinLagerplatz.SQL.Add('ON Materialrollen.Rollennummer = RollenPlanung.Rollennummer where ((Materialrollen.[Mat-Nr] = ' + Datamodule1.ADOQueryGejolisteMatNr.AsString + ') and (Materialrollen.DatumAb is NULL) and (Materialrollen.[Arb-Breite] > 179))');

    Datamodule1.ADOQueryRollenJoinLagerplatz.Open;
    Datamodule1.ADOQueryRollenJoinLagerplatz.Last;
    Datamodule1.ADOQueryRollenJoinLagerplatz.First;

    BestandMaterialNummer := 0;
    while not Datamodule1.ADOQueryRollenJoinLagerplatz.Eof do
    begin
      BestandMaterialNummer := BestandMaterialNummer + ((Datamodule1.ADOQueryRollenJoinLagerplatzArbBreite.AsInteger/1000) * Datamodule1.ADOQueryRollenJoinLagerplatzlfm.AsInteger);
      Datamodule1.ADOQueryRollenJoinLagerplatz.Next;
    end;

   // ShowMessage('BestandMaterialNummer = ' + FloatToStr(BestandMaterialNummer));

    Datamodule1.ADOQueryGejoliste.Edit;
    Datamodule1.ADOQueryGejolisteBESTAND.AsFloat := BestandMaterialNummer;
    Datamodule1.ADOQueryGejoliste.Post;
    Datamodule1.ADOQueryGejoliste.Next;
  end;

  GridGejo.Visible := true;
end;
An Datamodule1.ADOQueryGejoliste hängt ein DBGrid an, mit folgenden Felder:
Mat-Nr:
Bezeichnung
Bestand

Das Feld "Bestand" ist ein 'Calculated-Feld' in Datamodule1.ADOQueryGejoliste. Die anderen Felder werden aus dem 1.-tem SELECT eingetragen.
Es funktioniert soweit fast alles, jedoch das 'Datamodule1.ADOQueryGejoliste.Post;' nicht, bzw. in der Tabelle 'GridGejo' kann ich es nicht sehen.

Gruß, Luckner
  Mit Zitat antworten Zitat