Vb.net Bibliothéque de classe
Résolu
Creutzou
Messages postés
655
Statut
Membre
-
Creutzou Messages postés 655 Statut Membre -
Creutzou Messages postés 655 Statut Membre -
Bonjour,
Pour planter le décors, j'ai une application tournant sous Ms Access. J'ai fais une bibliothèque de classe en vb.net pour pouvoir faire interagir mon application access avec un webservice.
J'arrive bien à importer ma dll dans Access.
Lors de la déclaration des variables
Si je fais
Si je fais
Donc en faisant quelque chose du genre :
je tombe sur l'erreur suivante :
"Variable objet ou variable de bloc With non définie"
ce que je trouve logique car je n'instancie nulle part mon objet.
( enfin je crois )
étant complétement perdu je m'en remet à vous, si vous avez besoin de mes bouts de code ou de plus d'info, n'hésitez pas !
En vous remerciant d'avance !
Tout vient à point à qui sait attendre
Pour planter le décors, j'ai une application tournant sous Ms Access. J'ai fais une bibliothèque de classe en vb.net pour pouvoir faire interagir mon application access avec un webservice.
J'arrive bien à importer ma dll dans Access.
Lors de la déclaration des variables
Si je fais
"Dim export as new madll.maclasse"ma classe n'est pas reconnue.
Si je fais
"dim export as madll.maclasse"ma classe est bien reconnue.
Donc en faisant quelque chose du genre :
" dim export as madll.maclasse export.mafonction(variable) "
je tombe sur l'erreur suivante :
"Variable objet ou variable de bloc With non définie"
ce que je trouve logique car je n'instancie nulle part mon objet.
( enfin je crois )
étant complétement perdu je m'en remet à vous, si vous avez besoin de mes bouts de code ou de plus d'info, n'hésitez pas !
En vous remerciant d'avance !
Tout vient à point à qui sait attendre
19 réponses
-
Bonjour,
Tu a ajouter la dll dans les références ?
Tu l'a inscrite dans le régistre ?
A+
Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter. -
Oui, je les inscrite dans "com interop" et je l'ai bien ajouté en référence dans Access. Puis j'ai fermé et réouvert la base.
J'ai suivis le mini tutoriel du msdn de Microsoft pour exporter des dll dot net vers du vba
Tout vient à point à qui sait attendre -
Tant que... "Dim export as new madll.maclasse" ne fonctionnera pas c'est inutile d'aller plus loin.
1°) l'extention de la dll doit être Madll.dll
2°) Y faut l'inscrire au registre Windows avec RegSVR32
3°) Donc en faisant quelque chose du genre :
dim export as madll.maclasse
export.mafonction(variable)
Y manque Export = new madll.maclasse
Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter. -
première fois que j'entends parlé du RegSVR32, je vais explorer cette piste et te tien au courant.
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
a voir
Et si tu ne veux pas avoir de problème, met ta dll dans System32
Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter. -
Alors alors, j'ai tenté d'utiliser regsvr32 mais il me dit qu'il n'y a pas de point d'entrée dans DllRegisterServer.
J'ai retenté l'opération en la mettant de le system32, puis dans sysWow64 mais rien n'y fait. Est ce ma dll qui est mal construite?
Option Explicit On <ComClass(PSE.ClassId, PSE.InterfaceId, PSE.EventsId)> Public Class PSE Public Const ClassId As String = "F78B9B01-7553-4a3a-9A44-A4778649974D" Public Const InterfaceId As String = "F9CB47EC-1A2E-4a97-87BD-9FAD12D124ED" Public Const EventsId As String = "BDB03602-DB50-46fe-A722-788703A1A16A" Private Sub New() MyBase.New() End Sub Public Function envoi(ByVal content as string) as string Dim reponse as string Dim connection As New refweb.webservice reponse = connection.fonctionduwebservice(content) Return reponse End Function End Class -
Tu a recopier un code que tu à trouvé mais tu ne l'adapte pas à tes configurations.
Quel bibliothèque(s) tu a ajouter à ta classe
Et tu n'a certainement pas pu le compiler.
Faire une dll c'est pas "y a qu'a"
quel nom (complet) a ta "dll"
Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter. -
ma dll s'appelle exactement "madll.dll"
d'ailleurs je ne sais même pas si c'est une dll dont j'ai besoin.
Je veux juste pouvoir utiliser un bout de code vb.net dans une application vba
Tout vient à point à qui sait attendre -
Et quel est le bout de code que tu veux employer en VBA ?
Pas celui plus haut, ça n'ira pas.
Et que veux-tu faire exactement ? -
Alors je dois faire interagir ma base Access, avec un web service.
Avec Dotnet, j'ai juste à ajouter la référence du service, et tout marche nickel.
Seulement avec Access, je ne peux pas ajouter cette référence.
Mon idée était donc de faire une fonction en vb.net, et de pouvoir l'appeler depuis ma base. Après quelque recherche ( qui sont restées très floues) j'ai cru comprendre que de faire une dll serait la solution la plus simple. Cependant, pour exporter une dll vb.net en vba, il faut la rendre visible COM ( toujours d'après ce que j'ai compris).
Maitrisant assez mal la POO, je pensais juste que ma classe était mal construite, ou mon objet mal instancier.
Tout vient à point à qui sait attendre -
J'ai trouvé une solution temporaire, mais qui ne me satisfait qu'a moiter en attendant d'avancer de l'autre coté.
J'ai créer une application console qui joue le rôle de passerelle., en lui transmettant les données en paramètre.
Lermite222, connais tu une solution plus adapté que faire une dll qui ne tien pas la route ?
Sinon le bout de code que je voudrais utiliser est :Public Function envoi(ByVal content) Dim response Dim connection As New Export.ServicesSoapClient reponse = connection.ImportVehicles(content) Return response End Function
Ou Export est une référence au web service en question.
Tout vient à point à qui sait attendre -
Re,
Je ne connaît pas ta connexion, mais en VBA il est possible d'employer un module de classe qui est l'équivalent d'une dll mais propre a l'appli en cour.
Si ta fonction (avec ses paramètres) fonctionne, tu peu les implémenter dans ce genre de module et ensuite y faire référence dans ton code VBA.
Quand tu veux ajouter la bibliothèque ServicesSoapClient quel est la réponse ?
-
Je vais explorer la piste des module de classe.
Sinon je n'arrive pas à ajouter la Bibliothèque ServicesSoapClient dans access.
-
Quel est l'erreur quand tu veux installer la bibliothèque ?
C'est dans référence bien entendu. -
Je ne sais pas comment l'expliquer, mais dans Visual Studio Express, j'ai ajouté une référence web dans mon projet ( en rentrant l'url du web service).
Donc ServicesSoapClient provient de cette référence.
Or dans Access, je n'ai la possibilité d'ajouter uniquement des référence "local".
Ou alors je suis pas très dégourdis ( ce qui est fort possible aussi ;)
Tout vient à point à qui sait attendre -
OK, je commence à comprendre, explique EXACTEMENT ce que tu veux transférer au moyen de WebService.
Normalement ce n'est que du contenu XLM ? ce qui n'est pas fort compatible avec Access.
Si un autre intervenant comprend mieux, qu'il intervienne sans hésitation.
A+
-
Je transfert des données contenue dans la base.
en schématisant, J'ai une tablevoiture(ID,marque,model,année,immatriculation)
et je veux envoyer ces données au web service.
Le web service attends du xml avec une enveloppe SOAP (c'est à cause de cela que je m'etais penché sur DOT NET, car avec l'ajout de référence, l'enveloppe etc... ce faisait toute seul).
je crée une variable String ( que nous appellerons Flux).J'ouvre un record set et je construit mon flux xml d'une manière peut être barbare.
flux ="<racine>"& vbCrLf rst104.MoveFirst Do Until rst104.EOF flux = flux & "<vehicle>" & vbCrLf & _ "<id>" & Idvoiture & "</id>" & vbCrLf & _ "<make>" & rst104!marque & "</make>" & vbCrLf & _ "<model>" & rst104!Modéle & "</model>" & vbCrLf & _ "<type>" & rst104!Genre & "</type>" & vbCrLf & _ "<body>" & rst104!Carrosserie & "</body>" & vbCrLf & _ "<energy>" & rst104!Energie & "</energy>" & vbCrLf & _ "<kilometer>" & rst104!kms & "</kilometer>" & vbCrLf & _ "<plate>" & rst104!Immat & "</plate>" & vbCrLf & _ "<year>" & rst104!datemec & "</year>" & vbCrLf flux = flux & "</vehicle>" rst104.MoveNext Loop
Puis je transmet la variable flux à la passerelle ( qui est justement en cours de construction).
Je fais peut être une usine à gaz, mais je n'ai trouvé que ca comme méthode.
Tout vient à point à qui sait attendre -
Désolé, mais pour le xlm je suis nul, vaudrait mieux que tu crée un nouveau topic en expliquant tout ce que tu vient de dire parce qu'au départ... C'était pas clair du tout.
A+ -
dac, je vais recommencer depuis le début en demandant un coup de main sur la marche à suivre, car j'ai peur de faire une ENORME usine à gaz.
Une chose est sûre, je te remercie grandement du temps passé sur mon cas !
édit: La suite des événements c'est par ici
Tout vient à point à qui sait attendre