Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Requête d'ajout/modification multi-tables [ Base de données / SQL ] (rabenls)

vendredi 13 avril 2007 à 20:58:31 | Requête d'ajout/modification multi-tables

rabenls

Bonjour,
Je travaille en VB6 et j'accède à ma base avec ADO et des requêtes SQL.
J'ai une table "Composant", une table "Categories" et une table "Marque". L'application finale aura encore plus de tables et de relations mais si j'arrive à gèrer ces 3 là, le reste posera pas de problème. Chaque table a un ID clé primaire, ce qui complique surement les choses mais qui est nécessaire.


Tout d'abord, pour la suppression, pas de problème, avec ce code ADO:


TbComposants.MoveFirst
While (Not TbComposants.EOF)
    If (TbComposants("NomComposant") = ListComposants.Text) Then
        If (TbComposants.RecordCount <> 0) Then
            TbComposants.Delete
            TbComposants.Update
            TbComposants.Requery
        End If
    End If
TbComposants.MoveNext
Wend


J'aurais pu m'en sortir avec une requête sql, mais soit, çà marche bien comme çà.
Maintenant j'ai un soucis pour l'ajout et la mise à jour. Comme la mise à jour et l'ajout sont proche techniquement, c'est par l'ajout que j'ai commencé avant de me lancer dans la modification. Mon premier test a été:


Private Sub CommandAjout_Click()
Combo2.Text = ""
Combo3.Text = ""
Text1.Text = ""
End Sub

Private Sub CommandValiderAjout_Click()
CmdAdoAddComposant.ActiveConnection = MaConnection
CmdAdoAddComposant.CommandText = "SELECT * FROM Composants"
Composants.Ref_Marque FROM Composants"
TbComposants.CursorLocation = adUseClient
TbComposants.CursorType = adOpenDynamic
TbComposants.LockType = adLockPessimistic
TbComposants.Open CmdAdoAddComposant
TbComposants.AddNew
TbComposants![NomComposant] = IIf(IsNull(Text1.Text), "", (Text1.Text))
TbComposants![Ref_Categorie] = IIf(IsNull(Combo2.Text), "", (Text1.Text))
TbComposants![Ref_Marque] = IIf(IsNull(Combo3.Text), "", (Text1.Text))
TbComposants.Update
TbComposants.Requery
End Sub


Mais celà ne fonctionne pas, j'ai une erreur, vb6 n'associe pas les références aux tables.
Le seul moyen que j'ai trouvé pour ajouté des composants à la table est celui ci:


Private Sub Command4_Click()
CmdAdoAddComposant.ActiveConnection = MaConnection
CmdAdoAddComposant.CommandText = "INSERT INTO Composants ( Id, NomComposant, Ref_Categorie, Ref_Marque ) SELECT Composants.Id, Composants.NomComposant, Composants.Ref_Categorie, Composants.Ref_Marque FROM Composants"
TbComposants.CursorLocation = adUseClient
TbComposants.CursorType = adOpenDynamic
TbComposants.LockType = adLockPessimistic
TbComposants.Open CmdAdoAddComposant
TbComposants.requery
End Sub


Mais celui ci rajoute le contenu entier de la table composant, à la table composant. Mais celà fonctionne, donc je pense que c'est déjà une bonne base.
Il faudrait donc que dans ma requête SQL, je spécifie le contenu de NomComposant, Ref_Categorie et Ref_Marque, ce que j'ai essayé sans succès pour l'instant.

Voilà, merci à ceux qui ont lu jusqu'au bout et encore plus à ceux qui répondront
A bientot

merci
raben


vendredi 13 avril 2007 à 21:28:15 | Re : Requête d'ajout/modification multi-tables

chaibat05

salut,

ta requête doit se présenter comme ça :
"INSERT INTO Composants ( Id, NomComposant, Ref_Categorie, Ref_Marque )
SELECT Composants.Id, Composants AS Expr1. NomComposant, Composants.Ref_Categorie
AS Expr2, Composants.Ref_Marque AS Expr3 FROM Composants
WHERE + la valeur de l' Id de l' enregistrement que tu dois ajouter


vendredi 13 avril 2007 à 21:46:49 | Re : Requête d'ajout/modification multi-tables

