Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Berechnung (https://www.delphipraxis.net/36533-sql-berechnung.html)

Hansi 21. Dez 2004 13:12


SQL Berechnung
 
Hey,

Über folgende Code öffne ich eine SQL-Abfrage.

Delphi-Quellcode:
...
Query1.Active:=False;
Query1.DatabaseName:='.\DB\';
Query1.SQL.Clear;
Query1.SQL.Add('SELECT Datum, Wert FROM Datenbank WHERE Datum BETWEEN :von AND :bis ORDER BY Datum');
Query1.ParamByName('von').AsDate:=StrToDate(Edit1.Text);
Query1.ParamByName('bis').AsDate:=StrToDate(Edit2.Text);
Query1.Open;
...
1. Nun möchte ich auf einen Wert bei einem bestimmten Datum zugreifen. Wie funktioniert dies?

2. Wie kann ich die Summe der Spalte Wert berechnen?

Stevie 21. Dez 2004 13:15

Re: SQL Berechnung
 
Hi Hansi,

1. Es gibt die Methode Locate von TDataSet, aber du musst schauen, ob sie implementiert ist und funktioniert!
2. Entweder durch die Datenmenge iterieren und summieren oder gleich ne eigene Sql-Abfrage.

MfG
Stevie

Hansi 21. Dez 2004 13:19

Re: SQL Berechnung
 
Kannst Du mir bitte für beide Punkte ein Beispiel geben?

Stevie 21. Dez 2004 13:27

Re: SQL Berechnung
 
1.
Delphi-Quellcode:
begin
  if Query.Locate('DATUM', Datum, []) then
    {...}
end;
2.
Delphi-Quellcode:
begin
  Query.First;
  Summe := 0;
  while not Query.Eof do
  begin
    Summe := Summe + Query.FieldValues['WERT'];
    Query.Next;
  end;
end;

Hansi 21. Dez 2004 13:35

Re: SQL Berechnung
 
Super! Vielen Dank!

kann ich das auch so machen?
Delphi-Quellcode:
Query1.SQL.Add('SELECT sum(Wert) FROM Datenbank WHERE Datum BETWEEN :von AND :bis');
Bei mir kommt nämlich die Fehlermeldung: Keine Übereinstimung der Typen im Ausdruck. Was ist falsch?

Ist Deine Variante der Summe schneller als mit SQL?

Stevie 21. Dez 2004 13:38

Re: SQL Berechnung
 
Ich denke, SQL wird schneller sein!
Von welchem Datentyp ist den Wert?

Hansi 21. Dez 2004 13:41

Re: SQL Berechnung
 
Währung!


Edit: In Datenbank war String nicht Währung eingestellt! :wall:

Hansi 21. Dez 2004 13:54

Re: SQL Berechnung
 
Wie bekomme ich die "SQL-Summe" mit INSERT INTO in die Datenbank, und zwar an eine ganz bestimmte Stelle(wo Datum =... ist!)?

Stevie 21. Dez 2004 13:55

Re: SQL Berechnung
 
Zitat:

Zitat von Hansi
Wie bekomme ich die "SQL-Summe" mit INSERT INTO in die Datenbank, und zwar an eine ganz bestimmte Stelle(wo Datum =... ist!)?

Was willst du genau machen?

Hansi 21. Dez 2004 14:01

Re: SQL Berechnung
 
Summe von Wert in einem bestimmten Zeitraum

Bsp:
Summe von Wert zwischen dem 1.10. bis 1.11.
Die Summe in DB an die Stelle 1.11. schreiben

Stevie 21. Dez 2004 14:10

Re: SQL Berechnung
 
Du willst wahrscheinlich einen neuen Satz erzeugen? Denn einfach die Summe in Wert zu schreiben erscheint mir nicht sehr logisch!
SQL-Code:
insert into datenbank(wert, datum) values(:wert, :datum)
Einfach in Query.SQL.Text schreiben und mit ExecSQL ausführen.

Hansi 21. Dez 2004 14:16

Re: SQL Berechnung
 
Nein ich will keinen neuen Satz erzeugen.
Will "nur" die Summe des letzten Monats in die dritte Spalte der DB einfügen

Datenbank-Struktur:

Datum Wert Summe
...
1.10. 100 _____
...

Er soll die Summe des letzten Monats bilden und diese Summe in die Datenbank schreiben.

Kann ich auch mit der Summe weiterrechen?
kann ich Ihn im Edit-Feld anzeigen lassen?

Stevie 21. Dez 2004 14:22

Re: SQL Berechnung
 
Aso!
SQL-Code:
update datenbank set summe = :summe where datum = :datum
Die anderen Fragen würden hier den Threadrahmen sprengen, lieber neuen öffnen.

Hansi 21. Dez 2004 14:30

Re: SQL Berechnung
 
Du schreibst Summe=:Summe
Stimmt das so? Spaltenname(Summe) ist gleich Variable(:Summe)???
Wie weisse ich der SQL-Abfrage eine variable zu?!? :wiejetzt:

Stevie 21. Dez 2004 14:38

Re: SQL Berechnung
 
Den SQL in dein Query-Objekt, Params setzen und ExecSQL!

Hansi 21. Dez 2004 14:42

Re: SQL Berechnung
 
Sorry aber könntest Du das was Du meinst in meinen obigen Code einfügen, ich kapier nämlich nicht die Bohne was Du mir sagen willst.

Stevie 21. Dez 2004 14:51

Re: SQL Berechnung
 
Drück ich mich so missverständlich aus? :shock:
Delphi-Quellcode:
with Query1 do
begin
  Active := False;
  SQL.Text := 'update datenbank set summe = :summe where datum = :datum';
  ParamByName('summe').AsInteger := Summe;
  ParamByName('datum').AsDate := Datum;
  ExecSQL;
end;
Guck dir mal in der OH die Klasse TQuery und die Vorgängerklasse TDataSet an, dann dürfte noch einiges klar werden!


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