| Autor |
Beitrag |
MarkusB
      
Beiträge: 68
|
Verfasst: 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:
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
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: 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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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 
_________________ 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 
      
Beiträge: 68
|
Verfasst: 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
|
Verfasst: 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
|
Verfasst: 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
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Di 30.12.08 09:16
_________________ Na denn, dann. Bis dann, denn.
|
|
MarkusB 
      
Beiträge: 68
|
Verfasst: 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:
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:
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
|
|
|