|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |
|
Invité de passage
![]() Antonio Fortuny Inscription : avril 2010 Messages : 10 ![]() |
Bonjour la liste.
J'ai un sérieux problème de fonctionnement de Firebird 2.1 (et 2.5) dans un Windows 7 (tant pro que ultimate) Installation: machine virtuelle dans un host ESX dans un gros serveur 4 gb mémoire, Windows 7 pro 32 bits anglais, rien de bien particulier; 1 admin et 1 user avec droits administrateur. Installation de Firebird 2.1.3 en mode manuel (fichier zip) unzip et copie des fichiers dans C:\Program Files\Firebird\Firebird 2.1 création d'un shortcut sur fbguard.exe avec paramètre "-a" dans la ligne de commande pour lancer firebird en mode application. copie d'une dll Application.dll dans le répertoire udf de firebird avec celles qui y sont déjà. lancement de fbguard: l'icône apparait dans le tray, tout OK Lancement de IBExpert création de connexions. tests de connexion: OK PUIS: création d'une connexion "Compta", sur une DB qui contient dans les triggers des appels à des UDF de Application.dll et ce depuis les triggers système active on transaction start ( et transaction commit et rollback) !! dès la connexion: plantage Citation:
1. le shutdown à travers de l'icone de FBguard ne tue pas le serveur. Il faut y aller manu military via le contrôleur de processus 2. il semble que la connexion n'est pas rompue car les propriétés de Firebird renseignent toujours une connexion active après le plantage ![]() alors: - le fichier Application.dll est bien dans le répertoire udf de Firebird - c'est le bon fichier dll avec le bon nom (copié d'un autre poste où elle fonctionne, binaire identique) - la DB est une DB copiée d'un autre poste où tout fonctionne à merveille l'ensemble (DB, UDF et Firebird) fonctionne parfaitement sur ma station de travail vista pro et sur des XP - les moteurs de Firebird sont lancés en mode application (ports différents) - la même DB et le même fichier dll fonctionnent avec 2.1 et 2.5, même en simultané dans deux sessions. Au vu des messages soit - la fonction n'existe pas (DATETIMETOSTR) ce qui est exclu - la dll n'est pas accessible par Firebird d'une manière que je ne parviens pas à m'expliquer avec 2.1 ET 2.5 installés manuellement en tous les deux actifs Si vous avez une solution sous le coude ou quelques idées elles seraient les bienvenues. Antonio. |
|
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 260 ![]() |
dans win7 il faut être super admin pour travailler sur ce qui est dans C:\Program Files
ceci peut expliquer cela
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#3 | |||
|
Invité de passage
![]() Antonio Fortuny Inscription : avril 2010 Messages : 10 ![]() |
Citation:
On a tout déménagé dans C:\Firebird 2.1 avec exactement le même résultat. Autre précision dans le même sens: Dans une nouvelle DB où la connexion ne pose pas de problèmes et qui n'utilise pas d' UDF nous avons procédé au test suivant: Code :
Code :
SELECT datetimetostr('now') FROM synchrodb; Par contre le query suivant s'exécute bien: où abs semble être une UDF décrite dans ib_udf.dll venant avec Firebird. Antonio. |
|||
|
|
00
|
|
|
#4 | |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 726 ![]() |
Citation:
En avez vous profité pour tester une autre fonction de Application.dll (j'imagine que vous en avez d'autres dedans.) Notamment s'il y a des fonctions sans string. Juste pour voir si c'est la fonction ou si c'est vraiment la DLL Qu'y a t'il dans le firebird.conf notamment pour "UdfAccess =" ? Dernière chose, ABS est maintenant une fonction intégrée depuis la version... 2.x. Donc votre test select abs(-123.12) from... ne prouve pas que firebird arrive à charger les UDF. |
|
|
|
00
|
|
|
#5 | ||
|
Invité de passage
![]() Antonio Fortuny Inscription : avril 2010 Messages : 10 ![]() |
Citation:
très simple: # #UdfAccess = Restrict UDF Citation:
Merci en tout cas de répondre Antonio. |
||
|
|
00
|
|
|
#6 | |||
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 726 ![]() |
Citation:
Ou même une fonction fournie dans les UDF de firebird comme Code :
Code :
SELECT addYear('now',1) FROM rdb$database; |
|||
|
|
00
|
|
|
#7 | ||||
|
Invité de passage
![]() Antonio Fortuny Inscription : avril 2010 Messages : 10 ![]() |
Bien vu.
Même erreur avec Code :
"SELECT addYear('now',1) FROM rdb$database;"
Citation:
re-soumission de la requête et tout fonctionne. Re-test avec trois autres fonctions de Application.dll et toujours la même erreur. les déclarations que j'ai ajoutées (extrait): Code :
Code :
query: SELECT code_semaine('now') FROM synchrodb Citation:
A en perdre le peu de latin qui me reste et je sens que ça va être une toute petite c....ie comme ça Merci de vous occuper de mon cas. Désespéré ? De Windoze, oui. Antonio. |
||||
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 726 ![]() |
Essayez de changer de firebird.conf
UdfAccess = Restrict c:\UDF Créez le répertoire UDF à la racine de C et placez y application.dll Arretez FB et relancez le. Normalement le Code :
SELECT addYear('now',1) FROM rdb$database; (permet de vérifier que le .conf à bien été pris en compte) Enfin testez votre fonction : Code :
SELECT CODE_SEMAINE ('now') FROM rdb$database; |
|
|
00
|
|
|
#9 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 260 ![]() |
les runtimes MSVC ont été installé sur cette machine ?
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#10 | |||
|
Invité de passage
![]() Antonio Fortuny Inscription : avril 2010 Messages : 10 ![]() |
Dans tout ce qui suit, Firebird a été (re-)installé via l'exe comme service sous un utilisateur ayant les droits d'administrateur (celui demandé lors de l'installation de W7).
FB a été testé pour l'exécution et fonctionne bien quand il n'y a pas d'accès aux fonctions UDF dans une dll externe. Le service a été ensuite désactivé et un shortcut a été crée sur fbguard.exe avec le paramètre -a pour un lancement comme application, lequel shortcut a été ensuite configuré pour être lancé comme administrateur. Les options de compatibilité ne sont pas activées, donc W7 32bits natif. Citation:
NB: l'ancien répertoire Firebird\UDF laissé tel quel mais sans Application.dll Citation:
Par contre si je vide Firebird\UDF alors là, oui, le query ne fonctionne plus avec l'habituel message invalid request BLR at offset 63. function addYear is not defined. module name or entrypoint could not be found. Citation:
Dernier test dérivé du vôtre: - stop du serveur - création de Firebird\UDF2 - déplacement des DLL de .\UDF --> .\UDF2, donc .\UDF est vide dans Firebird.conf: UdfAccess = Restrict UDF2 relancer le serveur Code :
SELECT addYear('now',1) FROM rdb$database; variante finale: - stop du serveur - on laisse tout tel quel - copie des DLL de .\UDF2 --> .\UDF - relancer le serveur Code :
SELECT addYear('now',1) FROM rdb$database; dans toutes les variantes tous les queries faisant appel à une fonction de Appplication.dll ne sont pas connues. Ces tests indiquent que: 1. le répertoire iniital .\UDF est hardcodé et constitue le défaut dans Firebird ce qu'indique le commentaire de UdfAccess 2. soit la définition de UdfAccess ne fonctionne pas quoique l'on y mette soit le ou les répertoires ne sont pas accessibles de Firebird pour une raison que j'ignore encore. 3. quel que soit le fichier dll ajouté au répertoire par défaut il semble ne pas être accessible http://www.developpez.net/forums/ima...es/sacrain.gifAntonio. |
|||
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Antonio Fortuny Inscription : avril 2010 Messages : 10 ![]() |
En fait lors des premiers test avec 2.5, j'ai vu un répertoire Win32 qui contenait un .msi: à toutes fins utiles, je l'avais installé et n'a pas été desinstallé depuis lors.
Par précaution encore j'ai téléchargé et exécuté vcredist_x86.exe. Cela n'a rien changé aux résultats. Touts les tests de mon post précédent ont été réalisés après cette installation. Antonio. |
|
|
00
|
|
|
#12 | |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 726 ![]() |
Citation:
|
|
|
|
00
|
|
|
#13 |
|
Invité de passage
![]() Antonio Fortuny Inscription : avril 2010 Messages : 10 ![]() |
|
|
|
00
|
|
|
#14 | ||||
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 726 ![]() |
A croire que ce n'est pas le bon firebird.conf ou bien qu'il n'arrive pas à le lire (vous fermez l'éditeur de firebird.conf avant de tester ?).
Sinon avez vous essayé de renommer votre application.dll en app.dll (nom de moins de 8 lettres). Et de vérifier le nom dans une fenetre "cmd". (histoire d'être certain que ce n'est pas un app.dll.dll). (oubien de renommer avec un .bat comme celui en dessous) Code renomer.bat :
Puis de refaire la déclaration Code :
Code :
SELECT CODE_SEMAINE ('now') FROM rdb$database; |
||||
|
|
00
|
|
|
#15 | |||||||||
|
Invité de passage
![]() Antonio Fortuny Inscription : avril 2010 Messages : 10 ![]() |
Citation:
Citation:
Citation:
Citation:
Citation:
Antonio. |
|||||||||
|
|
00
|
|
|
#16 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 260 ![]() |
c'est la dll qui doit avoir un probleme du genre une dépendance manquante
de toutes façons, franchement les UDF, il est préférable de s'en passer mais c'est une autre débat
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#17 |
|
Invité de passage
![]() Inscription : avril 2009 Messages : 2 ![]() |
Après m'être cassé la tête sur le même problème, je l'ai résolu de la manière suivante : copier la gds32.dll dans le répertoire Windows. Apparamment cette dll est nécessaire. Merci de me dire si celà fonctionne pour vous.
David |
|
|
00
|
|
|
#18 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 260 ![]() |
oui c'est forcément une dépendance manquante pour l'udf
comment est construite cette udf ? cela peut être une dépendance aussi à ib_util.dll essayez en mettant le répertoire bin de firebird dans le path ceci dit, franchement il faut au maximum eviter les udf, ne serait ce que pour être plus portable la règle avec les udf surtout maison c'est de d'abord tout faire pour ne pas en utiliser, cela évite bien des ennuis et est plus performant et dans 90% au moins des cas d'utilisation d'udf que je vois, on peut très bien s'en passer
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
Copyright © 2000-2013 - www.developpez.com