|
Trouver une ressource
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)
Informations & options pour cette discussion
|
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
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
|