Aller au contenu

[VB6+Access] Probleme de requete


Messages recommandés

Bonjour,

je fais une petite appli en VB pour gerer une liste de declarations stockées dans une BD Access. J'ai un petit probleme qui me laisse reellement perplexe : ma requete pour afficher toutes les declarations marche bien sous Access, mais pas sous VB :ouch:

Description de mes tables :

ZONE(Num_Zone, Nom) avec cle primaire : Num_Zone

IMPORTANCE(Num_Importance, Importance) avec cle primaire : Num_Importance

DECLARATION(Num_Declaration, Lieu, Date, Declarant, Risque, Date_Debut, Date_Fin, Delai, Action, Num_Zone, Num_Importance) avec cle primaire : Num_Declaration et cles secondaires : Num_Zone et Num_Importance

sur mon Formulaire VB, j'ai mis une Datagrid dont la source est la requete en question :

SELECT DECLARATION.Num_Declaration, DECLARATION.Lieu, DECLARATION.Date, DECLARATION.Declarant, DECLARATION.Risque, DECLARATION.Date_Debut, DECLARATION.Date_Fin, DECLARATION.Delai, DECLARATION.Action, DECLARATION.Num_Zone, ZONE.Nom, DECLARATION.Num_Importance, IMPORTANCE.Importance FROM DECLARATION, IMPORTANCE, ZONE WHERE ZONE.Num_Zone = DECLARATION.Num_Zone AND IMPORTANCE.Num_Importance = DECLARATION.Num_Importance ORDER BY DECLARATION.Num_Declaration;

Le code de VB :

Dim rsSituations As ADODB.Recordset
Dim Requete As String
   
   Requete = "SELECT DECLARATION.Num_Declaration, DECLARATION.Lieu, DECLARATION.Date, DECLARATION.Declarant, DECLARATION.Risque, DECLARATION.Date_Debut, DECLARATION.Date_Fin, DECLARATION.Delai, DECLARATION.Action, DECLARATION.Num_Zone, ZONE.Nom, DECLARATION.Num_Importance, IMPORTANCE.Importance "
   Requete = Requete & "FROM DECLARATION, IMPORTANCE, ZONE "
   Requete = Requete & "WHERE ZONE.Num_Zone = DECLARATION.Num_Zone "
   Requete = Requete & "AND IMPORTANCE.Num_Importance = DECLARATION.Num_Importance "
   Requete = Requete & "ORDER BY DECLARATION.Num_Declaration;"
   
   Set rsSituations = New Recordset
   rsSituations.CursorLocation = adUseClient
   rsSituations.Open Requete, Connexion, adOpenStatic, adLockReadOnly
   Set DtgLstSituations.DataSource = rsSituations

sous Access, si je teste la requete, ca marche nickel ! :)

sous VB, si j'execute le code donne au-dessus, j'obtiens le message d'erreur :

Erreur d'exécution '-2147467259 (80004005)'

La méthode 'Open' de l'objet '_Recordset' a échoué

je pense que le probleme vient reellement de la requete, car si je fais un "SELECT * FROM DECLARATION", ca marche !

est ce que quelqu'un pourrait m'aider ? :chinois::chinois:

Lien vers le commentaire
Partager sur d’autres sites

perso, dans l'imédiat.... non, je connais plus par coeur :chinois:

ce soir après le fitness je jetterais un oeil sur mes anciens exercices si personne n'aurat su t'aider sur ce petit problème (bah voui, vb y'a pas grand monde ici :chinois: )

ah, petite question, c'est quelle version de VB? :chinois:

Lien vers le commentaire
Partager sur d’autres sites

VB6, parfait, c'est le seul que j'ai utilisé :francais:

bon j'ai déjà jeté un oeil sur le code, va faloir changer beaucoup de choses là je crois :mad2:

datagrid :-D je me rapelle plus quel composant c'était ça, aaaalala quand la mémoire est pas rafraichie continuellement c'est pas facile :transpi: je vai dire au bol que c'est un tableau, tu veus metre quelles valeurs dedans?

Les tables de ta bdd elles sont liées?

Tu veus aussi écrire dans la bdd? (donc metre à jour les données modifiées dans le programme vb si modifs il y a)

P.S. je pose toutes ces questions à l'avance comme ça je sais direct quoi chercher une fois chez moi, ça sera vers environ 8h :D

Lien vers le commentaire
Partager sur d’autres sites

meuh non, il est tres bien mon code ! :D

plus serieusement, une datagrid, c'est un tableau :) et ce tableau je vais le remplir a partir de ma requete.

normalement ca marche nickel, j'ai pris ca a partir de code deja fait en cours...

le tableau sera en lecture seule, ainsi que la base, pas besoin de faire de MAJ ou autre :fumer:

a tout a l'heure :-D

Lien vers le commentaire
Partager sur d’autres sites

me voilà (ouai, trop crevé pour me bouger au fitness.... j'irais demain :roll: )

alors en fait c'est tout con (mais quand même, les requêtes access ça marche pas sous VB :eeek2: ), t'as même pas besoin de code :rhooo:

(là c'est un projet vide avec rien d'autre dessus)

on va déjà rajouter ces 2 composants si tu ne les a pas encore:

controles.jpg

tu poses un adodc n'importe où sur la feuille, tu pourras le rendre invisible par la suite.

maintenant un click droit sur le contrôle pour accéder aux "Propriétés du contrôle ADODC"

dans l'onglet général, on choisit "Utiliser une chaîne de connexion" et créer.

Comme provider, utilises "Microsoft Jet 4.0 OLE DB Provider" et click next.

Entres l'emplacement de ta base de donnée (si elle se trouve dans le même dossier que ton programme, utilises plutôt un lien dynamique genre ".\mabase.mdb", comme ça pas besoin de changer le chemin si tu déplace ton programme). Testes la connection pour voir si ça fonctionne bien.

C'est tout pour la chaîne de connection, maintenant vas sur l'onglet "RecordSource" et choisis le type de commande "2 - adCmdTable", tes tables devraient s'afficher dans la liste déroulante juste en dessous, choisis la table apropriée.

c'est tout bon pour le contrôle ADODC

maintenant poses ton datagrid, dans ses options à droite tu vas dans "datasource" et tu choisis ton adodc (nom par défaut adodc1 etc..." )

lances le programme et magie, le datagrid est rempli tout seul :incline: (et pas une ligne de code :humour: )

Lien vers le commentaire
Partager sur d’autres sites

Re bonjour :)

de retour au taff, je me suis penche sur ton petit conseil

et helas ca ne marche pas, pour une simple et bonne raison : je ne veux pas afficher une table, mais le contenu de 3tables :mdr: ta manip correspond exactement a ce que j'ai deja fait, a part que je n'ai pas utilise le composant ADODC, mais une variable ADODB :

dans un module, j'ai declare en variable globale (public) une variable que j'ai appelle Connexion (original non ?) que j'ai initialise au lancement du programme avec la bonne chaine de connexion

de la meme maniere, j'ai place ma datagrid que je nourris par un recordset (methode datasource aussi)

la seule difference entre ta manip, et ce que j'ai fait moi, c'est que toi tu fais une requete de type "SELECT * FROM UNE_TABLE" alors que moi je voudrais faire un SELECT sur plusieurs tables :D

ce qui me deroute encore plus, c'est que je l'ai deja fait dans un autre programme, ou ca marche tres bien !!! :8

bref, je continue mes investigations :transpi:

Lien vers le commentaire
Partager sur d’autres sites

aaaaah, tu veus les 3 tables, ben écoute perso c'est simple, j'ai jamais utilisé de datagrid pour ce genre de chose :D

dans un cas comme ça j'ai toujours balancé le contenu complet des 3 tables dans 3 datagrid différentes et j'ai ensuite balancé les champs que je voulais dans une flexgrid :roll:

c'est une façon comme une autre, c'est pas très avancé, mais ça marchait donc voilà :p

mais alors comment lier une seule datagrid à 3 tables je vois pas :mdr:

Lien vers le commentaire
Partager sur d’autres sites

si par ma requete, ca marche normalement :D

mais en fait, je crois que j'ai identifie le probleme :

quand je fais ca :

SELECT * FROM ZONE

ca me renvoi mon senpiternel message d'erreur !

donc le probleme est bien sur cette table

rontudju que j'aime access ! :p

Lien vers le commentaire
Partager sur d’autres sites

c'est genial c'est parfait !!!

j'ai supprime ma table ZONE, j'ai cree une table SECTEUR avec la meme structure et les memes donnees, et ca marche...

beaucoup de vent pour si peu au final... :p

en tout cas, merci pour l'aide, c'est sympa :D

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...