chaibat05

Bon on laisse le code pour l' instant et corrigeant quelques imperfection au niveau
de la conception:
1° lorsqu' il s' agit de tables liées, il faut éviter le N° Auto
   et opter pour un Long

2° C' est mieux d' avoir, dans les trois tables, le même nom de champ
sur le quel est établie la relation

Composant    Categories     Marque
 Id                     Id                   Id

3° je viens de me rendre compte que
"INSERT INTO Composants ( Id, NomComposant, Ref_Categorie, Ref_Marque )
SELECT Composants.Id, Composants.NomComposant, Composants.Ref_Categorie,
Composants.Ref_Marque FROM Composants"

tu inseres dans Composants le contenu de Composant...
il y' a là quelque chose qui ne colle pas ! , non ?


vendredi 13 avril 2007 à 22:32:37 | Re : Requête d'ajout/modification multi-tables

chaibat05

...

ce que je veux dire c' est :

                           *Composants   
*Categories                  Id
 Ref_Categorie --->  Ref_Categorie            *Marques                            
                               Ref_Marque   <---------   Ref_Marque  

 

Si la propriété "Mettre à jour automatiquement" de la relation est True:
>tu changes dans Categories, ça  change automatiquement dans Composants
>tu changes dans Marques, ça  change automatiquement dans Composants 

2°Après
TbComposants.AddNew
Ou est l' Id ? Si c' est Auto , d' accord
sinon tu dois récupérer le dernier et l' incrémenter de 1

3° Peut être que chaine vide autorisée pou NomComposant
Mais, tes tables étant liées,
TbComposants![Ref_Categorie] = IIf(IsNull(Combo2.Text), "", (Text1.Text))
TbComposants![Ref_Marque] = IIf(IsNull(Combo3.Text), "", (Text1.Text))
sont érronées               
Dans Composants,Ref_Categorie ne doit pas être nulle.
Ref_Marque aussi...


samedi 14 avril 2007 à 16:06:08 | Re : Requête d'ajout/modification multi-tables

rabenls

Bonjour,

En efftet la requête rajoute la table composants à la table composants, mais au moins celà fonctionnait, donc je partais de çà comme base.

La mise à jour des relations est bien automatique entre les tables.

En effet les champs ref_categorie et ref_marque doivent être rempli, mais je n'arrive pas à faire comprendre au programme qu'il doit les remplir en partant du textbox ou combobox, mais en allant chercher la valeur dans la table de la relation. J'ai essayé d'assigner un numérique, au cas ou le programme n'accepterait que la valeur d' id comme valeur.

merci

samedi 14 avril 2007 à 17:50:40 | Re : Requête d'ajout/modification multi-tables

chaibat05

Réponse acceptée !

Bonjour,
Je n' arrive toujours pas à comprendre l' insertion des composants
dans composants.
Insertion veut dire Ajout.
Si ton Id est Auto, tu vas te retrouver avec des composants en double
(voir plus) mais avec des Id différents
Composasants
1    A
2    B
3    C
4    A
5    B
6    C

Ensuite, je considère que Categories et Marques sont des tables "Fixes"
Elles doivent être initialisées avant d' entreprendre d' ajouter des composants
Chacun dans un formulaire et tu choisira toi même leur Ref.
(évite le N° Auto)

Dans ton Formulaire Saisie Des Composants
Tu dois avoir deux DBCombo .L' un liste les Catégories et l' autre les Marques
à partir desquels l' utilisateur séléctionnera une valeur.
IdComposant étant  étant Auto il ne te reste plus que NomComposant que tu dois saisir.

Autre chose à propos de N° Auto.
Lors de l' insertion avec requête ajout ,il faut l' exclure de la liste des champs

"INSERT INTO Composants ( NomComposant, Ref_Categorie, Ref_Marque )
SELECT " & xNomComposant & " AS Expr1, " & xRef_Categorie & " AS Expr2, " & _
 xRef_Marque & " AS Expr3;"


xNomComposant,xRef_Categorie et xRef_Marque sont des variables bien sur...

Mais je continue toujours à te déconseiller le N° Auto...

C' est vous qui voyez...!


