Lien entre combo et base de donnée sqlserver

Résolu
jijidiscover Messages postés 65 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 24 mars 2009 - 16 déc. 2007 à 21:38
jijidiscover Messages postés 65 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 24 mars 2009 - 19 déc. 2007 à 14:17
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

Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
17 déc. 2007 à 12:59
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.

@+
3
jijidiscover Messages postés 65 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 24 mars 2009
17 déc. 2007 à 14:50
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
0
jijidiscover Messages postés 65 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 24 mars 2009
17 déc. 2007 à 15:01
C génial,

Merci bienpour votre aide
0
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
17 déc. 2007 à 15:13
Tant mieux si j'ai pu t'aider bonne prog @+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jijidiscover Messages postés 65 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 24 mars 2009
17 déc. 2007 à 19:38
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;
0
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
18 déc. 2007 à 07:55
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.
0
jijidiscover Messages postés 65 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 24 mars 2009
18 déc. 2007 à 14:10
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'
0
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
18 déc. 2007 à 14:19
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.
0
jijidiscover Messages postés 65 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 24 mars 2009
18 déc. 2007 à 14:55
ç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
0
jijidiscover Messages postés 65 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 24 mars 2009
18 déc. 2007 à 14:57
ComboBox.Text

combobox c le nom du combo  ?
0
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
18 déc. 2007 à 15:05
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
0
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
18 déc. 2007 à 15:06
Désolé j'en ai oublié une partie l'erreur viendra si ton combobox.text est vide
0
jijidiscover Messages postés 65 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 24 mars 2009
18 déc. 2007 à 15:31
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
0
jijidiscover Messages postés 65 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 24 mars 2009
18 déc. 2007 à 15:44
oh non quel erreur c pas Form_LostFocus
0
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
18 déc. 2007 à 15:46
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.
0
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
18 déc. 2007 à 15:47
Pas si débutante que ça tu l'as ecrit avant moi !!!
0
jijidiscover Messages postés 65 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 24 mars 2009
18 déc. 2007 à 16:05
cé encore vide
0
jijidiscover Messages postés 65 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 24 mars 2009
18 déc. 2007 à 16:10
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 ?
0
jijidiscover Messages postés 65 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 24 mars 2009
18 déc. 2007 à 16:15
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?
0
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
19 déc. 2007 à 08:04
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.
0
Rejoignez-nous