Quoi, tu ne connais pas PB ? Va falloir parcourir tout le forum alors !

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.
  • Index
  •  » Base de données
  •  » Détecter si une connexion à la base de données est déjà présente

#1 08-08-2013 13:29:20

Dadone  
Membre Power Geek
Lieu: Avon (Seine et Marne)
Date d'inscription: 19-02-2007
Messages: 252
Pépites: 985
Banque: 0
Site web

Détecter si une connexion à la base de données est déjà présente

Bonjour à tous,

Quelqu'un connait-il le moyen de savoir si un objet de transaction est connecté où non à la base de données ?

Base de données : Sybase ASE, PB 12

Hors ligne

 

#2 08-08-2013 13:44:02

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Détecter si une connexion à la base de données est déjà présente

Bonjour, à tester : DBHandle().


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#3 08-08-2013 13:46:51

Dadone  
Membre Power Geek
Lieu: Avon (Seine et Marne)
Date d'inscription: 19-02-2007
Messages: 252
Pépites: 985
Banque: 0
Site web

Re: Détecter si une connexion à la base de données est déjà présente

erasorz a écrit:

Bonjour, à tester : DBHandle().

Cela ne fonctionne pas car le  DBHandle() déclenche un dberror de type "transaction not connected" lorsque justement la transaction n'est pas connectée...
D'ailleurs, je suis justement en train de supprimer tout ces DBHandle() qui ne sont pas utilisés à bon escient. reste à trouver son remplacement...

Dernière modification par Dadone (08-08-2013 13:49:46)

Hors ligne

 

#4 08-08-2013 13:49:44

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 720
Pépites: 11,343
Banque: 100,221,387,868,884,300
Site web

Re: Détecter si une connexion à la base de données est déjà présente

erasorz a écrit:

Bonjour, à tester : DBHandle().

confirme que ca marche avec une connexion odbc en tout cas.

Code: pb

 lb_connected = sqlca.dbhandle()<> 0 

https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

#5 08-08-2013 13:52:30

Dadone  
Membre Power Geek
Lieu: Avon (Seine et Marne)
Date d'inscription: 19-02-2007
Messages: 252
Pépites: 985
Banque: 0
Site web

Re: Détecter si une connexion à la base de données est déjà présente

xlat a écrit:

erasorz a écrit:

Bonjour, à tester : DBHandle().

confirme que ca marche avec une connexion odbc en tout cas.

Code: pb

 lb_connected = sqlcq.dbhandle()<> 0 

As tu du code dans la routine événementielle dbrror() de la classe transaction ?
Car chez moi le dbHandle() déclenche cette routine.
En plus le help PB est explicite cette fonction ne sert pas à cela...

Dernière modification par Dadone (08-08-2013 13:55:16)

Hors ligne

 

#6 08-08-2013 14:11:13

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 720
Pépites: 11,343
Banque: 100,221,387,868,884,300
Site web

Re: Détecter si une connexion à la base de données est déjà présente

cette fonction te permet d'obtenir un pointeur bas niveau sur la structure d'acces a ta connexion ( utile pour partager la connexion avec du code écrit en dehors de pb) si il n'y a pas de connexion alors on obtiendra un pointeur null.


https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

#7 08-08-2013 14:30:14

Dadone  
Membre Power Geek
Lieu: Avon (Seine et Marne)
Date d'inscription: 19-02-2007
Messages: 252
Pépites: 985
Banque: 0
Site web

Re: Détecter si une connexion à la base de données est déjà présente

xlat a écrit:

cette fonction te permet d'obtenir un pointeur bas niveau sur la structure d'acces a ta connexion ( utile pour partager la connexion avec du code écrit en dehors de pb) si il n'y a pas de connexion alors on obtiendra un pointeur null.

Cela n'en reste pas moins une fonction appliquée à un objet de transaction : SQLCA.DBHandle( )
En l'absence de connexion à la bas de données, la fonction n' a pas de sens , ce qui est conforme au fait que cela déclenche le dberror() de la classe transaction comme n'importe qu'elle tentative de communication avec la BD qui est dès lors impossible.

HELP PB :
Transactionobject must exist, and the database must be connected.
DBHandle returns a valid handle only if you are connected to the database. It is not able to determine if the database connection does not exist or has been lost.

Dernière modification par Dadone (08-08-2013 14:45:26)

Hors ligne

 

