denver78610
Messages postés29Date d'inscriptionmardi 20 avril 2010StatutMembreDernière intervention13 juillet 2010
-
8 juin 2010 à 15:28
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
9 juin 2010 à 15:26
Bonjour a tous, j'èspère que tout le monde va bien.
J'ai un petit problème que je n'arrive pas à réglé même après quelques recherche , alors je m'en remet a votre savoir.
voila ma situation, j'aimerai exécuter une banal requete SQL depuis une application que je développe en VB6. Je tien a présisé que mon application exécute pas mal de requete et que je n'ai jamais eu de problème. Cependant cette requete est un peut long et elle fini par etre tronquer lors de son exécution
requete select stockvolume, stockvaleur from (stockhyperfamily INNER JOIN hyperfamilystock on stockhyperfamily.numhyperfamily hyperfamilystock.numhyperfamily) INNER JOIN EconomicUnit ON StockHyperFamily.numeconomicunit = EconomicUnit.numeconomicunit where nomhyperfamily = 'PL15_SV_FI_UNC_GP' and nomeconomicunit = 'AU109_0000';
requete exécuter select stockvolume, stockvaleur from (stockhyperfamily INNER JOIN hyperfamilystock on stockhyperfamily.numhyperfamily hyperfamilystock.numhyperfamily) INNER JOIN EconomicUnit ON StockHyperFamily.numeconomicunit = EconomicUnit.numeconomicunit where nom
Si j'ai bien compri la limite ce siturai à 256 char mais je ne comprend pas pourquoi.
j'utilise jet4.0 comme provider ainsi qu'un objet recordset pour exécuter ma requete.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 8 juin 2010 à 16:35
Salut
Je n'ai jamais eu de soucis personnellement et je pense avoir construit des requètes surement aussi longue.
Maintenant, tout dépend de ta variable 'requete' : Comment est-elle définie ? As String ?
Comment soumets-tu cette requète ?
De quels types sont les objets Connection et RecordSet ? DAO ? ADODB ?
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
denver78610
Messages postés29Date d'inscriptionmardi 20 avril 2010StatutMembreDernière intervention13 juillet 2010 9 juin 2010 à 09:40
a oui sinon pour moi mes objets sont de type ADO parce que c'est sur sa que je m'était renseigné pour créé ces lignes de codes, par contre aujourd'hui je ne sais absolutment ou llé voir le type de mon recordset ou de ma connection...
Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 9 juin 2010 à 10:14
Bonjour,
Pour aller voir le contenu de maconnection, etc..., tu as tout ça dans "Affichage/Variables Locales" en cours d'exécution.
Poste-nous le code de ta fonction qui exécute ta requête.
Autre essai, puisqu'apparemment ta BDD est sous Access, créés une nouvelle requete en mode SQL et fais un copier-coller de ta requete et exécute-là en passant son nom dans ta fonction perso'.
Calade
Vous n’avez pas trouvé la réponse que vous recherchez ?
' On teste que la requête n'est pas vide
If Not (macommand.BOF And macommand.EOF) Then
' On retourne la première ligne du rs.
macommand.MoveFirst
' On parcours le rs d'un bout à l'autre
Do While Not macommand.EOF
' Hop, on a trouvé une ligne
nblig = nblig + 1
macommand.MoveNext
Loop
' On retourne à la première ligne
macommand.MoveFirst
' maintenent que l'on a la taille du tableau résultat on alou le tableau res dynamiquement des tailles trouver
ReDim variable_global.res(0 To nblig, 0 To nbchamp)
Dim i, y As Integer
For i = 0 To nblig - 1
For y = 0 To nbchamp - 1
variable_global.res(i, y) = macommand(y)
Next y
macommand.MoveNext
Next i
Else
ReDim variable_global.res(0 To 0, 0 To 0)
variable_global.res(0, 0) = -1
End If
macommand.Close
Call bd.deconnectiondb
End Sub
voili voilou sinon petite info, avant l'appel de cette fonction j'ai fais un affichage de ma string requete et elle n'est pas tronqué.
Le tronquage ce fait donc soit dans le passage en paramètre soit au niveau de l'exécution
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 juin 2010 à 10:31
DAO est obsolète et certaines de ses fonctions ne marchent pas, comme le .Find
Mieux vaudrait utiliser ADO (ADODB) à jour en version 2.8 actuellement.
Ca t'obligerait à modifier la structure de tes méthodes de requète, mais ça vaudrait le coup.
S'il y a troncage de la chaine une fois installée dans ton Command, faudrait regarder dans l'aide si cette limite apparait dans cet objet, c'est possible.
Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 9 juin 2010 à 10:55
Petit détail,
As-tu vérifié la version d'ADO que tu utilises. Comme le dit Jack, la dernière en date est la 2.8 or par défaut, Access utilises la 2.1 qui a pas mal de problèmes.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 juin 2010 à 11:44
Quand tu ajoutes des références à ton projet, cela ne veut pas dire que tu l'utilises :
Tu as bien mis le ADO 2.8 mais si tu n'utilises pas les objets ADODB, c'est que tu utilises toujours DAO et tu peux enlever la référence à ADO.
Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 9 juin 2010 à 12:38
Dans Access, tu fais Création d'une nouvelle requête, dans le designer tu ne choisis aucune table.
Dans la barre d'icones, tu cliques sur celle intitulée "SQL" et là tu colles ta requête.
Pour l'exécuter, au lien de donner ta requête entière tu ne donnes que le nom de la requête Access que tu viens de créer (et que tu auras sauvegardé avec un nom quelconque (sans accent) de préférence).
denver78610
Messages postés29Date d'inscriptionmardi 20 avril 2010StatutMembreDernière intervention13 juillet 2010 9 juin 2010 à 13:53
J'avais déjà essayer cette solution, malheureusement la requete ne me retournais rien mais je n'avais pas d'erreur.
Par contre si je cré ma requete de cette manière, je ne peux pas faire varier les différents pramètres de ma clause where.
Je vais refaire une série de teste en ne mettant qu'une seul dll et je vous tien au courant si j'ai du nouveau.
Après une nouvelle série de recherche j'ai trouver quelques solutions bidouille qui passait toute par l'exécution d'un script VBA. Je pense que se serais la solution la plus simple, mais je ne sais pas comment exécuter le script depuis VB6. J'ai entendu parlé de la commande run, je vais me renseigné dessu. Je vous tien au courant.
Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 9 juin 2010 à 14:09
Attention à ne pas tout mélanger.
Tu postes en VB6, dans ton dernier post tu parles d'un script VBA puis d'une commande Run sous VB6.
1) Run n'existe pas sous VB6.
2) Un script stricto sensu n'existe qu'en VBS et à ma connaissance tu ne peux accéder à une base de données en VBS (à vérifier).
De 2 choses l'une, soit ton code EST dans ton fichier .MDB alors tu codes en VBA et tu oublies VB6.
Soit tu codes dans un Projet (extension .VBP) alors tu es en VB6 et tu attaques une BD Access. Dans ce dernier cas, la commande Run n'existe pas, sinon cela rique d'être RunCmd.xxx (voir l'Intellisense et l'aide en ligne pour les différentes valeurs que peu prendre xxx).
Le plus simple est de vérifier l'extension du fichier que tu ouvres pour avoir accès (entre autre ?) à ton code.
denver78610
Messages postés29Date d'inscriptionmardi 20 avril 2010StatutMembreDernière intervention13 juillet 2010 9 juin 2010 à 14:28
Je code en VB6 il n'y a pas de doute ladessu. Cependant je peux quant meme réalisé du code VBA dans access sous la forme d'une macro. Je pensais juste que je pouvais activer cette macro depuis VB6 a tor aperement. Quant a l'utilisation du mot script pour désigné les macros VBA, je suis désolé, c'était un abu de langage
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 juin 2010 à 15:26
Denver : Oui, tu peux changer les déclarations, mais les méthodes changent un peu, il faut donc aussi changer les syntaxes (qui se ressemblent)
Jette un oeil dans l'aide si tu y arrives (perso, j'ai un mal de chien à trouver l'aide des objets ADODB sous VB6 comme sur le site MSDN)
Tape "access adodb" dans la recherche de codes sauf .Net et tu auras des exemples de :
- Connexion (identique)
- soumission d'une requète par un RecordSet
- récupération des enregistrements présents dans le RecordSet
- soumission de commande directe comme "Insert Into" ou "Delete" par la métode .Exectute directement sur l'objet de connexion
Derniers mots :
Que tu t'adresses à une base de donnée Access, SQL Server ou autre, la syntaxe reste la même, seule la chaine de connexion ConnectionString de l'objet change.