Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/12/2007, 13h06   #1
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 701
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 701
Points : 845
Points : 845
Par défaut Pb de creation UDF sous Delphi

Bonjour a tous

J'essaye de creer des UDF sous Delphi pour les utiliser sous FIREBIRD 2.0 (en utilisant le modele trouve sur : http://www.firebirdsql.org/index.php...&id=geldenhuis)

Voici le code delphi :
La libraire :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
library UDF_Olivier;
 
uses
  UDF IN 'UDF.pas';
 
{$R *.res}
 
exports
   UDF_Test,
   UDF_Test1;
begin
end.
et l'unite associee est :
Code :
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
 
unit UDF;
 
 
interface
uses
  SysUtils,
  Classes;
 
 
FUNCTION UDF_Test(var
Width,Height:Integer):Integer; stdcall;
 
FUNCTION UDF_Test1(var
Entree:pChar):pChar;  stdcall;
 
implementation
FUNCTION UDF_Test(var
Width,Height:Integer):Integer;
begin
   Result:=Width+Height;
end;
 
FUNCTION UDF_Test1(var
Entree:pChar):pChar;
begin
   Result := Pchar(UpperCase(String(Entree)));
end;
 
end.
La compilation ne pose pas de probleme et je stocke la DLL generee dans le repertoire 'UDF' de Firebird

Je declare l'UDF (test1) dans ma base avec :
Code :
1
2
3
4
DECLARE EXTERNAL FUNCTION TEST1
  CSTRING(80) CHARACTER SET NONE
RETURNS CSTRING(80) CHARACTER SET NONE
ENTRY_POINT 'UDF_Test' MODULE_NAME 'UDF_Olivier.dll';
Mais lorsque j'essaye d'utiliser cette fonction dans une requete ou PS (ex :

select test1(b_bagueur.prenom) from b_bagueur

qui devrait afficher le prenom en majuscule m'indique
Citation:
Invalid token.
Invalid request BLR at offset 79.
Function TEST1 is not defined.
Module name or entrypoint could not be found.

Quelqu'un a t'il une idee ?

merci d'avance

Olivier
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 13h20   #2
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 760
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 760
Points : 6 790
Points : 6 790
Salut

Est-ce une erreur de frappe, car l'ENTRY_POINT ne devrait-il pas être 'UDF_Test1' ?

De plus j'ajouterais un FREE_IT sur le RETURNS CSTRING.

@+ Claudius
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 13h40   #3
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 701
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 701
Points : 845
Points : 845
Grrr on ne verifie jamais assez ses messages

Il y a bien une faute d'orthographe.

J'ai modifie par reference en FEEE_IT et ca ne change rien !!
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 13h49   #4
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 760
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 760
Points : 6 790
Points : 6 790
A priori je ne vois pas de problème.

As-tu testé ta DLL avec un petit exe test sous Delphi ? Pour s'assurer que tes 2 fonctions sont correctes.

As-tu vérifié le paramètre UDFAccess de firebird.conf qu'il ne soit pas sur None. Des fois que ...

@+ Claudius
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 13h58   #5
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 701
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 701
Points : 845
Points : 845
Je vais tester les 2 fonctions, mais je vois peu de raisons quelles ne marchent pas ...

pour le firebird.conf

c'est ecrit
Citation:
#udfAccess = Restrict UDF
est ce un Pb ?

----
J'ai teste les fonctions : pas de PB
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 14h14   #6
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 760
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 760
Points : 6 790
Points : 6 790
Citation:
Envoyé par dehorter olivier Voir le message
est ce un Pb ?
C'est l'option par défaut, l'accès aux UDFs est restreint au sous-dossier UDF de Firebird. Donc c'est OK.
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 14h31   #7
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 760
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 760
Points : 6 790
Points : 6 790
Re,

Ce n'est pas un pb Firebird mais Delphi !

Code :
1
2
function UDF_Test1(const Entree: PChar): PChar;  stdcall;
Pourquoi var ?!!

@+ Claudius
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 14h42   #8
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 701
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 701
Points : 845
Points : 845
je ne sais pas; c'etait indique sur le tutorial (adresse au debut de mon message)

en tout cas en le remplacant par CONST ca ne change rien !!!!

d'autres idees ?
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 14h56   #9
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
quelle version de Windows ?
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 14h59   #10
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 701
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 701
Points : 845
Points : 845
Windows XP et 2000

en delphi 7 une ideeeeeee


en tout cas bon reveillon

dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2008, 12h35   #11
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 701
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 701
Points : 845
Points : 845
Bonne annee a tous

j'ai retente aujourd'hui, mais le message d'erreur est different !!!!


j'ai lance :
Code :
SELECT test1('fff') FROM rdb$database;
ca devrait renvoyer 'FFF'

et je recois ca comme message d'erreur
Citation:
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
return data type not supported
de nouvelles idees ?

olivier

PS : je n'ai rien change au code DELPHI de l'UDF
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2008, 12h56   #12
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 760
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 760
Points : 6 790
Points : 6 790
Salut et bonne année.

Citation:
Envoyé par dehorter olivier Voir le message
PS : je n'ai rien change au code DELPHI de l'UDF
J'ai créé ta DLL (avec const et non var) , déclaré la fonction Test1, et cela fonctionne sans souci.



@+
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2008, 14h26   #13
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 701
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 701
Points : 845
Points : 845
salut


J'ai auss mis CONST

mais surtout j'ai ferme le moteur 'FIREBIRD' puis l'ai rouvert et la ca marche

Donc il semble que pour les modification de la DLL soit prise en compte il faille rebooter le serveur FIREBIRD

i am happy

merci

a+
olivier
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h03.


 
 
 
 
Partenaires

Hébergement Web