![]() |
Datenbank: Firebird • Version: 2.03 • Zugriff über: FibPlus
Fallen bei Umstellung auf FibPlus
Hallo allerseits.
Wie einige andere hier auch muß ich jetzt in den saueren Apfel beißen und alte aber noch aktive Projekte auf eine neue DB umstellen. Ich hab mich für Delphi 2007 mit FibPlus 6.8 entschieden und dank Hansa kann ich mich wohl noch an die Sammelbestellung angehängen. Für uns FibPlus/Firebird Newbies starte ich hier mal einen Thread mit den Fallen, in die man dabei so tappen kann. Hier ein paar zunächst "unerklärliche" Error-Meldungen: 1a) Error: "Client SQL dialect 1 does not support reference to DATE datatype" Tritt auf beim Zugriff auf eine Tabelle mit Feldern vom Typ Date, obwohl in pFIBDatabase SQLDialect =3 gesetzt ist 1b) Error :"Transaction is active" Tritt auf beim Öffnen einer Transaction einer 2.FIBDatabase-Komponente 1c) Error : FIBDatabase kann nicht geschlossen werden, weil eine Transaktion noch geöffnet ist. Tritt auf beim Schließen der FIBDatabase-Komponenten 1d) FirebirdServer Error: "INET/inet_error: send errno = 10054" Der Fehler ist irreführend und tritt eigentlich bei Netzwerkstörungen auf, die aber nicht vorliegen! vermutete Ursache 1a - 1d : Bug in FibPlus6.8 bei zwei FIBDatabase-Komponenten in einer Anwendung hanspeter hatte zu 1b bereits einen Thread geöffnet. meine Lösung: Zunächst bis Bugfix keine zwei FIBDatabase-Komponenten gleichzeitig verwenden. 2) Error: "COLUMN 2 is specified without a name". Tritt auf beim Aufruf von TpFIBDataSet.RecordCountFromSrv oder wenn in TpFIBDataSet.PrepareOptions das Flag psAskRecordCount gesetzt ist. vermutete Ursache: RecordCountFromSrv führt vor der eigentlichen Abfrage folgende SQL aus:
SQL-Code:
Die kann Firebird dann nicht verarbeiten, wenn die selectquery bereits ein COUNT ohne "AS" enthält.
"SELECT COUNT(*) FROM ( selectquery )"
meine Lösung: COUNT(EinFeld) nur mit "AS" verwenden. Gruß HeDoc |
Re: Fallen bei Umstellung auf FibPlus
1a) Lagere die Datembank in ein Skript aus und erstelle sie neu als Dialect 3 Datenbank.
1b) FIBplus scheint eine interne Transaktionssteuerung zu haben. Die interne Transaktion solltest du abschalten oder diese verwenden. 1c) Commit oder Rollback ausführen |
Re: Fallen bei Umstellung auf FibPlus
Hallo mkinzler,
leider helfen deine Tips nicht. 1a) Die Datenbanken sind neue Dialect 3 Datenbanken.(Sonst hätte sie den Typ Date auch nicht) 1b) Für den Effekt ist es egal, ob die Transaktion automatisch oder manuell ausgelöst wird. 1c) Die Transaction kann NICHT abgeschlossen werden, weder durch Commit noch durch Rollback. Offensichtlich habe ich mich nicht klar ausgedrückt: Die Fehler 1a-1d treten NUR auf, wenn eine 2. Database-Komponente in der Anwendung verwendet wird. Gruß HeDoc |
Re: Fallen bei Umstellung auf FibPlus
Glaube nicht an einen Bug. Bei mir geht das alles. Teilweise habe ich solche Fehlermeldungen noch nicht gesehen. Statt jetzt aber dubiosen Fehlern nachzulaufen, so wurde das gemacht (für 2 getrennte Datenbanken) : für 2 Databases auch 2 DataModules. Jedes DataModule enthält eine FIBDatabase und eine dafür zuständige FIBTransaction. Dann sind da noch die jweils benötigten Datasets drin. Da ich mittlerweile ca. 50-100 Stored Procedures brauche sind die auch wieder in 2 DataModule ausgelagert. Natürlich könnte man das auch in ein einziges Datenmodul zusammenquetschen, oder sogar auf einer Form, aber dann verliert man leicht den Überblick.
Bleibt SQL-Dialect 1/3 : die Fehlermeldungen werden nicht von FIBPlus generiert, sondern von Firebird. Du hast im Programm zwar Dialect 3 eingestellt, aber es handelt sich offensichtlich um eine Dialect 1 DB. Am besten mit IBExpert überprüfen. Da dürften die selben Fehler kommen. Wie bzw. womit wurden die 2 DBs überhaupt erzeugt ? |
Re: Fallen bei Umstellung auf FibPlus
Hallo Hansa,
Zitat:
Die beiden pFibDatabases lagen auch in verschiedenen Modulen (1x Datamodul, 1x in einem zur Laufzeit erzeugten Formular mit eigenen pFibTransactions). Vielleicht liegts an der FibPlus-Version? Ich hab zur Zeit noch die FibPlus Trial-Version: "6.8.424" Zitat:
Trotzdem sind es Dialect 3 Datenbanken! Ich kann z.B. Felder mit Type: Date oder Time anlegen, schreiben und auslesen, die SQLSyntax: "SELECT COUNT(*) FROM ( subselectquery )" wird ausgeführt, SELECT CURRENT_TIME , current_date FROM TABLE wird ausgeführt... Alles das würde mit Dialect 1 nicht funktionieren. Und das wichtigste, wäre die Datenbank nur Dialect1 dann kämen die o.g. Fehler immer und nicht nur dann wenn 2 pFibDatabases aktiv sind. Ich verwende SQL-Manager 2005 lite von EMS. Datenbanken Erzeugt mit IBPump.exe. Gruß HeDoc |
Re: Fallen bei Umstellung auf FibPlus
IBPump.exe = BDE = Dialect 1
DATE gabs auch in Dialect 1, dort gab es keinen Timestamp (Typ Date war was jetzt Timestamp ist) |
Re: Fallen bei Umstellung auf FibPlus
Ihr seid ja unglaublich schwer zu überzeugen!
Zitat:
"SELECT COUNT(*) FROM ( subselectquery )" führt bei Dialect 1 nicht zu einem Fehler? Und für die letzten Zweifler die Abfrage mit ISQL: SQL> CONNECT 'PV' user 'sysdba' password 'masterkey'; Database: 'PV', User: sysdba SQL> SHOW SQL DIALECT; Client SQL dialect is set to: 3 and database SQL dialect is: 3 SQL> Gruß HeDoc |
Re: Fallen bei Umstellung auf FibPlus
Hallo,
dann mache ein Bsp-Projekt, hänge die beiden DB's an. Heiko |
Re: Fallen bei Umstellung auf FibPlus
Habe mal auf die schnelle DB erstellt (Dialect 1). Allerdings mit IBExpert. Dann das übliche : neue Form, Database, Transaction und DataSet drauf. Im OI alles schön eingestellt, aber connected noch false. Dataset eingestellt auf Dialect 3, also falsch. Sobald diese DB auf connected gesetzt wird, dann ändert sich automatisch im FIBDataSet der Dialect von 3 auf 1. Offensichtlich werden diese Informationen direkt aus der DB gelesen. Ansonsten : siehe hoika.
Noch was : die verwendete Table wurde quasi geclont. D.H. ich habe sie aus bestehender Dialect 3 DB extrahiert und das Script für die Dialect 1 DB ablaufen lassen. Aus dem ursprünglichen TimeStamp-Feld wurde automatisch ein Date. Die erste DDL-Zeile bei der Dialect 3 DB sieht so aus : Zitat:
|
Re: Fallen bei Umstellung auf FibPlus
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ihr werdet mit euerem Unglauben, was das Dialect 1 verhalten angeht, recht haben! Ich hab nach dem Vorschlag von hoika mal eine TestApp mit zwei völlig neuen DB geschrieben. Die Dialect 1 Effekte treten darin NICHT auf! Ich kann es im Original nicht mehr nachvollziehen, weil ich die Routinen, die ich zunächst nur umstellen wollte, mittlerweile komplett neu geschrieben und die 2. database zunächst rausgeschmissen hab. Ich gehe jetzt mal davon aus, dass ich den Fehler selbst verursacht hab, z.B. nach Wechsel zwischen verschiedenen Datenbanken den Dialect nicht auf 3 gesetzt. Der Error :"Transaction is active" taucht aber auch in der TestApp auf, witzigerweise abhängig davon, in welcher Reihenfolge die Transaktionen der 2 Databases geöffnet und geschlossen werden! Im Anhang ist die Testanwendung mit den Databases zum rumspielen. Gruß HeDoc |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:47 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 by Thomas Breitkreuz