AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Fallen bei Umstellung auf FibPlus
Thema durchsuchen
Ansicht
Themen-Optionen

Fallen bei Umstellung auf FibPlus

Ein Thema von HeDoc · begonnen am 14. Nov 2007 · letzter Beitrag vom 16. Nov 2007
Antwort Antwort
HeDoc

Registriert seit: 11. Nov 2007
6 Beiträge
 
#1

Fallen bei Umstellung auf FibPlus

  Alt 14. Nov 2007, 19:28
Datenbank: Firebird • Version: 2.03 • Zugriff über: 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:
"SELECT COUNT(*) FROM ( selectquery )" Die kann Firebird dann nicht verarbeiten, wenn die selectquery bereits ein COUNT ohne "AS" enthält.
meine Lösung: COUNT(EinFeld) nur mit "AS" verwenden.

Gruß

HeDoc
Si tacuisses, philosophus mansisses
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Fallen bei Umstellung auf FibPlus

  Alt 14. Nov 2007, 19:36
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
Markus Kinzler
  Mit Zitat antworten Zitat
HeDoc

Registriert seit: 11. Nov 2007
6 Beiträge
 
#3

Re: Fallen bei Umstellung auf FibPlus

  Alt 14. Nov 2007, 23:04
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
Si tacuisses, philosophus mansisses
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: Fallen bei Umstellung auf FibPlus

  Alt 15. Nov 2007, 02:16
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 ?
Gruß
Hansa
  Mit Zitat antworten Zitat
HeDoc

Registriert seit: 11. Nov 2007
6 Beiträge
 
#5

Re: Fallen bei Umstellung auf FibPlus

  Alt 15. Nov 2007, 16:02
Hallo Hansa,


Zitat von Hansa:
Glaube nicht an einen Bug. Bei mir geht das alles.
Glaube ich dir gerne, bei mir gehts nicht.
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 von Hansa:
Bleibt SQL-Dialect 1/3,
stimmt, die Fehlermeldung stammt aus Firebird.
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
Si tacuisses, philosophus mansisses
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Fallen bei Umstellung auf FibPlus

  Alt 15. Nov 2007, 16:35
IBPump.exe = BDE = Dialect 1
DATE gabs auch in Dialect 1, dort gab es keinen Timestamp (Typ Date war was jetzt Timestamp ist)
Markus Kinzler
  Mit Zitat antworten Zitat
HeDoc

Registriert seit: 11. Nov 2007
6 Beiträge
 
#7

Re: Fallen bei Umstellung auf FibPlus

  Alt 15. Nov 2007, 18:11
Ihr seid ja unglaublich schwer zu überzeugen!

Zitat von mkinzler:
IBPump.exe = BDE = Dialect 1
DATE gabs auch in Dialect 1, dort gab es keinen Timestamp (Typ Date war was jetzt Timestamp ist)
Type Time, CURRENT_TIME , current_date auch?

"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
Si tacuisses, philosophus mansisses
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Fallen bei Umstellung auf FibPlus

  Alt 15. Nov 2007, 19:48
Hallo,

dann mache ein Bsp-Projekt,
hänge die beiden DB's an.


Heiko
Heiko
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: Fallen bei Umstellung auf FibPlus

  Alt 16. Nov 2007, 10:44
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:
/************************************************** ****************************/
/**** Generated by IBExpert 2006.08.17 16.11.2007 11:51:56 ****/
/************************************************** ****************************/

SET SQL DIALECT 3;
Dieses Set Dialect fehlt bei der Dialect 1 DB und wird anscheinend von FIBPlus ausgewertet.
Gruß
Hansa
  Mit Zitat antworten Zitat
HeDoc

Registriert seit: 11. Nov 2007
6 Beiträge
 
#10

Re: Fallen bei Umstellung auf FibPlus

  Alt 16. Nov 2007, 16:48
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
Angehängte Dateien
Dateityp: zip bspkompl_416.zip (707,6 KB, 9x aufgerufen)
Si tacuisses, philosophus mansisses
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:53 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