Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Zugriff auf Memtable über Query (https://www.delphipraxis.net/211074-zugriff-auf-memtable-ueber-query.html)

schaumermal 24. Jul 2022 10:50

Datenbank: FireDAC • Version: 1 • Zugriff über: Query

Zugriff auf Memtable über Query
 
Hallo zusammen,

ich habe ein Programm welches mit FD MemTables arbeitet.
Nun möchte ich über eine Funktion auf die Tabelle zuzugreifen um Summen zu ermitteln


Select Sum (Amount) As Total from FDMemPosition Where FromWarehouseID = '+ QuotedStr(Warehouse) + ' And ArtNo = '+QuotedStr(ArtNo)

Ist sowas überhaupt möglich?
Falls Ja, wie lautet denn der Name der Tabelle?

In der Komponente der MemTable habe ich keinen Tabellennamen gefunden oder geht so was gar nicht.

mlc42 24. Jul 2022 12:04

AW: Zugriff auf Memtable über Query
 
Ja man kann das machen

dafür benötigt man eine SQLite Connection (Intern arbeitet LocalSQL mit SQLite) und ein TFDLocalSQL

z.B.:

AConnectionLocalSQL := TFDConnection.Create(Application);
AConnectionLocalSQL.ConnectionName := 'MEMORY';

AConnectionLocalSQL.Params.Values['DriverID'] := 'SQLite';

AConnectionLocalSQL.LoginPrompt := False;
AConnectionLocalSQL.Connected := True;

ALocalSQL := TFDLocalSQL.Create(Application);
ALocalSQL.Connection := AConnectionLocalSQL;
ALocalSQL.Active := True;

//jede Memorytabelle muss dann registriert werden
ALocalSQL.DataSets.Add.DataSet:=MyDataSet;

Zugriff innerhalb des SQL Ausdruckes dann über den Objektnamen selbst.

ol1uw 24. Jul 2022 16:53

AW: Zugriff auf Memtable über Query
 
ja oder man benutzt Aggregates

Delphi-Quellcode:
with FDMemTable1.Aggregates.Add do begin
  Expression := 'sum(sal + bonus)';
  Active := True;
end;
with FDMemTable1.Aggregates.Add do begin
  Expression := 'sum(sal + bonus)';
  IndexName := 'by_deps';
  Active := True;
end;
FDMemTable1.IndexName := 'by_deps';
FDMemTable1.AggregatesActive := True;

Label1.Caption := 'Total payments : ' + VarToStr(FDMemTable1.Aggregates[0].Value);
Label2.Caption := 'Current department payments : ' + VarToStr(FDMemTable1.Aggregates[1].Value);

haentschman 25. Jul 2022 05:13

AW: Zugriff auf Memtable über Query
 
Hallöle...8-)
...aber bitte ohne WITH. :warn:
Denkt immer daran... es lesen auch Kinder mit. :stupid::wink:

schaumermal 25. Jul 2022 10:38

AW: Zugriff auf Memtable über Query
 
Hallo zusammen,

ich habe noch nie mit Aggregates gearbeitet und mir diese eben angeschaut.
Ich habe hier eher den Eindruck gewonnen, dass es sehr ähnlich einem berechneten Feld ist UND nicht für die Ermittlung von Daten über mehrere Zeilen hinweg genutzt werden kann.

'Sum (Amount) Where FromWarehouseID = 1 And ArtNo = 99'

Ich will ja die Summe aller Werte aus der Spalte Amount ermitteln, wenn gewisse Felder übereinstimmen. In dem obigen Beispiel also WarehouseID und ArtNo.

Ist sowas auch möglich?
Jeder Versuch ist bisher gescheitert :cry:

himitsu 25. Jul 2022 11:05

AW: Zugriff auf Memtable über Query
 
Aggregates in FireDAC sind vermutlich bestimmt was Ähnliches, wie Aggregates oder Window-Functions im DBMS ... drum heißen sie wohl zufällig genauso und machen ausversehn das, wonach sie benannt sind "Zusammenfassen" :angle:

Rate mal was SUM ist.

ergeka 25. Jul 2022 11:08

AW: Zugriff auf Memtable über Query
 
Da hat mir das Thema 'Local SQL' weiter geholfen.

Gruß

Ralf


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