Lien entre combo et base de donnée sqlserver [Résolu]

Signaler
Messages postés
65
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
24 mars 2009
-
jijidiscover
Messages postés
65
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
24 mars 2009
-
Salut tous,
j'ai inserer plusieurs combo dans un formulaire:
société,service,catégorie, departement, qualification.
les données se trouve dans une base de données sqlserver
chaque donnée appartient à une table
le problème c ke j'arrive pas à mettre chaque données dans le combo correspondant.
ce code me permet d'afficher tous les données dans un seul combo.
j'ai essayer de séparer les requetes select, le premier combo s'affiche correctement mé le deuxième m'indique un message d'erreur 'cette operation n'est pas permis si l'objet est ouvert'

<li>PrivateSub Form_Load()
</li><li>Adodc2.CursorLocation = adUseClient
</li><li>Adodc2.CursorType = adOpenDynamic
</li><li>Adodc2.ActiveConnection = p_adoConnect.ConnectionString
</li><li>Adodc2.Open "SELECT Société.[Libellé sct], département.Libellé, Service.[Libellé service],Catégorie.Libellé_CAT,[Groupe horaire].[Libellé groupe] , qualification.[Libellé qtl] FROM Société CROSS JOIN Service CROSS JOIN Catégorie CROSS JOIN département CROSS JOIN qualification CROSS JOIN [Groupe horaire] ORDER BY Société.Id_société"
</li><li>i = 0
</li><li>DoWhileNot Adodc2.EOF
</li><li>Combo1(1).AddItem Adodc2.Fields("Libellé sct") + "" + Adodc2.Fields("Libellé") + "" + Adodc2.Fields("Libellé service") + "" + Adodc2.Fields("Libellé_CAT") + "" + Adodc2.Fields("Libellé groupe") + "" + Adodc2.Fields("Libellé qtl"), i
</li><li>i = i + 1
</li><li>Adodc2.MoveNext
</li><li>Loop</li><li>EndSub</li>Merci pour votre aide

21 réponses

Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
Salut jijidiscover,

Tu ne peux pas modifier tes requêtes alors que la connexion est toujours ouvertes.

Je te conseilles donc de :
pour chaque combo :
   Ouvre la connexion
   Lance ta requête
   Traite ta combobox
   ferme la connexion

Si tu fait un module avec des procédure bien séparée ce sera pas plus long mais plus efficace et surtout réutilisable.

@+
Messages postés
65
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
24 mars 2009

Salut le newbi,



Après de rédiger le module, je fais à chaque fois l’appel des  procédures l’une après l’autre



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

 





Mais à chaque appel j’ouvre et je ferme la connexion




 





C’est ça ?




 




Merci
Messages postés
65
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
24 mars 2009

C génial,

Merci bienpour votre aide
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
Tant mieux si j'ai pu t'aider bonne prog @+
Messages postés
65
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
24 mars 2009

Bonsoir,


Je veut ajouter devant chaque combo un textbox

lors de l'insertion de code dans le combo, le libellé qui correspond à la code
 
selectionnée s'affiche automatiquement.

J'ai essayé le syntaxe suivant:

 Texts.Item = " select [Libellé sct] from société order by Id_société"

mais ça beug

je sé pas ou est le poblème;
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
Salut,

Si j'ai bien compris tu veux que ta textbox te montre LA VALEUR ajoutée dans le combo (pas la requête donc).

Si c'est la valeur :
Combo1(1).AddItem Adodc2.Fields("Libellé sct") + "" + Adodc2.Fields("Libellé") + "" + Adodc2.Fields("Libellé service") + "" + Adodc2.Fields("Libellé_CAT") + "" + Adodc2.Fields("Libellé groupe") + "" + Adodc2.Fields("Libellé qtl"), i


textbox1.text = Adodc2.Fields("Libellé sct") + "" + Adodc2.Fields("Libellé") + "" + Adodc2.Fields("Libellé service") + "" + Adodc2.Fields("Libellé_CAT") + "" + Adodc2.Fields("Libellé groupe") + "" + Adodc2.Fields("Libellé qtl"), i




