SQL VB

PFEDE2011 Messages postés 3 Date d'inscription dimanche 8 mai 2011 Statut Membre Dernière intervention 28 mai 2011 - 28 mai 2011 à 11:46
NHenry Messages postés 15116 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 mai 2024 - 28 mai 2011 à 17:05
J'ai un probleme au niveau de code vb 6 pour mettre a jour mon base de données sql

Rs.Open "select * from routeur,Equipement,CELLULE,marques,port where routeur.id_port = port.id_port and  Equipement.num_serie=routeur.num_serie and CELLULE.id_cellule = Equipement.id_cellule and marques.code_marque =Equipement.code_marque ", cnn, adOpenKeyset, adLockOptimistic

 Rs.AddNew

 Rs.Fields("num_serie") = série.Text
 Rs.Fields("nom") = nom.Text
 Rs.Fields("nom_marque") = Combo1.Text
 Rs.Fields("date_acquisition") = DTPicker1.Value
 Rs.Fields("vitesse") = vitesse.Text
 Rs.Fields("adresse_ip") = adresse.Text
 Rs.Fields("type_port") = Combo2.Text
 Rs.Fields("NOM_CELLULE") = Combo3.Text
 
 
 mg = MsgBox("routeur ajouté avec succé", vbOKOnly + vbCritical, "ajouter routeur")
  
 Rs.Update
 Rs.Close


il m'affiche l'erreur suivante "ne peut pas ni insere ni mettre à jour les colones dans plusieurs tables "
SVP aider moi

5 réponses

NHenry Messages postés 15116 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 mai 2024 159
28 mai 2011 à 13:47
Bonjour,

Le message est clair pourtant, tu ne peux pas faire de modification si tu mets plusieurs tables dans ta requête, il faut que tu traite les tables une par une.

D'autre part pour améliorer la performance de tes requêtes impliquant des jointures entre plusieurs tables, regardes du coté de INNER JOIN.

Mon site
0
PFEDE2011 Messages postés 3 Date d'inscription dimanche 8 mai 2011 Statut Membre Dernière intervention 28 mai 2011
28 mai 2011 à 16:09
Et si j'utilise une jointure interne il considere la premiere table qui va être mis à jour !!!!!!!!!!!!!!!!!!

dans ce cas où je separe les tables et les jointures je doit inseré tts les champs de chaque table

Exemple
Dans le formules vb6 j'ai les champs ( serie , nom , date_acquisition , vitesse )
Dans la base de données j'ai une table routeur et une table Equipement où elles sont reliées par le num_serie qui un clé primaire dans la table Equipement et un clé etrangere ds la table routeur
Donc qu'on je fait l'ajout d'un nouveau routeur le champ serie de formulaire doit etre insere à la fois dans les deux tables
mrc bien de me répondre
0
NHenry Messages postés 15116 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 mai 2024 159
28 mai 2011 à 16:21
Bonjour,

Voilà, il faut que tu fasse les ajouts dans chaque tables séparément.

Mon site
0
PFEDE2011 Messages postés 3 Date d'inscription dimanche 8 mai 2011 Statut Membre Dernière intervention 28 mai 2011
28 mai 2011 à 16:30
Rs.Open "select * from routeur  ", cnn, adOpenKeyset, adLockOptimistic
 Rs.AddNew
 
 Rs.Fields("num_serie") = série.Text
 Rs.Fields("nom") = nom.Text
 Rs.Fields("date_acquisition") = DTPicker1.Value
 Rs.Fields("vitesse") = vitesse.Text
 Rs.Fields("adresse_ip") = adresse.Text
 Rsm.Open "select * from marques  ", cnn, adOpenKeyset, adLockOptimistic
 Rsm.AddNew
 
 Rsm.Fields("nom_marque") = Combo1.Text
 
 Rsp.Open "select * from port  ", cnn, adOpenKeyset, adLockOptimistic
 Rsp.AddNew
 Rsp.Fields("type_port") = Combo2.Text
 Rsc.Open "select NOM_CELLULE from CELLULE  ", cnn, adOpenKeyset, adLockOptimistic
 Rsc.AddNew
 Rsc.Fields("NOM_CELLULE") = Combo3.Text
 
 
 mg = MsgBox("routeur ajouté avec succes", vbOKOnly + vbCritical, "ajouter routeur")
 Rsc.Update
 
Rsp.Update
 Rsm.Update
 Rs.Update
 Rs.Close

j'ai tape ce code mais par exemple dans la table cellule il y a deux champs ( id_cellule , nom_cellue) et moi je voulait insere seulement ds le champ nom_cellule --> --> l'erreur "'id cellule qui est le clé primaire ne doit pas prendre un valeur null "

MRC d'avance
0

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

Posez votre question
NHenry Messages postés 15116 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 mai 2024 159
28 mai 2011 à 17:05
Bonjour,

Pourquoi tu ne l'as pas mis en numéro automatique ?

Sinon remarques sur le code :
- Evite les accents dans les nom des éléments de code, ça rend ces derniers moins internationaux et aussi non standard.
- Préfixe tes controles :
+ TxtSerie : Textbox contenant la série
+ CmdOk : Bouton pour valider
etc.
- Evite les noms par défaits pour les contrôles que tu utilises dans le code, car ces noms sont peu explicites par la suite.

- Amélioration :
Tu peux créer une fonction qui te retourne le Recordset à partir de la requête SQL, cela te permettra d'avoir un code plus souple et plus simple à lire :
Rsp.Open "select * from port ", cnn, adOpenKeyset, adLockOptimistic
Deviendrait :
Set Rsp=OperRecordset("select * from port")

Cela te facilitera la tache aussi pour diagnostiquer les erreurs de requêtes.

Mon site
0
Rejoignez-nous