Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Rechnungsproblem (https://www.delphipraxis.net/79285-sql-rechnungsproblem.html)

manfred_h 19. Okt 2006 16:37

Datenbank: Firebird • Version: 1.5 • Zugriff über: Fibplus

SQL Rechnungsproblem
 
Hallo zusammen

hab hier ein Problem. Seit einiger Zeit versuche ich aus 2 Tabellen 2 Werte
voneinander abzuziehen.
Irgendwie stehe ich auf dem Schlauch. Wie komme ich an den Wert damit ich
mit ihm die rechnung machen kann?

Delphi-Quellcode:
  DM_bibeladmin.Art_value.close;
  DM_bibeladmin.Art_value.SelectSQL.Clear;
  DM_bibeladmin.Art_value.SelectSQL.Add('SELECT SUM(IN_COUNT)FROM BIBEL_ART_D WHERE '+
                                          '(( ID_ART = :ID) AND ( I_O = 1))');

  i := strtoInt(dm_bibeladmin.Art_value.??????);
  //
  DM_bibeladmin.Art_value.close;
  DM_bibeladmin.Art_value.SelectSQL.Clear;
  DM_bibeladmin.Art_value.SelectSQL.Add('SELECT SUM(IN_COUNT)FROM BIBEL_ART_D WHERE '+
                                          '(( ID_ART = :ID) AND ( I_O = 0))');

  o := strtoInt(dm_bibeladmin.Art_value.??????);

PS: mit der SQLabfrage erhalte ich einen Wert.
SQL-Code:
('SELECT SUM(IN_COUNT)FROM BIBEL_ART_D WHERE '+
                                          '(( ID_ART = :ID) AND ( I_O = 1))');

Shalom
Manfred

mkinzler 19. Okt 2006 16:44

Re: SQL Rechnungsproblem
 
Delphi-Quellcode:
DM_bibeladmin.Art_value.SelectSQL.Add('SELECT SUM(IN_COUNT) as summe FROM BIBEL_ART_D WHERE '+
                                          '(( ID_ART = :ID) AND ( I_O = 1))');

  i := strtoInt(dm_bibeladmin.Art_value.FieldByName('Summe').Value;);

alzaimar 19. Okt 2006 16:48

Re: SQL Rechnungsproblem
 
Zitat:

Zitat von mkinzler
Delphi-Quellcode:
DM_bibeladmin.Art_value.SelectSQL.Add('SELECT SUM(IN_COUNT) as summe FROM BIBEL_ART_D WHERE '+
                                          '(( ID_ART = :ID) AND ( I_O = 1))');
DM_bibeladmin.Art_value.SelectSQL.Active := True; // <---- das fehlte noch (die Query muss ja zum Server)
  i := strtoInt(dm_bibeladmin.Art_value.FieldByName('Summe').Value;);


mkinzler 19. Okt 2006 16:49

Re: SQL Rechnungsproblem
 
Zitat:

Zitat von alzaimar
Zitat:

Zitat von mkinzler
Delphi-Quellcode:
DM_bibeladmin.Art_value.SelectSQL.Add('SELECT SUM(IN_COUNT) as summe FROM BIBEL_ART_D WHERE '+
                                          '(( ID_ART = :ID) AND ( I_O = 1))');
DM_bibeladmin.Art_value.SelectSQL.Active := True; // <---- das fehlte noch (die Query muss ja zum Server)
  i := strtoInt(dm_bibeladmin.Art_value.FieldByName('Summe').Value;);


So genau hab ich mir den Code nicht angeschaut. Stimmt natürlich!

manfred_h 19. Okt 2006 17:36

Re: SQL Rechnungsproblem
 
Besten dank für Eure schnelle Hilfe !!!

konnte es mit Eurer Hilfe so lösen:
Delphi-Quellcode:
  DM_bibeladmin.Art_value.close;
  DM_bibeladmin.Art_value.SelectSQL.Clear;
  DM_bibeladmin.Art_value.SelectSQL.Add('SELECT SUM(IN_COUNT) as summe FROM BIBEL_ART_D WHERE '+
                                          '(( ID_ART = :ID) AND ( I_O = 1))');
  DM_bibeladmin.Art_value.Active := True;

  i := strtoInt (DM_bibeladmin.Art_value.FieldByName('Summe').Value);
  //
  //
  DM_bibeladmin.Art_value.close;
  DM_bibeladmin.Art_value.SelectSQL.Clear;
  DM_bibeladmin.Art_value.SelectSQL.Add('SELECT SUM(OUT_COUNT) as summe FROM BIBEL_ART_D WHERE '+
                                          '(( ID_ART = :ID) AND ( I_O = 0))');
  DM_bibeladmin.Art_value.Active := True;

  o := strtoInt (DM_bibeladmin.Art_value.FieldByName('Summe').Value);
  //
  //
  c := i - o;
  DM_bibeladmin.Bibel_Art.Edit;
  DM_bibeladmin.Bibel_Art.FieldByName('STOCK').Value := c ;
  DM_bibeladmin.Bibel_Art.CommitUpdToCach;
ein kleines Problem bleibt noch wenn nicht drinn ist NULL dann giebts ein Problem.


Shalom
Manfred

Hansa 19. Okt 2006 20:35

Re: SQL Rechnungsproblem
 
Du meinst die "Summe" ?

Dann müßte man so ungefähr prüfen :

Delphi-Quellcode:
if not DM_bibeladmin.Bibel_Art.FieldByName('SUMME').IsNull then
...

mkinzler 19. Okt 2006 20:40

Re: SQL Rechnungsproblem
 
Ich würde nicht die Summe auf NULL prüfen, sondern verhindern das Null-Werte summiert werden:
SQL-Code:
SELECT SUM(IN_COUNT) as summe FROM BIBEL_ART_D WHERE (( ID_ART = :ID) AND ( I_O = 1)) and ( IN_COUNT is not NULL);
Sonst führt schon ein leerer Record zu keinem Ergebnis mehr.

Hansa 19. Okt 2006 21:01

Re: SQL Rechnungsproblem
 
Könnte zu unsicher sein. Wird die Summe auf NULL geprüft, wie bei mir, dann ist das Ergebnis = NULL, sofern auch nur EIN Datensatzfeld NULL ist. Dann könnte man eine Meldung bringen : "Genaue Summe kann nicht ermittelt werden, weil mind. ein Feld undefiniert". Habe ich 20 Zahlen und will irgendwas vorhandenes addieren, 10 Zahlen sind undefiniert (also=NULL), dann wird eben eine Summe über alles was <> NULL ist, zurückgeliefert ! Eventuell ist das auch hinzunehmen, wenn es selten vorkommt und die Summe nicht zu 100% stimmen muß. Kleiner aber feiner Unterschied, den man je nach Anforderung wissen sollte.

mkinzler 19. Okt 2006 21:07

Re: SQL Rechnungsproblem
 
Natürlich kommt es auf den Inhalt (Bedeutung) dieses Feldes an. Die beste Lösung wäre natürlich die Nullwerte mittels Constraint oder default zu verhindern.

raiguen 19. Okt 2006 21:57

Re: SQL Rechnungsproblem
 
Moin :-)
Hm, bin grad schwer am Grübeln... Habe mich noch nie bei einem SQL_statemnet bzgl der SUM()-Funktion um NULL-Werte der zu summierenden Felder gestört bzw Gedanken gemacht - sprich: selbst wenn ein Feld NULL ist, dann hat mich bzw in keinster Weise gestört. Woraus ich somit schließe: der SQL-Server handelt die NULL-Werte entsprechend selbsttätig, so dass IMMER korrekte Ergebnisse herauskommen.
Sicherlich sollten Feldwerte - speziell bei Feldern, die zur Berechnung herangezogen werden - keine NULL-Werte zulässig sein; ich belege diese dann meist wenn 0 vor bzw jen nach Verwendungszweck auch mit anderen 'Default'-Werten; somit bin ich immer auf der sicheren Seite *denkich*

Soweit dazu...


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:19 Uhr.
Seite 1 von 2  1 2      

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