![]() |
Datenbank: Interbase • Zugriff über: SQL - Abfrage
Subtraktion in einer SQL Abfrage
Hallo erstmal,
ich bin hier ziehmlich neu und bräuchte dringend mal eure Hilfe wegen einer SQL Abfrage. Kleine Einführung: Habe eine Datenbank namens listedza in dieser befinden sich meherere Spalten unter anderem idteil,vorgang und menge. Jetzt soll ich via einer sql abfrage folgendes abfragen: anhand einer nummer(idteil) soll die Summe von menge anhand eines Vorgangs(UZU) ermitellt werden. Ich habe folgt angefangen:
Delphi-Quellcode:
nur hier bekomm ich schon einen Fehler wenn ich nur eine Zahl in das Feld von der Prozedur eingebe.
procedure TForm1.TeilenrEChange(Sender: TObject);
begin //ListeDZA IBQuery3.SQL.Clear; IBQuery3.SQL.Add('SELECT SUM(menge)as S_ZU FROM listedza WHERE (VORGANG = UZU);' ); IBQuery3.Open; end; Ich würde mich sehr freuen wenn mir jmd in diesem Forum helfen könnte. Mfg Manu [edit=alcaeus]Delphi-Tags eingefuegt. In Zukunft bitte selbst machen, danke. Mfg, alcaeus[/edit] |
Re: Subtraktion in einer SQL Abfrage
Zeig auch deinen fehlerhaften Quellcode.
Vermutlich musst du mit IntToStr die Zahl in einen String umwandeln. IBQuery3.SQL.Add('SELECT SUM(menge) +'+IntToStr(a)+' as S_ZU FROM listedza WHERE (VORGANG = UZU);' ); |
Re: Subtraktion in einer SQL Abfrage
Versuch mal hiermit, ich glaub du musst nach dem SELECT auch das FEld angeben, nach dem du Filtern willst, also "vorgang". Weiterhin würde ich UZU in Anführungszeichen setzen, da es sich wohl um einen String handelt. ZAhlen kann man theoretisch einfach als String übergeben, ohne Anführungszeichen.
SELECT SUM(menge) as S_ZU, vorgang FROM listedza WHERE VORGANG = "UZU";' |
Re: Subtraktion in einer SQL Abfrage
Danke für die prompte Antwort leider funktioniert dasmit den Anführungszeichen oder das Umwandeln nicht.
Hier tritt das Problem auf:
Delphi-Quellcode:
Hat jmd noch ne Idee?? Warum die SQL - Abfrage nicht geht?
procedure TForm1.TeilenrEChange(Sender: TObject);
begin //ListeDZA IBQuery3.SQL.Clear; IBQuery3.SQL.Add('SELECT SUM(menge)as S_ZU FROM listedza WHERE (VORGANG = UZU);' ); IBQuery3.Open; end; Mfg Manu |
Re: Subtraktion in einer SQL Abfrage
??? Ich verstehe hier nichts mehr? Haben deine Fragen irgendwas mit dem Thementitel (Subtraktion) zu tuen. Und ohne die Fehlermeldung stochern wir hier nur im Dunkeln. :wall:
Achso: :party: Willkommen bei der Delphi-PRAXiS :) |
Re: Subtraktion in einer SQL Abfrage
Sag doch mal, wie die Fehlermeldung lautet? Was klappt nicht mit den Gänsefüsschen? Obacht, ich mein nicht das ' sondern das ", wenn ich Gänsefüsschen sage. Muss eigentlich gehen. Und ohne behandelt der SQL-Prozessor das als Befehl oder Platzhalter und nicht als String.
|
Re: Subtraktion in einer SQL Abfrage
Hallo!
Der Fehler liegt wohl eher nicht in Delphi, sondern in deinem SQL-Statement. Daher prüf zuerst bitte erst einmal dein SQL Statement in einem normalen Tool. Wenn SUM oder andere Aggregierungsfunktionen verwendet werden, muß ein "group by" erscheien!
SQL-Code:
evtl geht auch (Oracle und Mysql)
SELECT SUM(menge)as S_ZU FROM listedza WHERE (VORGANG = UZU) group by menge;
SQL-Code:
also in dem Fall Spalte 1
SELECT SUM(menge)as S_ZU FROM listedza WHERE (VORGANG = UZU) group by 1;
|
Re: Subtraktion in einer SQL Abfrage
Es ist genau anders rum ! Aggregatfunktionen sollen nicht in das group by. Nur andere NICHT-Aggregatfelder.
Das geht:
SQL-Code:
und das auch :
select SUM (BESTAND) AS B FROM LAGER
SQL-Code:
select ID, SUM (BESTAND) AS B FROM LAGER group by ID
|
Re: Subtraktion in einer SQL Abfrage
Hallo Manu,
so sollte es funktionieren:
Delphi-Quellcode:
Grüße vom marabu
procedure TForm1.TeilenrEChange(Sender: TObject);
begin // ListeDZA with IBQuery3 do begin SQL.Text := 'SELECT SUM(menge)as S_ZU FROM listedza WHERE VORGANG = ''UZU'''; Open; end; end; |
Re: Subtraktion in einer SQL Abfrage
vielen dank dieses Statement funktioniert nun kommt die Frage wegen der Subtraktion:
nun müsste ich eine andere Spalte der tabelle(lstedza) summieren(S_AB) und zwar müssen noch zusätzlich alle mit dem vorgang namens FAB summiert werden und dann brauch ich die Diffferenz von S_ZU und S_AB. Das ist mein eigentlich Problem, weil ich kaum Datenbanken zu tun habe .
Delphi-Quellcode:
Habt ihr da auch eine Hilfe für mich auf Lager? Danke für eure große Hilfe.
procedure TForm1.TeilenrEChange(Sender: TObject);
begin // ListeDZA with IBQuery3 do begin SQL.Text := 'SELECT SUM(menge)as S_ZU FROM listedza WHERE VORGANG = ''UZU'''; Open; end; end; P.s Sry, wenn das ganze bissl undeutlich ist. |
Re: Subtraktion in einer SQL Abfrage
Eine mögliche Vorgehensweise wäre:
Delphi-Quellcode:
Deine Differenzberechnung würde ich nicht im OnChange-Ereignis eines Edit-Feldes machen, da bei jedem einzelnen Zeichen, das du dort eingibst, das Ereignis gefeuert wird.
function TForm1.ZuMinusAb: integer;
var summeZu, summeAb: integer; begin with IBQuery3 do begin // Summe ZU berechnen SQL.Text := 'SELECT SUM(menge) FROM listedza WHERE VORGANG = ''UZU'''; Open; summeZu := Fields[0].AsInteger; // Summe AB berechnen SQL.Text := 'SELECT SUM(menge) FROM listedza WHERE VORGANG = ''FAB'''; Open; summeAb := Fields[0].AsInteger; Close; Result := summeZu - summeAb; end; end; Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz