Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL: Betrag ermitteln (https://www.delphipraxis.net/20186-sql-betrag-ermitteln.html)

sepp001 14. Apr 2004 13:57


SQL: Betrag ermitteln
 
Hallo,

gibt es eine Möglichkeit, in Paradox per SQL den Betrag einer Zahl zu ermitteln (also ihren Wert unabhängig vom Vorzeichen)?

Ciao,
sepp001

Leuselator 14. Apr 2004 14:29

Re: SQL: Betrag ermitteln
 
bin nicht sicher, ob Paradox das mitmacht aber wenn ja, dann geht es so:
SQL-Code:
SELECT ABS(Feldname) AS Betrag
  FROM Tabelle
Gruß

sepp001 14. Apr 2004 14:34

Re: SQL: Betrag ermitteln
 
Das ist ja [edit] leider [/edit] das Problem: diese Funktion steht nicht zur Verfügung. Naja, werde ich mir was anderes einfallen lassen müsen.

Trotzdem vielen Dank!

Ciao,
sepp001

shmia 14. Apr 2004 15:02

Re: SQL: Betrag ermitteln
 
Ich würde ja Folgendes vorschlagen:
SQL-Code:
Select SQRT(feld*feld) AS Betrag FROM Tabelle
aber das kann Paradox (local SQL) ja auch nicht. :wall:

Robert_G 14. Apr 2004 15:08

Re: SQL: Betrag ermitteln
 
Wäre auch ziemlich krass, ihn jedesmal eine Wurzel rechnen zu lassen... :mrgreen:
Schaue dir doch mal den von r_Kerber so oft empfohlenen ADS Localserver an.
Der kann IMHO auch deine Paradox-tabellen verarbeiten.

sepp001 14. Apr 2004 15:12

Re: SQL: Betrag ermitteln
 
Hallo,

da gibt es leider 2 Probleme:

a) kann ich mir das Wurzelziehen wegen Rundungsdifferenzen nicht erlauben (wir haben ein Kassensytem auf dem Markt) und

b) setzen wir extern entwickelte Komponenten aus Sicherheitsgründen nur sehr ungern ein.

Wir haben jetzt einfach die Berechnung in Delphi verändert.

Ciao,
sepp001

Robert_G 14. Apr 2004 15:16

Re: SQL: Betrag ermitteln
 
ADS Local ist eine br<auchbare Desktop DB.
Die BDE hat so viel mit Sicherheit (vor allem Dateisicheerheit!) zu tun, wie G.W. Bush mit durchdachter Politik.
Außerdem unterstützt ADS IMHO den kompletten ANSI-SQL92-Standard, die BDE streckt schon alle Viere von sich wenn es um den Betrag einer Zahl geht.

kiar 14. Apr 2004 15:20

Re: SQL: Betrag ermitteln
 
vielleicht kannst du den typ casten.
SQL-Code:
select cast(betrag as integer)
from  Tabelle
local Sql müsste das casten unterstützen.

raik

sepp001 15. Apr 2004 09:57

Re: SQL: Betrag ermitteln
 
Hallo,

ein Type-Casting hilft mir nicht weiter, da ich nur das negative Vorzeichen (so vorhanden) verschwinden lassen will. Und eine andere Datenbank kommt aus Kompatibilitätsgründen bei Kunden nicht in Frage.

Ciao,
sepp001

shmia 15. Apr 2004 10:16

Re: SQL: Betrag ermitteln
 
Zitat:

Zitat von sepp001
Und eine andere Datenbank kommt aus Kompatibilitätsgründen bei Kunden nicht in Frage.

Paradox ist keine richtige Datenbank, sondern nur ein Tabellenformat mit Indexdateien ! :pale:
Überlege es dir nochmals; mit Paradox kommst du auf keinen grünen Zweig.
Falls du z.B. Autoincrement-Felder verwendest, hast du im harten Praxiseinsatz
schon verloren (alle paar Monate oder Wochen muss repariert werden).

sepp001 15. Apr 2004 12:27

Re: SQL: Betrag ermitteln
 
Hallo,

ich weiss mittlerweile ziemlich gut, was Paradox ist. Und das Produkt läuft bereits seit mehr als 5 Jahren ohne Probleme beim Kunden. Ausserdem ist es nicht meine Entscheidung, was für eine Datenbank eingesetzt wird. Das Migrieren auf eine andere Datenbank (geplant: irgendwann vielleicht mal Firebird auf Linux-Server) würde uns momentan zuviel Entwicklungszeit kosten.

Ciao,
sepp001

Leuselator 15. Apr 2004 14:21

Re: SQL: Betrag ermitteln
 
Also Sepp - wenn Du auf Paradox festgelegt bist, mußt Du wohl tricksen.
Wenn Du ein eindeutiges Schlüsselfeld hast, und Paradox "Union All" kennt, könntest folgendes versuchen:
SQL-Code:
  SELECT A.idFeld
       , max(A.DerBetrag) as Betrag

    FROM (SELECT idFeld
               , DeinWunschfeld As DerBetrag
            FROM Tabelle

           UNION ALL

          SELECT idFeld
               , (DeinWunschFeld * -1) As DerBetrag
            FROM Tabelle
       ) A
GROUP BY A.idFeld
Du selectierst id und Betrag, sowie id und negativer Betrag, vereinigst diese ergebnisse mit Union und gruppierst dann nach id (reduzierst also die gedoppelten Datensätze wieder auf einen) und holst Dir mit "max" den höchsten Wert (immer positiv).

Ende meines ParadoxLateins

Gruß

MrSpock 15. Apr 2004 21:26

Re: SQL: Betrag ermitteln
 
Hallo Sepp,

ich meine, dass Local SQL keine verschachtelten SELECTS zulässt, was aber funktioniert ist:

SQL-Code:
select CAST(TRIM(LEADING "-" FROM CAST(wert as char(10)))as integer) from test
Also einfach in String umwandeln, das - Zeichen "wegtrimmen" und zurückverwandeln).

sepp001 16. Apr 2004 14:42

Re: SQL: Betrag ermitteln
 
Hallo,

@MrSpock: Die Idee ist super, nur leider würde genau das zu einem geschachtelten SELECT führen. *ärger*

Wie gesagt, das Problenm ist bereits per Delphi gelöst.
Trotzdem vielen Dank!

Ciao,
sepp001

MrSpock 16. Apr 2004 16:41

Re: SQL: Betrag ermitteln
 
Hallo sepp001,

die Anweisung selbst ist ja noch kein verschachteltes SELECT. Es kann natürlich sein, dass du aus dieser Datenmenge etwas auswählen willst, aber auch das muss noch nicht zwangsweise in einem verschachteltes SELECT Statement geschehen.

OK, du hast es ja bereits gelöst, aber ich bin noch nicht überzeugt, dass sich dein Problem nicht mit local SQL lösen lässt.


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