Si c'est la requête :
Combo1(1).AddItem Adodc2.Fields("Libellé sct") + "" + Adodc2.Fields("Libellé") + "" + Adodc2.Fields("Libellé service") + "" + Adodc2.Fields("Libellé_CAT") + "" + Adodc2.Fields("Libellé groupe") + "" + Adodc2.Fields("Libellé qtl"), i
textbox1.text = "SELECT Société.[Libellé sct], département.Libellé, Service.[Libellé service],Catégorie.Libellé_CAT,[Groupe horaire].[Libellé groupe] , qualification.[Libellé qtl] FROM Société CROSS JOIN Service CROSS JOIN Catégorie CROSS JOIN département CROSS JOIN qualification CROSS JOIN [Groupe horaire] ORDER BY Société.Id_société" 

Si j'ai répondu à côté par rapport à ta demande essaye d'être un chouilla plus clair pour que je t'aide (relis ton post en pensant que je ne connais pas ton projet et ton IG). A tout tiens moi au jus je ferais au mieux pour t'aider.
Messages postés
65
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
24 mars 2009

Bonjour,

je vai essayé d'etre beaucoup plus clair et merci pour ton aide

la table département contient
       id_département
        Libellé

suite à tes conseils le code devient comme suit:

Adodc2.CursorLocation = adUseClient
Adodc2.CursorType = adOpenDynamic
Adodc2.ActiveConnection = p_adoConnect.ConnectionString
Adodc2.Open " select Libellé from département order by id_département"
i = 0
Do While Not Adodc2.EOF
 Combo1(4).AddItem Adodc2!Libellé, i
  i = i + 1
  Adodc2.MoveNext


Loop
Adodc2.Close

ce code permet l'affichage du nom de département dans le combo

je veux que id_département s'affiche dans le combo et libéllé departement s'affiche
dans le textbox qui est juste à coté dans le formulaire.

j'ai essayé donc ce syntaxe

Adodc2.Open " select id_département, Libellé from département order by id_département"
i = 0
Do While Not Adodc2.EOF
 Combo1(4).AddItem Adodc2!id_département, i
 Textd.Text = Adodc2!Libellé

mais le problème que (.text) ne l'accepte pas

le message d'erreur qui s'affiche

'Methode ou membre de donnée introuvable'
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
Ok d'accord donc en fait tu veux qu'en fonction du N° de département choisi dans la combo, le bon libéllé de département s'affiche dans la textbox. A ce moment là, joue sur l'événement LostFocus de ta combobox pour faire ta requête : "select Libellé from département Where id_département = ' " & combobox.text & " ';
puis ton Textd.Text = Adodc2!Libellé

Attention, n'oublie pas les simple quotes entourant la valeur texte de ta combo sinon ça plante et je ne sais pas si ta base est vraiment comme ça mais les accents sont à proscrire (c'est un conseil).

Tiens moi au jus.
Messages postés
65
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
24 mars 2009

ça beug toujour dans .Text methode introuvable

mais j'ai trouvé pourquoi c l'indexe du text je l'avais supprimé

ça beug aussi dans cette ligne

Adodc2.Open "select Libellé from département Where id_département = ' " & ComboBox.Text & " ';"


Ereur d'execution, un erreur est requis


Merci pour tes conseils
Messages postés
65
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
24 mars 2009

ComboBox.Text

combobox c le nom du combo  ?
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
Oui désolé si j'ai manqué de précision.

Ta requête :
 "select Libellé from département Where id_département = ' " & ComboBox.Text & " ';"

Le combobox.text correspond à la valeur du texte lue dans ta combo. Je n'ai pas utilisé le nom de ton objet qui est je crois Combo1(4).

Attention l'événement lost focus est super traitre. Car si tu es sur ta combobox et que tu veux modifier quelque chose ailleurs, le lost focus est déclenché et donc ta requête va te faire une erreur. Vérifie bien la valeur du champs texte de la combo avant ta requete.

Exemple :

If Combo1(4).Text <> "" then
   ta requête
else: exit sub
end if
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
Désolé j'en ai oublié une partie l'erreur viendra si ton combobox.text est vide
Messages postés
65
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
24 mars 2009

Cette fois y a pas un erreur de syntaxe mais combo est vide

Private Sub Form_Load()