samedi 14 avril 2007 à 18:27:31 | Re : Requête d'ajout/modification multi-tables

rabenls

J'ai bien 2 combos avec catégories et marques qui sont remplies avec le contenu des tables respectives, que l'utilisateur peut choisir. Et un textbox pour le nom du composant que l'utilisateur doit encoder.

Je vais tenté sans les numéros auto pour categories et marques, je crois en effet que ca sera plus simple, que çà n'est pas nécessaire, et que ca sera plus facile. Mais on m'a toujours donné comme consigne de mettre des ids clé primaire pour chaque table.

Evidemment que la requête de la table composants ne sert à rien et créer des doublons, mais c'était le seul moyen d'ajouter quelque chose à ma table et qui fonctionnait.

merci

samedi 14 avril 2007 à 19:30:43 | Re : Requête d'ajout/modification multi-tables

chaibat05

^^Je vais tenté sans les numéros auto pour categories et marques, je crois en effet que ca sera plus simple,..."
t' as donc rien compris...!
crois moi ça sera encore plus difficile
Indexes Categories sur Ref_Categorie (Texte)
Indexes Marques sur Ref_Marque (Texte)
Quand tu listes dans les combos, c' est plus facile de récupérer du texte...



samedi 14 avril 2007 à 19:33:27 | Re : Requête d'ajout/modification multi-tables

chaibat05

pardon !
c' est moi qui a mal compris...
je croyais que c' était tenté avec  les numéros auto...

samedi 14 avril 2007 à 23:32:42 | Re : Requête d'ajout/modification multi-tables

rabenls

pas de soucis ;)
je suis entrain d'arriver a quelque chose :)
enfin même, çà marche ! mais je refais çà au propre demain et j'attaque la mise à jour après l'insertion

merci !



Cette discussion est classé dans : text, table, ref, composants, tbcomposants


Répondre à ce message

Sujets en rapport avec ce message

demande d'aide [ par mig ] j'ai deux table produitconstitue de {ref produit,libelle,prix ,stock} et table vente{n vente,code client ,ref produit,code employé,quantité,date ,tota Besoin de copier des informations d'une table dans une autre table sur Access [ par Nejil ] Bonjour, voilà j'ai un petit problème j'aimerais savoir comment faire pour copier les informations lus en cours par le contrôle data de la page - elle Calcul dans un flexgrid. -> URGENT [ par Sadnotrue ] Salut !!Je cherche à multiplier des cellules positionnées sur la même ligne mais sur des colonnes différentes. Voici un extrait de mon code : I create table [ par DarkLanfeust ] il me dit qu'il y a une faute de syntaxe dans cette requete, je trouve pashelp pleaseCREATE TABLE dictionnaire(N° int(8) PRIMARY KEY,francais1 text(50 Pb: Ajout données dans table / ADO [ par laurentkreps ] Je dois absolument ajouter le contenu de textbox dans une table "cours". J'ai essayé avec une requête SQL:txtsql = "INSERT INTO [Cours] (CJour, CHeure Inserer avec VB dans table access ! [ par YabLeo ] Salut alors voilà g un gros probleme qui m'empeche de continuer mon projet (en stage).Dans mon projet je créé une base access comme ceci :Set dbLbv = definir la taille d'un champ dans une basse access [ par gueststar ] bonjour!j'ai une requete dans mon code qui créé des champs dans une table et qui leur donne des caracteristiques!Seulement je ne sai pas comment attri vb + access + ado [ par Sadnotrue ] Bonjour à celle ou ceux qui liront ce post !!Voilà je cherche à récupéré des infos d'une base de donnée accès sous vb. Ma connexion fonctionne mes req ouvrir une table Access par VB6 [ par Marnilla ] Bonjour,J'ai un soucis dans mon programme, je ne comprends pas pourquoi il ne fonctionne pas.Je dois ouvrir une table dans ma base Access, j'ouvre ma Impossible de créer mes tables (VB + Access) [ par opus32 ] Bonjour, je crée une base de données access en vb, la base est bien créée mais elle est vide, mes tables ne se créent pas.Voici mon code : Option Expl


Nos sponsors

Sondage...

CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,328 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.