OVH Cloud OVH Cloud

[SQLManagerX] plusieurs objets connexion ???

19 réponses
Avatar
Jerome PAULIN
Bonjour,

Je cherche à utiliser plusieurs connexion à des bases firebird
differentes, dans l'initialisation du projet, j'ai mis le code suivant :

// declarations globales
gsGESCOM_DBServer est une chaîne
gsGESCOM_DBDatabase est une chaîne
gsGESCOM_DBUser est une chaîne
gsGESCOM_DBPassword est une chaîne
gclGESCOM_DBConnexion est un c_FB4WD
gsSTOCK_DBServer est une chaîne
gsSTOCK_DBDatabase est une chaîne
gsSTOCK_DBUser est une chaîne
gsSTOCK_DBPassword est une chaîne
gclSTOCK_DBConnexion est un c_FB4WD

// Connexion a la base GESCOM
gsGESCOM_DBServer="192.168.0.226"
gsGESCOM_DBDatabase="c:\gescom_tests\base_test.fdb"
gsGESCOM_DBUser="SYSDBA"
gsGESCOM_DBPassword="masterkey"
SI PAS
gclGESCOM_DBConnexion:mySQLConnecte(gsGESCOM_DBServer,gsGESCOM_DBDatabase,gsGESCOM_DBUser,gsGESCOM_DBPassword)
ALORS
Info("Pas de Conenxion SQL GESCOM :
"+gclGESCOM_DBConnexion:mySQLGetErrorMessage())
FinProgramme()
FIN

// Connexion a la base GESTION_STOCK
gsSTOCK_DBServer="192.168.0.226"
gsSTOCK_DBDatabase="c:\gescom_tests\BASE_STOCK_ENGP.FDB"
gsSTOCK_DBUser="SYSDBA"
gsSTOCK_DBPassword="masterkey"
SI PAS
gclSTOCK_DBConnexion:mySQLConnecte(gsSTOCK_DBServer,gsSTOCK_DBDatabase,gsSTOCK_DBUser,gsSTOCK_DBPassword)
ALORS
Info("pas de Connexion SQL STOCK :
"+gclSTOCK_DBConnexion:mySQLGetErrorMessage())
FinProgramme()
FIN


Mais j'ai l'impression que la deuxieme connexion ecrase la première (si
j'enleve la deuxieme connexion, les requetes sur GESCOM focntionnent). Y
a t il une astuce qui m'aurait échapé ?

gg

10 réponses

1 2
Avatar
Firetox
Bonjour,

essayer avec :

gclGESCOM_DBConnexion est un c_FB4WD(1)
gclSTOCK_DBConnexion est un c_FB4WD(2)

dans le constructeur il y a le numConection
par contre pas tester pour savoir si FB accepter plusieurs fois la dll en
memoire
la fbclient.dll

bon dev
@+

"Jerome PAULIN" a écrit dans le message
de news: ein0od$tuf$
Bonjour,

Je cherche à utiliser plusieurs connexion à des bases firebird
differentes, dans l'initialisation du projet, j'ai mis le code suivant :

// declarations globales
gsGESCOM_DBServer est une chaîne
gsGESCOM_DBDatabase est une chaîne
gsGESCOM_DBUser est une chaîne
gsGESCOM_DBPassword est une chaîne
gclGESCOM_DBConnexion est un c_FB4WD
gsSTOCK_DBServer est une chaîne
gsSTOCK_DBDatabase est une chaîne
gsSTOCK_DBUser est une chaîne
gsSTOCK_DBPassword est une chaîne
gclSTOCK_DBConnexion est un c_FB4WD

// Connexion a la base GESCOM
gsGESCOM_DBServer="192.168.0.226"
gsGESCOM_DBDatabase="c:gescom_testsbase_test.fdb"
gsGESCOM_DBUser="SYSDBA"
gsGESCOM_DBPassword="masterkey"
SI PAS
gclGESCOM_DBConnexion:mySQLConnecte(gsGESCOM_DBServer,gsGESCOM_DBDatabase,gsGESCOM_DBUser,gsGESCOM_DBPassword)
ALORS
Info("Pas de Conenxion SQL GESCOM :
"+gclGESCOM_DBConnexion:mySQLGetErrorMessage())
FinProgramme()
FIN

// Connexion a la base GESTION_STOCK
gsSTOCK_DBServer="192.168.0.226"
gsSTOCK_DBDatabase="c:gescom_testsBASE_STOCK_ENGP.FDB"
gsSTOCK_DBUser="SYSDBA"
gsSTOCK_DBPassword="masterkey"
SI PAS
gclSTOCK_DBConnexion:mySQLConnecte(gsSTOCK_DBServer,gsSTOCK_DBDatabase,gsSTOCK_DBUser,gsSTOCK_DBPassword)
ALORS
Info("pas de Connexion SQL STOCK :
"+gclSTOCK_DBConnexion:mySQLGetErrorMessage())
FinProgramme()
FIN


Mais j'ai l'impression que la deuxieme connexion ecrase la première (si
j'enleve la deuxieme connexion, les requetes sur GESCOM focntionnent). Y a
t il une astuce qui m'aurait échapé ?

gg


Avatar
Jerome PAULIN
Firetox a écrit :
Bonjour,

essayer avec :

gclGESCOM_DBConnexion est un c_FB4WD(1)
gclSTOCK_DBConnexion est un c_FB4WD(2)

dans le constructeur il y a le numConection
par contre pas tester pour savoir si FB accepter plusieurs fois la dll en
memoire
la fbclient.dll

bon dev
@+




Bonjour,

Ca ne fonctionne pas mieux, j'ai une erreur : fb4wd2.dll introuvable ou
problème d'initialisation de cette librairie ...


gg
Avatar
Firetox
modifiez dans votre constructeur de la classe FB4WD changer les lignes
SI p_connexion > 1 ALORS
:DLLName = :DLLName+p_connexion
fCopieFichier(fRepEnCours()+""+:DLLName+".dll",fRepEnCours()+""+:DLLName+".dll")FINparSI p_connexion > 1 ALORS :DLLName = :DLLName+p_connexion fCopieFichier(fRepEnCours()+"fb4wd.dll",fRepEnCours()+""+:DLLName+".dll")FIN"Jerome PAULIN" a écrit dans le messagede news: ein2h5$v2j$ Firetox a écrit :>> Bonjour,>>>> essayer avec :>>>> gclGESCOM_DBConnexion est un c_FB4WD(1)>> gclSTOCK_DBConnexion est un c_FB4WD(2)>>>> dans le constructeur il y a le numConection>> par contre pas tester pour savoir si FB accepter plusieurs fois la dll enmemoire>> la fbclient.dll>>>> bon dev>> @+>>>> Bonjour,>> Ca ne fonctionne pas mieux, j'ai une erreur : fb4wd2.dll introuvable ouproblème d'initialisation de cette librairie ...>>> gg
Avatar
Jerome PAULIN
Firetox a écrit :
modifiez dans votre constructeur de la classe FB4WD changer les lignes




Après avoir modifié la classe, je vois qu'une nouvelle dll est créée,
mais j'ai toujours le message d'erreur précédent ...

Merci de me consacrer du temps ...

gg
Avatar
Firetox
Bon

modifier le constructeur avec cette modif
SI (:fb4wdInst = 0) ALORS
TitreSuivant(:DLLName)
Erreur(:DLLName+".dll introuvable ou problème d'initialisation de cette
librairie...")
FIN

et le destructeur avec celle ci

PROCEDURE Destructeur()

SI (:fb4wdInst <> 0) ALORS
DéchargeDLL(:fb4wdInst)
FIN
SI :DLLName <> "fb4wd" ALORS
fSupprime(fRepExe()+""+:DLLName+".DLL")
FIN

// si manu nous lit il faudrait mettre a jour la version de FB4WD
et voir si cela fonctionne



"Jerome PAULIN" a écrit dans le message
de news: ein3qn$vtg$
Firetox a écrit :
modifiez dans votre constructeur de la classe FB4WD changer les lignes




Après avoir modifié la classe, je vois qu'une nouvelle dll est créée, mais
j'ai toujours le message d'erreur précédent ...

Merci de me consacrer du temps ...

gg


Avatar
Jerome PAULIN
Firetox a écrit :
Bon

modifier le constructeur avec cette modif
SI (:fb4wdInst = 0) ALORS
TitreSuivant(:DLLName)
Erreur(:DLLName+".dll introuvable ou problème d'initialisation de cette
librairie...")
FIN

et le destructeur avec celle ci

PROCEDURE Destructeur()

SI (:fb4wdInst <> 0) ALORS
DéchargeDLL(:fb4wdInst)
FIN
SI :DLLName <> "fb4wd" ALORS
fSupprime(fRepExe()+""+:DLLName+".DLL")
FIN

// si manu nous lit il faudrait mettre a jour la version de FB4WD
et voir si cela fonctionne



Pour le constructeur, le code y etait deja.
Pour les destructeur, j'ai modifié le code comme ci dessus.

J'ai redémarré le PC, pour m'assurer qu'il n'y avait pas de soucis de
dll mal déchargée.

J'ai toujours le message de fb4wd2.dll introuvable ou en erreur ...

gg
Avatar
Firetox
je me suis plante de ligne dans le constructeur

SI p_connexion > 1 ALORS
:DLLName = :DLLName+p_connexion
fCopieFichier(fRepExe()+"fb4wd.dll",fRepExe()+""+:DLLName+".dll")
FIN


"Jerome PAULIN" a écrit dans le message
de news: ein6js$1rn$
Firetox a écrit :
Bon

modifier le constructeur avec cette modif
SI (:fb4wdInst = 0) ALORS
TitreSuivant(:DLLName)
Erreur(:DLLName+".dll introuvable ou problème d'initialisation de cette
librairie...")
FIN

et le destructeur avec celle ci

PROCEDURE Destructeur()

SI (:fb4wdInst <> 0) ALORS
DéchargeDLL(:fb4wdInst)
FIN
SI :DLLName <> "fb4wd" ALORS
fSupprime(fRepExe()+""+:DLLName+".DLL")
FIN

// si manu nous lit il faudrait mettre a jour la version de FB4WD
et voir si cela fonctionne



Pour le constructeur, le code y etait deja.
Pour les destructeur, j'ai modifié le code comme ci dessus.

J'ai redémarré le PC, pour m'assurer qu'il n'y avait pas de soucis de dll
mal déchargée.

J'ai toujours le message de fb4wd2.dll introuvable ou en erreur ...

gg


Avatar
Jerome PAULIN
voici ce que j'ai dans le constructeur :

:DLLName="fb4wd"

SI p_connexion > 1 ALORS
:DLLName = :DLLName+p_connexion
fCopieFichier(fRepExe()+"fb4wd.dll",fRepExe()+""+:DLLName+".dll")
FIN

:fb4wdInst = ChargeDLL(:DLLName+".dll")
SI (:fb4wdInst = 0) ALORS
TitreSuivant(:DLLName)
Erreur(:DLLName+".dll introuvable ou problème d'initialisation de cette
librairie...")
FIN


et dans le destructeur :
SI (:fb4wdInst <> 0) ALORS
DéchargeDLL(:fb4wdInst)
FIN
SI :DLLName <> "fb4wd" ALORS
fSupprime(fRepExe()+""+:DLLName+".DLL")
FIN


mais ca ne fonctionne pas mieux ...

gg
Avatar
mat
Jerome PAULIN wrote:
voici ce que j'ai dans le constructeur :

:DLLName="fb4wd"

SI p_connexion > 1 ALORS
:DLLName = :DLLName+p_connexion
fCopieFichier(fRepExe()+"fb4wd.dll",fRepExe()+""+:DLLName+".dll")
FIN

:fb4wdInst = ChargeDLL(:DLLName+".dll")
SI (:fb4wdInst = 0) ALORS
TitreSuivant(:DLLName)
Erreur(:DLLName+".dll introuvable ou problème d'initialisation de
cette librairie...")
FIN


et dans le destructeur :
SI (:fb4wdInst <> 0) ALORS
DéchargeDLL(:fb4wdInst)
FIN
SI :DLLName <> "fb4wd" ALORS
fSupprime(fRepExe()+""+:DLLName+".DLL")
FIN


mais ca ne fonctionne pas mieux ...

gg





Bonjour,

excusez moi de me méler de votre affaire: il me semble que
ChargeDLL(:DLLName+".dll") va chercher la DLL dans le répertoire en
cours qui est celui des données. Donc, faudrait peut-être essayer avec
ChargeDLL(fRepExe()+""+:DLLName+".dll")

Salutations
Mat
Avatar
Jerome PAULIN
> Bonjour,

excusez moi de me méler de votre affaire: il me semble que
ChargeDLL(:DLLName+".dll") va chercher la DLL dans le répertoire en
cours qui est celui des données. Donc, faudrait peut-être essayer avec
ChargeDLL(fRepExe()+""+:DLLName+".dll")

Salutations
Mat



Bonsoir,

Toute aide est, je le pense, intéressante...

J'ai essayé ta proposition ret j'obtiens le message suivant :


Erreur à la ligne 48 du traitement constructeur de la classe c_FB4WD.
Vous avez appelé la fonction AppelDLL32.
Erreur au chargement de la DLL 'fb4wd2'

Détail de l'erreur système :

L'accès à cet emplacement de la mémoire n'est pas valide.
(998)


Informations techniques

Projet : EMGP_gestion_stocks

Dump de l'erreur du module <WD100VM.DLL> <10.01Fg>.

- Appel WL :
Traitement de <c_FB4WD.Constructeur>, ligne <48>, thread <0>
Fonction <AppelDLL32>, n° de syntaxe <0>

- Niveau : erreur fatale (EL_FATAL)

- Code erreur : 2802

- Code erreur WD55 : 0

- Code d'erreur système : 998

- Message d'erreur système :
L'accès à cet emplacement de la mémoire n'est pas valide.
1 2