Adodc2.CursorLocation = adUseClient
Adodc2.CursorType = adOpenDynamic
Adodc2.ActiveConnection = p_adoConnect.ConnectionString
Adodc2.Open "select Libellé from département Where id_département = ' " & Combo1(4).Text & " ';"
'Textd.Text = Adodc2!Libellé
i = 0
Do While Not Adodc2.EOF
 Combo1(4).AddItem Adodc2!id_département, i
 Textd.Text = Adodc2!Libellé
  i = i + 1
  Adodc2.MoveNext


Loop
Adodc2.Close
end sub

Private Sub Form_LostFocus()
If Combo1(4).Text <> "" Then
 Adodc2.Open "select Libellé from département Where id_département = ' " & Combo1(4).Text & " ';"
Else: Exit Sub
End If


End Sub

désolé, je suis debutante
Messages postés
65
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
24 mars 2009

oh non quel erreur c pas Form_LostFocus
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
C'est pas grave t'inquiètes on y est tous passé (regarde mon pseudo).
Attention il faut prendre l'événement LostFocus de la combobox pas de la form
Private Sub Form_LostFocus() AIE AIE .

Dans tes listes déroulantes en haut de l'écran tu dois en avoir 2. Dans celle de gauche choisi la combobox que tu veux et dans celle de droite l'événement lost focus.

L'erreur de syntaxe vient du fait que ta combo est vide ? ou se situe elle exactement, quelle ligne ?

Si c'est la combo vide qui te gène regarde mon post au dessus je t'ai mis :

If Combo1(4).Text <> "" then
   ta requête
else: exit sub
end if

Cela permet lors du lost focus que si t'as combo est vide de ne pas faire de requête avec une condition WHERE id_Departement = ___ ;

Je pense que ton problème se situe donc le lost focus que tu fais sur la form et non sur la combo.
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
Pas si débutante que ça tu l'as ecrit avant moi !!!
Messages postés
65
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
24 mars 2009

cé encore vide
Messages postés
65
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
24 mars 2009

Le poblème c k combo ne se charge pas donc je pense k


la connexion ne s'ouvre pas ou l'importation des données est incorrecte


c ça ?
Messages postés
65
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
24 mars 2009

Adodc2.Open "select Libellé, id_département from département Where id_département = ' " & Combo1(4).Text & " ';"

Stp, si tu m'explique la condion where?
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
Alors que je t'explique,

Tout d'abbord je fais du .Net et uniquement du .Net. Donc si tu veux je te donne un exemple en VB que je trouve sur le forum.

Ex :

<li>'Declaration</li><li>Dim env As rdoEnvironment
</li><li>Dim con As rdoConnection
</li><li>Dim rdorequest As rdoQuery
</li><li>Dim RESULT As rdoResultset
</li><li></li><li>'La connexion</li><li></li><li>Set env = rdoEnvironments(0)
</li><li>Set con = env.OpenConnection("", rdDriverNoPrompt, False, "UID=sa;PWD=your_pswd;Database=name_base_sql;server=name_server;driver={SQL Server};DSN=''")
</li><li></li><li>'votre requete</li><li>request "Select * from name_table where name_champ " & "'" + valeur + "'"
</li><li>Set RESULT = con.OpenResultset(request, rdOpenKeyset, rdConcurLock, StillExecuting + rdExecDirect)
</li><li></li><li>' nombre d'enregistrement de la base sql</li><li>Nbr = RESULT.RowCount
</li><li></li><li>DoWhileNot RESULT.EOF
</li><li>' votre traitement, Ajout dans ta combo</li><li>loop</li>Pour info la clause WHERE est une condition.
Donc si on reprends le concept de la requête dite SELECT.

SELCT (On selectionne ce que l'on veux afficher (toi tes id de dep) FROM (La table de la base de données)
WHERE (Ce n'est pas obligatoire si tu t'arrête avant le WHERE tu affiches toutes les valeurs selectionnées en fonction de la table) (La condition : Ex id_Dep = 01 : Avec cette condition, tu affiche uniquement le departement 01 L'ain OKI). Un tutoriel pour le sql. ici :
http://sgbd.developpez.com/cours/sql/sqlnice.pdf

Réflechis un peu avant de lancer ce code il faut que tu modifie des trucs (User, Pwd, DNS, ...)
A toi de jouer bon courage.

Par contre je pense qu'on va se faire jeter à chatter ici au bout d'un moment. Passe par des messages privés pour que je puisse continuer à t'aider. A toute.
1 2