AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken C++ Paradox DB: YEAR-Funktion geht nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Paradox DB: YEAR-Funktion geht nicht

Ein Thema von chullain · begonnen am 14. Jul 2006 · letzter Beitrag vom 17. Jul 2006
Antwort Antwort
Seite 1 von 2  1 2      
chullain

Registriert seit: 14. Jul 2006
8 Beiträge
 
#1

Paradox DB: YEAR-Funktion geht nicht

  Alt 14. Jul 2006, 07:21
Datenbank: Paradox • Zugriff über: aus BC++ heraus
Hallo,

ich hab mir in Access ein SQL-Statement gebastelt und würde das gerne auf eine Paradox-Datenbank anwenden. Leider kalppt es nicht, gibt es eine ähnliche Funktion wie in Access für die YEAR-Funktion: Das ist mein SQL-Statement:

SELECT DISTINCT Max(Konto_Stand.Stichtag) AS MaxvonStichtag, Sum(Konto_Stand.Umsatz) AS [Summe von Umsatz]
FROM Konten LEFT JOIN Konto_Stand ON Konten.LftNr=Konto_Stand.LftNr_Konto
WHERE (((Konten.Kunden_Nr)=1) AND ((Konto_Stand.Stichtag)<#6/30/2005#))
GROUP BY Year(Konto_Stand.Stichtag)
ORDER BY Max(Konto_Stand.Stichtag);

Wäre um jede Hilfe dankbar...greife aus einer BC++ - Anwendung darauf zu.

Gruss,
chullain
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Paradox DB: YEAR-Funktion geht nicht

  Alt 14. Jul 2006, 07:40
Herzlich willkommen in der Delphi-PRAXiS, chullain.

Halte mal Ausschau nach der eingebauten Funktion EXTRACT:

EXTRACT(YEAR FROM datum) Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
chullain

Registriert seit: 14. Jul 2006
8 Beiträge
 
#3

Re: Paradox DB: YEAR-Funktion geht nicht

  Alt 14. Jul 2006, 08:19
Hallo,

vielen Dank auf jeden Fall schon mal. Habe das SQL-Statement ausgeführt und kriege die Fehlermeldung:

Project .... raised exception class EDBEngineError with message 'Capability not supported'

weiss irgendwie nix mit anzufangen, das Statement sieht jetzt so aus:

SELECT DISTINCT Max(Konto_Stand.Stichtag) AS MaxvonStichtag, Sum(Konto_Stand.Umsatz) AS [Summe von Umsatz]
FROM Konten LEFT JOIN Konto_Stand ON Konten.LftNr=Konto_Stand.LftNr_Konto
WHERE (((Konten.Kunden_Nr)=1) AND ((Konto_Stand.Stichtag)<#6/30/2005#))
GROUP BY EXTRACT(YEAR FROM Konto_Stand.Stichtag)
ORDER BY Max(Konto_Stand.Stichtag);

Gruss,
art1978
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Paradox DB: YEAR-Funktion geht nicht

  Alt 14. Jul 2006, 08:37
In Access werden unorthodoxe Bezeichner in eckige Klammern verpackt, die BDE verlangt Quotes erlaubt keine Leerstellen in Korrelationsnamen. Die Datumsangaben machst du sicherer per Parameter und auf jeden Fall nicht so wie in Access. Habe es nicht getestet, aber vielleicht sind so weniger Syntaxfehler im Statement:

SQL-Code:
SELECT DISTINCT MAX(ks.Stichtag) AS MaxvonStichtag, SUM(ks.Umsatz) AS UmsatzSumme
FROM Konten k
LEFT JOIN Konto_Stand ks ON k.LftNr = ks.LftNr_Konto
WHERE k.Kunden_Nr = :kunden_nr AND ks.Stichtag < :stichtag
GROUP BY EXTRACT(YEAR FROM ks.Stichtag)
ORDER BY MAX(ks.Stichtag)
Überprüfen müsste man noch, ob die Bedingung "kleiner" in der WHERE-Klausel nicht "kleiner oder gleich" sein müsste, welchen Effekt DISTINCT bei deiner Abfrage hat und ob du wirklich einen OUTER JOIN brauchst.

Nachtrag: Wenn du nach Jahren gruppieren möchtest, dann sollte das Jahr auch in der Spaltenauswahl auftauchen.

Noch ein Nachtrag: Die BDE lässt in der GROUP BY-Klausel nur "echte", keine "berechneten" Spalten zu. Du wirst da mit einer BDE-View arbeiten müssen:

SQL-Code:
/* ksview.sql */
SELECT LftNr_Konto, Stichtag, Umsatz, EXTRACT(YEAR FROM Stichtag) as Jahr
FROM Konto_Stand
Danach sollte das hier funktionieren:

SQL-Code:
SELECT ks.Jahr, MAX(ks.Stichtag) AS Stichtag, SUM(ks.Umsatz) AS Umsatz
FROM Konten k
LEFT JOIN "ksview.sql" ks ON k.LftNr = ks.LftNr_Konto
WHERE k.Kunden_Nr = :kunden_nr AND ks.stichtag < :stichtag
GROUP BY jahr
ORDER BY jahr
Übrigens würde sich dein Thema unter der Rubrik Datenbanken wohler fühlen. Wenn LftNr als Abkürzung für Lauf-Ente Nr steht, dann hoffe ich für dich, dass kein Tierschützer mitliest.

marabu
  Mit Zitat antworten Zitat
chullain

Registriert seit: 14. Jul 2006
8 Beiträge
 
#5

Re: Paradox DB: YEAR-Funktion geht nicht

  Alt 14. Jul 2006, 14:17
Hi,

vielen Dank für die erstklassige Hilfe, nur v. stell ich mich zu doof an, aber wie kann ich die SQL-Datei am Besten einbinden. So wie in Deinem Beispiel funktioniert das auf jeden Fall nicht (sorry, kann noch nicht viel in BDE)

Gruss,
chullain
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Paradox DB: YEAR-Funktion geht nicht

  Alt 14. Jul 2006, 16:09
Zitat von chullain:
Hi,

vielen Dank für die erstklassige Hilfe, nur v. stell ich mich zu doof an, aber wie kann ich die SQL-Datei am Besten einbinden.
Schreib die Abfrage in die Eigenschaft Query.SQL.Text
Zitat:
(sorry, kann noch nicht viel in BDE)
Also in die Einarbeitung in die BDE würde ich mir auch keine Mühe mehr geben.
Markus Kinzler
  Mit Zitat antworten Zitat
chullain

Registriert seit: 14. Jul 2006
8 Beiträge
 
#7

Re: Paradox DB: YEAR-Funktion geht nicht

  Alt 16. Jul 2006, 19:13
Hallo, das Problem ist, das ich einen Datenmodul eingebunden hab, und dort ein TQuery eben, dieses TQuery, fülle ich dann mit SQl aus der Source heraus auf, etwa so:

DataModule1->Q2_SQL->SQL->Add("Select..."ksquery.sql"...GROUP BY Jahr")

Dann meckert er mir natürlich diese SQL-Datei an...

Zu Deiner Frage, ob ich mir das nochmal antun sollte mit dem BDE, ist halt ein älteres Projekt, und das soll jetzt aufgefrischt werden, und das ist halt mit BDE entwickelt worden.

Gruss,
chullain
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Paradox DB: YEAR-Funktion geht nicht

  Alt 16. Jul 2006, 19:16
Zitat von chullain:
Hallo, das Problem ist, das ich einen Datenmodul eingebunden hab, und dort ein TQuery eben, dieses TQuery, fülle ich dann mit SQl aus der Source heraus auf, etwa so:

DataModule1->Q2_SQL->SQL->Add("Select..."ksquery.sql"...GROUP BY Jahr")

Dann meckert er mir natürlich diese SQL-Datei an...

Zu Deiner Frage, ob ich mir das nochmal antun sollte mit dem BDE, ist halt ein älteres Projekt, und das soll jetzt aufgefrischt werden, und das ist halt mit BDE entwickelt worden.

Gruss,
chullain
Du mußt entweder den Inhalt der ksquery.sqlin die SQL-Eigenschaft schreiben:

Code:
DataModule1->Q2_SQL->SQL->Text := "Select...");
oder ihn da zur Laufzeit reinladen.
Code:
DataModule1->Q2_SQL->SQL->LoadFromFile("ksquery.sql");
Markus Kinzler
  Mit Zitat antworten Zitat
chullain

Registriert seit: 14. Jul 2006
8 Beiträge
 
#9

Re: Paradox DB: YEAR-Funktion geht nicht

  Alt 16. Jul 2006, 19:43
d.h. nach dem Befüllen der Eigenschaft, wie rufe ich dann mein "richtiges" SQL-Statement auf?

Also einmal;

Code:
DataModule1->Q2_SQL->SQL->Text("
SELECT LftNr_Konto, Stichtag, Umsatz, EXTRACT(YEAR FROM Stichtag) as Jahr
FROM Konto_Stand
");
und dann

Code:
DataModule1->Q2_SQL->SQL->Add("
SELECT ks.Jahr, MAX(ks.Stichtag) AS Stichtag, SUM(ks.Umsatz) AS Umsatz
FROM Konten k
LEFT JOIN ????? ks ON k.LftNr = ks.LftNr_Konto
WHERE k.Kunden_Nr = :kunden_nr AND ks.stichtag < :stichtag
GROUP BY jahr
ORDER BY jahr")
Danke Dir
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Paradox DB: YEAR-Funktion geht nicht

  Alt 16. Jul 2006, 19:49
Code:
 d.h. nach dem Befüllen der Eigenschaft, wie rufe ich dann mein "richtiges" SQL-Statement auf?
Was meinst du mit "richtigem" Statement?
Code:
DataModule1->Q2_SQL->SQL->Text := "
SELECT LftNr_Konto, Stichtag, Umsatz, EXTRACT(YEAR FROM Stichtag) as Jahr
FROM Konto_Stand
";
Willst du die beiden Abfragen zusammenjoinen?
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 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