#8 08-08-2013 15:49:49

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Détecter si une connexion à la base de données est déjà présente

Dadone a écrit:

Cela ne fonctionne pas car le  DBHandle() déclenche un dberror de type "transaction not connected" lorsque justement la transaction n'est pas connectée...

Bah du coup tu as la réponse à ta question


Sinon, tu peux lancer une requête SQL bidon pour voir, du genre :

Code: pb

select 1 into :ll_test from dummy using ta_transaction ;

N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#9 08-08-2013 15:56:51

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

Re: Détecter si une connexion à la base de données est déjà présente

Bon c'est fin de journée je vais me permettre...

tu peux faire un FileDelete sur le fichier .DB, si ça ne fonctionne pas c'est probablement qu'il y a une transaction connectée

smileydehors


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

#10 08-08-2013 18:10:54

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Détecter si une connexion à la base de données est déjà présente

rincevent a écrit:

tu peux faire un FileDelete sur le fichier .DB, si ça ne fonctionne pas c'est probablement qu'il y a une transaction connectée

Et si c'est une autre transac qui est connectée ?


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#11 09-08-2013 07:28:36

Dadone  
Membre Power Geek
Lieu: Avon (Seine et Marne)
Date d'inscription: 19-02-2007
Messages: 252
Pépites: 985
Banque: 0
Site web

Re: Détecter si une connexion à la base de données est déjà présente

Sinon, tu peux lancer une requête SQL bidon pour voir, du genre :

Code: pb

select 1 into :ll_test from dummy using ta_transaction ;

Déclencher une erreur pour éviter une erreur ????
Je précise que lorsque l'on code la routine événementielle dberror() de la classe transaction, celle-ci se déclenche lorsqu'il y a eut une erreur de base de données.
Par exemple un setTransobject() déclenche cette routine si la transaction n' a pas été initialisée. De même pour un ordre disconnect.
Le but est donc d'éviter ce type d'erreur, en regardant au préalablement avant de lancer certains ordres, si la transaction est bien ouverte afin d'éviter de lancer l'ordre qui déclenchera une erreur BD.
Si la transaction n'est pas ouverte, un disconnect ou un setTransObject() cela ne sert pas à grand chose... et déclenche une erreur BD.
C'est plus clair comme cela ?

Dernière modification par Dadone (09-08-2013 07:36:05)

Hors ligne

 

#12 09-08-2013 09:44:28

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Détecter si une connexion à la base de données est déjà présente

Quid d'une variable d'instance ib_connected assignée à la connexion, déconnexion ?


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#13 09-08-2013 09:59:52

Dadone  
Membre Power Geek
Lieu: Avon (Seine et Marne)
Date d'inscription: 19-02-2007
Messages: 252
Pépites: 985
Banque: 0
Site web

Re: Détecter si une connexion à la base de données est déjà présente

erasorz a écrit:

Quid d'une variable d'instance ib_connected assignée à la connexion, déconnexion ?

J'ai atterri dans un environnement ou je dois, tant que faire ce peu, améliorer la robustesse.
Cet environnement a près de 15 ans de couches successives, c'est une vraie usine à gaz...
Lorsque pour la première fois j'ai implémenté la classe transaction d'une routine d'erreur, j'en ai eut une vingtaine pour du code qui tourne en production !!!
Bref des connexions, des select SQL, il y a en partout mais vraiment partout. Même avant de se connecter à une BD quelconque, par exemple accéder à la date du serveur avant le login sur la base...
"Et pourtant elle tourne" aurait dit Galilée....
D'où ma question sur le forum car je ne peux pas tracer toutes les connexions et mettre un indicateur...
Tant pis si cela n'existe pas, j'ai magouillé avec une constante qui a la valeur "Transaction not connected" et je contrôle que la base de données à bien été renseigné dans la chaine de connexion. Avec cela j'ai réussit à éviter 80% des déclenchements d'erreurs de la BD pour le reste j'ai supprimé du code pour arriver à zéro pour le moment.
Mais c'est quant même étonnant que cela n'existe pas...mais c'est vrai que lorsque l'on code "normalement", j'en avais jamais eut le besoin....

Dernière modification par Dadone (09-08-2013 13:57:32)

Hors ligne

 
  • Index
  •  » Base de données
  •  » Détecter si une connexion à la base de données est déjà présente

Pied de page des forums

Propulsé par FluxBB 1.2.22