Script SQLPlus Oracle ==> Programme VB - VB/VBA/VBS - Programmation
Marsh Posté le 03-09-2008 à 09:58:50
VB est déprécié, je te conseille donc VB.NET ou C#, qui sont les "suites" proposées par Microsoft et dont il existe tous les outils gratuits pour travailler.
Pour l'accès aux données, tu passeras par un connecteur .NET qui ressemble d'un point de vue programmation comme deux goutes d'eau aux drivers ODBC ou OLEDB. Tu peux donc faire des curseurs, des transactions, et à tout ce que tu veux.
Les limitations sont cependant (non exhaustif) les suivantes :
- Impossibilité (ou presque) de se créer une variable Oracle et la réutiliser plus tard dans une autre requête.
- Impossibilité d'utiliser un script PL/SQL directement, il faut en faire une PS Oracle et lancer la PS.
- Un certain nombre de types Oracle ne sont pas aisés à utiliser, à commencer par les blob/clob, mais aussi le number (Oracle permet de stocker plus de chiffres dans un Number que ne permet .NET dans un decimal, ce qui provoque des problèmes parfois)
Pour le reste, tout fonctionne parfaitement bien.
Voici un exemple de ce qu'on peut faire par exemple (ici, succession de requêtes au sein d'une transaction, avec proposition de commit ou rollback une fois les requêtes effectuées) :
Code :
|
Marsh Posté le 03-09-2008 à 10:10:11
Je n'ai que VB6 de disponible
Par contre je me pose une question : est-ce qu'il est possible de lancer des procédures incluses dans des packages comme si je le faisais sous SQLPlus à partir d'une fonction ?
Par exemple : exec pck_package.procédure(params)
Marsh Posté le 03-09-2008 à 10:12:17
oui sans problème
ton commandtext de ton objet commande sera "pck_package.procédure" et son commandtype sera "storedprocedure".
et tu ajouteras les parameters de la même façon que dans mon exemple.
ps : en VB6 même si le langage n'a rien à voir et que tu passes par DAO et non la couche .NET, y'a presque rien à changer par rapport au code que j'ai posté (même attributs et métodes d'objets pour la plupart). c'est pour ça que je me permet d'insister.
VS 2008 C# Express est gratuit et utilisable à des fins professionnelles et lucratives.
http://msdn.microsoft.com/fr-fr/express/aa975050.aspx
Marsh Posté le 03-09-2008 à 10:13:07
MagicBuzz a écrit : oui sans problème |
ok merci, je vais voir ça
Marsh Posté le 03-09-2008 à 10:57:57
Pour l'instant j'essaie de trouver comment me connecter à ma base Oracle via ODBC et en cherchant un peu sur Internet je retrouve souvent cette déclaration :
Public db As New ADODB.Connection
Sauf qu'à l'exécution il me dit que ce n'est pas un type défini. J'imagine qu'il faut que je récupère un fichier de déclaration quelque part pour l'inclure dans mon projet mais je ne sais pas où le trouver. une idée ?
EDIT : à chaque fois que je tombe sur un lien qui utilise cette expression, j'ai l'impression qu'ils considèrent que le type ADODB.Connection est déjà acquis de base.
Marsh Posté le 03-09-2008 à 11:06:42
tu dois lier à ton projet "microsoft data object 2.6" ou un truc du genre (DAO.dll)
Marsh Posté le 03-09-2008 à 11:07:26
(dans le menu "projet" tu à un menu pour gérer les dépendences du projet. ça fait longtemps que j'ai pas touché vb, donc je ne me souviens plus des noms exacts )
Marsh Posté le 03-09-2008 à 11:17:58
nickel merci
C'est dans Projet/Références, il faut cocher "Microsoft ActiveX Data Object 2.6 Library"
Marsh Posté le 03-09-2008 à 11:42:21
a mettre dans tes bookmarks pour avoir de la doc sur ADO :
http://www.devguru.com/technologies/ado/home.asp
Marsh Posté le 03-09-2008 à 16:10:32
Merci pour ton aide, j'arrive à lancer mes procédures ça rox
Par contre j'ai petit souci qui risque de bien me bloquer, c'est que ces procédures contiennent des étapes qui auparavant s'enchaînaient, mais qu'il a fallu découper pour pouvoir bidouiller des trucs à la main dans la base avant de lancer les étapes suivantes. Si ç'avaient été des procédures distinctes il n'y aurait pas eu de souci, sauf que là pour dire "STOP ON S'ARRÊTE ICI !" ils ont trouvé la judicieuse idée de foutre un RAISE_APPLICATION_ERROR avec un message.
Quand la procédure arrive à ce stade, mon programme s'arrête avec un pop-up qui contient le message en question (ça c'est cool), mais il me propose "Débogage" ou "Fin" (ça c'est moins cool). Le truc c'est que j'aimerais faire un EXIT SUB juste après le lancement de ma procédure pour pouvoir trifouiller la base à la main sans avoir à arrêter l'exécution de mon programme, puisqu'il y a encore des étapes à lancer derrière
Comment pourrais-je contourner ce problème à part en réécrivant la procédure stockée ? tâche qui s'avèrerait fastidieuse
EDIT : exemple :
Code :
|
Ici on a lancé la procédure en passant un param >= 6, puis on stop après la reprise_fournisseur pour trifouiller des trucs. Une fois que c'est fait, on relance cette procédure en passant param = 7 pour enchainer. Ce que je voudrais c'est que mon programme ne plante pas quand j'ai un RAISE_APPLICATION_ERROR, c'est possible ?
Marsh Posté le 03-09-2008 à 16:25:32
Code :
|
Marsh Posté le 03-09-2008 à 16:31:12
MagicBuzz a écrit :
|
ah mais ouais j'avais oublié ça, sainxeulote
Marsh Posté le 03-09-2008 à 16:38:47
attention cependant. si tu produit une erreur, vérifie que le rollback se produit comme lorsque tu es avec sql+, rien n'est moins sûr.
et si l'ensemble de la procédure doit être transactionnelle, n'oublie pas d'utiliser l'objet transaction sur tes commandes et bien faire un begintrans au début et commit/rollback à la fin.
parceque dans sql+ il suffit de ne pas commit pour faire le rollback à la sortie, alors qu'avec ADO, le commit est implicite à chaque instruction, il faut donc faire une transaction globale pour reproduire le fonctionnement de sql+
Marsh Posté le 03-09-2008 à 16:57:09
MagicBuzz a écrit : attention cependant. si tu produit une erreur, vérifie que le rollback se produit comme lorsque tu es avec sql+, rien n'est moins sûr. |
Je vois
Ceci dit pour ce processus-là je n'avais aucun commit à faire sous SQLPlus, j'ai pas vérifié mais les commit/rollback doivent déjà être gérés dans la procédure.
Marsh Posté le 02-09-2008 à 16:10:59
Dans le cadre de mon boulot, j'utilise des scripts (sous forme de packages) que je lance sous SQLPlus (base Oracle) les uns après les autres à la main. Ces scripts contiennent de procédures qui utilisent des requêtes, des curseurs, etc, pour aller taper dans la base Oracle.
Comme c'est assez fastidieux, j'aimerais faire un programme VB qui reprendrait la structure de ces scripts, cependant je ne l'ai jamais fait et j'aimerais trouver des infos à ce sujet :
- Peut-on toujours utiliser des curseurs dans ce cadre ?
- Comment faire en sorte que mon programme communique avec ma base Oracle ?
Voilà, si vous connaissez un tutoriel sympa qui pourrait m'aider à répondre à ces questions et à celles que je serais suceptible de me poser je suis preneur. Merci d'avance
---------------
MyAnimeList