sokhay3
Messages postés18Date d'inscriptionsamedi 5 juillet 2003StatutMembreDernière intervention13 novembre 2008
-
11 août 2006 à 12:00
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 2018
-
17 août 2006 à 11:22
bonjour à tous
je viens de recuperer un projet VBA que je dois migrer en VB6 + access
mon probleme se situe au niveau des requetes prealablement créées sur access : il s'agit de requete selection utilisant des fonctions (dans un module )
exemple de requete,
select monchamp1, maFonctionDeCalcul (monChamp2) FROM maTable
si j'execute cette fonction dans access, ben forcement ça marche
si j'essaie d'executer cette requete depuis VB6, ça marche pas (objet adodb.command). l'erreur retournée est "Fonction maFonctionDeCalcul' non définie dans l'expression."
pareil si j'essaie maConnection.execute "select monchamp1, maFonctionDeCalcul (monChamp2) FROM maTable"
quelqu'un a t'il une idée pour resoudre ce probleme
cs_thephil
Messages postés189Date d'inscriptionmercredi 21 août 2002StatutMembreDernière intervention19 janvier 2011 11 août 2006 à 13:53
en supposant que tu as bien déclaré et ouvert ta base access, il te faut reproduire la fonction "maFonctionDeCalcul" dans vb. qui doit te retourner un nom de champ je suppose !?
et après écrire ça comme ça:
dim Chaine_Sql as string
...
Chaine_Sql = "select monchamp1, " & maFonctionDeCalcul (monChamp2) & " FROM maTable"
maConnection.execute Chaine_Sql
ensuite tu execute une requête à partir de strQuery.
Note : Assure toi que la fonction est présente dans ton code et qu'elle est accecible. Pour être sur colle la fonction et son code juste en dessous de la fonction qui doit exécuter la requête ( si possible )
mais ensuite quand je trace ma fonction (maFonctionDeCalcul) la variable passée en parametre est "monChamp2 ", alors que je devrais avoir (pour que ça fonctionne comme sous VBA) le contenu de la table (enfin du champs)
sokhay3
Messages postés18Date d'inscriptionsamedi 5 juillet 2003StatutMembreDernière intervention13 novembre 2008 11 août 2006 à 16:24
j'ai coupé le probleme en deux: je fais une premiere requete pour selectionner mes champs, et ensuite je parcours mon recordset et j'applique ma fonction sur les champs concernés.
c'est pas tres tres beau mais au moins ça marche....
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 12 août 2006 à 00:50
Bonsoir MPi,
Le problème c' est que sa requête execute une fonction non integrée.
Il faudra la déclarer dans VB comme procédure stockée, s' il veut executer
sa requête comme elle est définie dans Access.
T' es d' accord ?
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 12 août 2006 à 22:43
Salut Chaibat05,
Je ne sais pas... j'utilise jamais de requêtes intégrées à Access.
Par contre, je me dis que s'il démarre la requête à même Access comme
avec Do.Cmd ça devrait faire que la fonction sera reconnue par cette
même requête interne, non ? Les deux étant internes dans Access...
Mais c'est certain que je peux me tromper... ce n'était qu'une piste à envisager...
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 13 août 2006 à 00:07
Bonsoir MPi,
Rassures toi , ta solution est bonne, et tu as raison de l' envisager.
dans la mesure ou combien même elle n' est pas adaptée à son cas,
peut être que d' autres pourront en bénéficier.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 16 août 2006 à 11:21
Salut,
En premier, tu dois créer une référence à Access dans ton projet VB6,
ainsi qu'une autre à DAO ou ADO selon le cas. Ici j'utilise
DAO...........vieille habitude.............
Ensuite, tu déclares un objet Access et une variable pour pointer sur la base.
Private objAccess As Access.Application
Private Db As Database
Private Sub Form_Load() ' initialisation des 2 variables-objets
Set objAccess = New Access.Application
Set Db = Workspaces(0).OpenDatabase(App.Path & "\bd1.mdb", False, False)
End Sub
Ensuite, pour utiliser la commande, tu dois écrire
objAccess.DoCmd..... (ici, tu as plusieurs options possibles)
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 16 août 2006 à 23:33
Est-ce que tu vois sur quelle ligne ça plante ?
Est-ce que le chemin et le nom de la base sont bien OK ?
"maRequete" est-il le nom exact de la requête telle que créée dans Access ?
Finalement, est-ce qu'il y a un fichier maBDD.ldb dans le même
répertoire que le mdb lorsque le programme est fermé ? Si oui, vire-le
(delete) et essaie à nouveau.
cs_thephil
Messages postés189Date d'inscriptionmercredi 21 août 2002StatutMembreDernière intervention19 janvier 2011 17 août 2006 à 09:17
je viens de tester ce morceau de code et j'ai la même erreur que toi Sokhay3 ...
Ce code ne me semble pas correct. Pour que ça marche, il faut après ces deux lignes de code :
Set objAccess = New Access.Application
Set Db = Workspaces(0).OpenDatabase("C:\maBDD.mdb", False, False)
ouvrir Manuellement la base dans la fenetre access qui s'est ouverte
à ce moment là, on peut continuer le prog et la requete s'exécute.