Autor Beitrag
MarkusB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68



BeitragVerfasst: Fr 26.12.08 21:07 
Moin, moin!

Ich weiß, dass hier ein paar Spezialisten auf dem Gebiet „Absolute Database“ rumtoben. Deswegen habe ich die große Hoffnung, dass mir hier geholfen wird. Zur Sache…

Ich habe eine SQL-Abfrage gebastelt die im Allgemeinen folgenden Aufbau hat:

ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
select
        ……………
        ……………
from
        select
        ……………
        ……………
        from
        group by 

        union

        select
        ……………
        ……………
        from ……………
        full outer join on  ……………
        group by 
        order by

group by 
order by

Also die Abfrage ist ein gruppierter und sortierter „select“ aus einem Ergebnis einer „union“. Das Ganze wird zur Laufzeit zusammen gestrickt und ausgeführt. Leider ist die Abfrage angeblich fehlerhaft und ich bekomme folgende Fehlermeldung „Cannot determine expression type – Native error: 30238“.

Während der Fehlersuche habe ich den Abfrage-Text direkt vor der Ausführung (aus dem Programm heraus) in eine Textdatei gespeichert. Später habe ich den Inhalt der Datei in den Dbmanager kopiert und die Abfrage mit Erfolg ausgeführt. Keine Probleme!

Also meine Fragen:
Hatte jemand von Euch so ein Problem?
Was ist da falsch gelaufen?
Wie lässt sich das Problem lösen?

Viele Grüße
Markus
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Fr 26.12.08 23:18 
Hört sich nach BDE an, stimmts? Die BDE ist zu blöd für solche Queries.

_________________
Na denn, dann. Bis dann, denn.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 26.12.08 23:22 
Erstell für deine Union ne View und selecte die View. Ferner verwende was richtiges für Datenbanken und keine BDE :wink:

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
MarkusB Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68



BeitragVerfasst: Sa 27.12.08 15:55 
Moin, moin!

Vielen Dank für Eure Hinweise.

@ alzaimar
Absolute Database ist keine BDE. Ist aber als der einfache, schnelle, kompakte und robuste Ersatz dafür gedacht.

@BenBE
Tja. Ich würde das gerne mit Views machen. Leider kennt Absolute Database keine Views. Statt dessen stellt sie „memory tables“ zur Vrfügung die etwas ähnliches sind. Ich nutze das nicht, weil das zu viel Aufwand wäre für das was ich erreichen will. Das was ich gerade entwickle ist eine einfache Applikation. Ich will nicht zu viel Arbeit darein stecken und deswegen auch die Absolute Database.

Zurück zu meinem Problem, das ich mittlerweile gelöst habe. Das Problem war, das der DBManager wahrscheinlich die in ihm geschriebene SQL-Abfragen optimiert/verbessert bevor er sie an die DB-Engine zur Ausführung weiterleitet. Nachdem ich ein paar fehlende „casts“ in die SQL-Abfrage reingepflanzt habe, funktioniert sie auch in der Applikation.

Danke für Euer Interesse

Gruß Markus
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 27.12.08 18:40 
ABS DB ist eben nicht ganz so problemlos, wie der Hersteller glauben machen will (deshalb hab ich es nach ein paar Tests auch wieder verworfen und bin letztendlich bei Firebird gelandet und geblieben).
WPs
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 29.12.08 19:16 
Hi Markus,
ich hätte schon eine Vermutung was da falsch läuft.
Aber
Zitat:
...Textdatei gespeichert. Später habe ich den Inhalt der Datei in den Dbmanager kopiert und die Abfrage mit Erfolg ausgeführt. Keine Probleme!

erscheint mir seltsam. Könntest du mal den/die string(s) aus den selects angeben?
Werner
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Di 30.12.08 09:16 
user profile iconMarkusB hat folgendes geschrieben Zum zitierten Posting springen:
Absolute Database ist keine BDE. Ist aber als der einfache, schnelle, kompakte und robuste Ersatz dafür gedacht.
...
das der DBManager wahrscheinlich die in ihm geschriebene SQL-Abfragen optimiert/verbessert bevor er sie an die DB-Engine zur Ausführung weiterleitet. Nachdem ich ein paar fehlende „casts“ in die SQL-Abfrage reingepflanzt habe, funktioniert sie auch in der Applikation.

q.e.d :rofl:

_________________
Na denn, dann. Bis dann, denn.
MarkusB Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68



BeitragVerfasst: Di 30.12.08 14:40 
Moin, moin!

@WPs
Den aktuellen Text einer Query kannst Du aus der Applikation heraus in eine Textdatei mit Hilfe des folgenden Befehls (Absolute Database) speichern:

ausblenden Delphi-Quelltext
1:
ABSQuery1.SQL.SaveToFile("ABSQery1.txt");					


Das Feature ist bei der Fehlersuche äußerst hilfreich. Ob der Befehl nur für die Absolute Database spezifisch ist, weiß Ich nicht. Aber ich denke, dass auch andere DB ähnliches bieten.

Wie ich schon geschrieben habe, habe ich das Problem schon gelöst. Ich danke Dir für Dein Interesse und poste den kompletten Abfragetext da Du ihn anschauen wolltest:

ausblenden volle Höhe SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
select feld01,
       feld02,
       feld03,
       min(feld04) as feld04,
       min(feld05) as feld05,
       cast(sum(feld06), currency) as feld06,
       cast(sum(feld07), currency) as feld07,
       cast((sum(feld06) - sum(feld07)), currency) as feld08
       
from
       select t1.feld01 as feld01,
              t1.feld02 as feld02,
              t1.feld03 as feld03,
              min(t1.feld04) as feld04,
              min(t1.feld05) as feld05,
              cast(sum(t1.feld09), currency) as feld06,
              cast(0.0, currency) as feld07
       from tabelle01 as t1
       where t1.feld01 = 'konstante01'
       and t1.feld02  <> 'konstante01'
       group by feld01, feld02, feld03

       union

       select t1.feld01 as feld01,
              t1.feld02 as feld02,
              t1.feld03 as feld03,
              min(t1.feld04) as feld04,
              min(t1.feld05) as feld05,
              cast(0.0, currency) as feld06,
              cast(case when sum(t2.feld09) is null then 0.0 else sum(t2.feld09) end, currency) as feld07
       from tabelle01 as t1 full outer join tabelle02 as t2
       using (feld01, feld03)
       where t1.feld01 = 'konstante01'
       and t1.feld02  <> 'konstante01'
       group by feld01, feld02, feld03

where feld01  = 'konstante01'
  and feld02 <> 'konstante01'

group by feld01, feld02, feld03
order by feld01, feld02, feld03


@alzaimar
Trotz einigen Schwierigkeiten die ich mit der Absolute Database habe (die im großen Teil durch meine Unwissenheit verursacht sind) finde ich die Aussage:

Zitat:

Absolute Database ist keine BDE. Ist aber als der einfache, schnelle, kompakte und robuste Ersatz dafür gedacht.


vollkommen richtig.

Es ist ziemlich verständlich, dass ein einfach gehaltene Datenbank-System (bzw. Eingine) irgendwann auf seine Grenzen stößt. Um klar zu stellen: meine einfache Applikation und viele andere auch werden trotzdem ganz bestimmt nicht alle Möglichkeiten der Datenbank ausschöpfen. Ich meine, dass die Absolute Database sich für kleine und einfache Datenbank Applikationen sehr gut eignet.

Gruß Markus