Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird mit IBObjects (https://www.delphipraxis.net/80970-firebird-mit-ibobjects.html)

hanspeter 18. Nov 2006 11:08

Datenbank: Firebird • Version: 1.5/2.0 • Zugriff über: IBObjects

Firebird mit IBObjects
 
Hallo,

ich ärgere mich gerade mal wieder mächtig.
Ein Anwendung bringt an einer Stelle Fehler, die schon ewig funktionierte.

Ich habe ein Query , Datasource und ein Grid.

Die Anweisung

Delphi-Quellcode:
Select A.Fild, B.Field, C.Field from FILE A
left outer Join FILE1  B on(B.ID = A.ID)
left outer Join FILE2 C on(C.ID = A.ID)
Where ...
bringt mir immer ein Zugriffsfehler.
Das erste Feld des zweiten Join wird nicht gefunden.
Es kommt die Meldung C.Field nicht vorhanden.

Tausche ich die Reihenfolge der Join, dann verschiebt sich der Fehler.
B.Field wird nicht gefunden.

Das Projekt hat schon ewig funktioniert, der Fehler taucht erst jetzt auf.
Kopiere ich die Abfrage in IBExperts, dann liefert sie mir die korrekte Ergebnismenge.

Hat wer so etwas schon mal gehabt?

Mit Gruß

Peter

hanspeter 18. Nov 2006 20:30

Re: Firebird mit IBObjects
 
Hat keiner eine Idee, woran es liegen kann, das plötzlich keine kaskadierten Joins mehr gehen.

Ich habe ein kleines Testprogramm geschrieben, welches den Fehler bereits im Entwurfsmodus bringt.
Wenn wer mit FB 2.0 und IBObjects arbeitet und könnte das Programm mal ausprobieren?

Mit Gruß
Peter

TBx 18. Nov 2006 20:36

Re: Firebird mit IBObjects
 
Zitat:

Zitat von hanspeter
Ich habe ein kleines Testprogramm geschrieben, welches den Fehler bereits im Entwurfsmodus bringt.
Wenn wer mit FB 2.0 und IBObjects arbeitet und könnte das Programm mal ausprobieren?

Hmm, dann gib doch mal her ;-)

Gruß

Thomas

hanspeter 19. Nov 2006 07:43

Re: Firebird mit IBObjects
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von onlinekater
Hmm, dann gib doch mal her ;-)

Gruß

Thomas

Ok ich habe das Projekt mal als Zip angehangen.
Der Fehler kommt bereits im Entwurfsmodus.
Aber interessanter Weise kommt der Fehler nur, wenn die Query mit dem Grid verbunden ist.
Trenne ich die Verbindung, egal an welcher Stelle, dann geht es.

Wie gesagt diese Stelle geht bereits seit 100 Jahren. Der Fehler kam beim letzten Compilieren
mit D2006 und das betroffene Modul war garnicht geöffnet.

Gruß Peter

(Anmerkung die Datenbank ist aus Platzgründen leer.)

DelphiDeveloper 20. Nov 2006 18:39

Re: Firebird mit IBObjects
 
Hallo Hans Peter,
habe mir die Sourcen heruntergeladen und extra deinetwegen FB2 installiert!

Wenn du in deinem SQL Statement die Klammern weglaesst dann funzt es auch!

Hier das veraenderte Statement:

SQL-Code:
SELECT S.SID,S.SPID,S.SRID,S.STARTFOLGE,
        S.SHAKEN,S.SABTEILUNG,S.FIXPLATZ,P.KOPFNR,
        P.PNAME,R.RNAME,R.VEREIN,R.NATION
        FROM START S

LEFT OUTER JOIN PFERD P ON S.SPID=P.PID
LEFT OUTER JOIN REITER R ON S.SRID=R.RID
WHERE SPRUEFUNG = 3
ORDER BY S.STARTFOLGE
Habe es mit FB 2.0 Classicserver, IBO 46 und D2006 Architect ausprobiert.

Gruß
DD

DelphiDeveloper 20. Nov 2006 18:41

Re: Firebird mit IBObjects
 
Sorry double posting

hanspeter 21. Nov 2006 09:01

Re: Firebird mit IBObjects
 
Vielen Dank für Deine Bemühungen.
Ich komme erst am Donnerstag dazu das auszuprobieren.
Wäre schon komisch. Da wurde in IBObjects sicherlich was geändert.
Ich habe das auch mit FB 1.5 probiert.
Da kommt der gleiche Fehler.
Das Projekt funktioniert schon mehre Jahre.
Hoffentlich sind nicht noch weitere Inkompatibilitäten in den neueren
Versionen.

Ineressanter Weise tritt ja dieser Fehler nur auf, wenn ein Grid mit der
Query verbunden ist.


Also nochmals tausend Dank für Deine Unterstützung.


Mit Gruß
Peter

TBx 21. Nov 2006 10:58

Re: Firebird mit IBObjects
 
Hallo Hanspeter!

Die Klammersetzung ist es nicht ganz.

Dein Statement sieht so aus:
SQL-Code:
Select S.SID,S.SPID,S.SRID,S.STARTFOLGE,S.SHAKEN,S.SABTEILUNG,S.FIXPLATZ,P.KOPFNR,
P.PNAME,R.RNAME,R.VEREIN,R.NATION FROM START s
left outer join PFERD p on(S.SPID=p.PID)
left outer Join Reiter r on(S.SRID=r.RID)
WHERE SPRUEFUNG = 3
ORDER BY s.STARTFOLGE
Da fehlt schlicht und ergreifend ein Leerzeichen zwischen dem on und der (.

Ich gehe mal davon aus, dass Jason den Parser für Firebird angepasst hat.
In älteren Versionen hat er das Fehlen des Leerzeichens tolleriert.

Gruß

Thomas

hanspeter 24. Nov 2006 08:46

Re: Firebird mit IBObjects
 
Zitat:

Zitat von onlinekater

Ich gehe mal davon aus, dass Jason den Parser für Firebird angepasst hat.
In älteren Versionen hat er das Fehlen des Leerzeichens tolleriert.

Hallo,
Das Verhalten sollte nicht dem SQL Standard entsprechen.
Schaut man im Quelltext nach, dann wird nicht der Tabellenname sondern das Wort Join als Tabellenname geparst.
Ich habe Jason ein email geschrieben.

Er hat geantwortet:

This is a parsing problem.
get my latest 4.7 beta release and test it to see what happens. I'd like to know if I have already resolved it. I gutted out my parser and put it back together with the new features I needed for Firebird 2.0. I won't say I rewrote it, but that wouldn't be a huge exaggeration.

Also ist das Problem erst mal erledigt bzw. in Arbeit.

Gruß Peter


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