Mise à jour VB6 et Access 2007 avec requête SQL

Fermé
mohalesage Messages postés 147 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 31 décembre 2015 - Modifié par Jeff le 5/11/2014 à 17:49
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 29 mai 2014 à 10:44
Bonjour l'Ami,


J'ai besoin de votre aide. Je me suis trouvé coincé au bout du couloir. Je n'arrive pas à dépasser le niveau de la mise à jour, surtout la commande Modifier

Pour information

Je travaille avec VB6 et Acces 2007, utilisant la requête SQL


sur le Module, j'ai écris

Public DB as New ADOBD.Connection

Public RS as New ADODB.RecordSet

Public Rss as New ADODB.RecordSet


Public SQLs as String




Sur acces il y a Trois Tables

Une TablePrincipale ( stock les données saisies à partir de la feuille de saisie )
Deux Tables Secondaires indexéeqs ( TableNom, TableMatiere )

TableNom est indexée par Les Nom
TableMatiere est indexée par les Matiere





Mon problème se situe au niveau de la commande Modifier.



Sur la feuille d'affichage pour la consultation en vue de la modification, les données sélectionnées sur la feuille de Recherche s'affichent

lorsque je change le contenu d'un objet text, le changement s'effectue :

Normalement sur la TablePrincipale

Normalement sur les deux Tables secondaires tant que Nom ( index sur la TableNom ) et Matiere ( Index sur la TableMatiere ) n'ont pas été modifié sur la feuille de consultation en vue de la modification

Mon objectif est : lorsque je change sur la feuille de consultation en vue de modification, par exemple Nom, les données saisies auparavant devant le nom x disparaissent de la ligne de ce nom, mais apparaissent sur la ligne du nouveau Nom saisi sur l'objet Text de la feuille consultation

Bien sur il y a toujours une condition pour chacune de modification

Une partie de mon objectif se réalise, à savoir la disparition des données de la ligne de l'Index modifié
mais l'apparition des ces données sur la ligne du nouveau Nom ne se réalise pas


pour plus d'éclaircissement

Sub cmdModifier_Click ()



if NOrdre = TNOrdre then

Goto Ne_Fais_Rien :

end if


SQLs="Select * TablePrincipale where NOrdre = " & TNOrdre &""

if Rss.State=adStateOpen Then Rss.Close
Rss.Open SQLs, DB, adOpenKeySet, adLockPessimistic



if Rss.EOF then

Goto Oks:

else

msgbox" Ce Numero Existe "


exit sub
end if


Oks:
'-------
Ne_Fais_Rien:


ActuMsg=msgbox("Voulez vous modofier ?",VBquestion+vbYesNo,)


if AcuMsg=vbYes then

'-----l'Actualisation de la TablePrincipale

RS![Nom]=TNom
RS![Matiere]=TMatiere
RS![Note]=TNote

RS.Update


'--------------------------------------------


Dim N

N=CStr(TNom)


SQLs="Select * from TableNom where Nom = '" & CStr(TNom) &"'"


if Rss.State=adStateOpen Then Rss.Close
Rss.Open SQLs, DB, adOpenKeySet, adLockPessimistic

'-----l'Actualisation de la TableNom

Selct Case TNom

Case is <> RS![Nom]

RS![NOrdre]=0
RS![Matiere]=""
RS![Note]=0

Case Else

RS![NOrdre]=TNOrdre
RS![Matiere]=TMatiere
RS![Note]=TNote


end Select

RS.Update

'-------------------------------------------------

'-----l'Actualisation de la TableMatiere

Dim M

M=CStr(TMatiere)


SQLs="Select * from TableMatiere where Matiere = '" & CStr(TMatiere) &"'"


if Rss.State=adStateOpen Then Rss.Close
Rss.Open SQLs, DB, adOpenKeySet, adLockPessimistic



Selct Case TMatiere

Case is <> RS![Matiere]

RS![NOrdre]
RS![Nom]=""
RS![Note]=0

Case Else

rs![NOrdre]
RS![Nom]=TNom
RS![Note]=TNote


end Select

RS.Update

end if


FRecherche.Show

Load me


end sub




l'instruction équivalente à case is <> se réalise
par contre celle concernant Case = ne se réalise pas




Merci d'avance pour votre aide
A voir également:

28 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
21 mai 2014 à 10:17
Bonjour,

contre celle concernant Case = Cette instruction n'existe pas dans votre code, vous avez ecrit Case Else qui devrait faire ce que vous attendez.
Un simple
If TMatiere <> RS![Matiere] Then ....... Else ....... End if 
aurait suffi.
Il manque Rs.Edit pour chaque Rs.Udate. Si vous avez plusieurs fois le meme nom, comment vous faiies ????
0
mohalesage Messages postés 147 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 31 décembre 2015 1
21 mai 2014 à 13:11
Bonjour l'Ami,

Merci pour votre attention.
Même avec la condition If .... then ..... Else ..... end if, le resultat était toujours le même. Car c'est cette condition que j'ai essayé en premier lieu.

Concernant la RS.EditMode ( Je crois ) je ne sais pas comment l'utiliser. Si vous m'éclairiez sur ce point je vous en serai reconnaissant.

Concernant le même nom, je crois ce n'est pas un problème. Car Sur la TableNom c'est le cumul des note qui gère

Merci encore pour votre aide
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
21 mai 2014 à 15:14
Re,

Concernant la RS.EditMode ( Je crois ) ----> Autant pour moi, si requete sql, pas de passage en mode edition pour modifier les champs d'un enregistrement

un exemple qui marche chez moi avec une base simple

Private Sub CommandButton1_Click()
Texte = Me.Controls("Textbox" & 4)

Sql = "select * from BdD_Bon where [Group]='" & Texte & "'"
rs.Open Sql, conn, 3, 3

If rs.EOF And rs.BOF Then
MsgBox "Existe pas!!!"
Else
If Texte <> rs![Group] Then
rs![numero] = 0
rs![Group] = ""
rs![Matricule] = 0
Else
rs![numero] = Texte
rs![Group] = "AZER"
rs![Matricule] = 99999
End If
rs.Update
End If
End Sub
0
mohalesage Messages postés 147 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 31 décembre 2015 1
22 mai 2014 à 02:02
Bonjour l'Ami,

Je vous donnerai plus d'explications pour vous permettre de bien cerner mon problème


Voilà :

il y'a tout d'abord une Table où sont enregistrées les données ( TablePrincipale )
elle contient 4 colonnes

0 = Nordre

1=Nom

2=Matiere

3=Note

avec comme clé primaire le NOrdre

ensuite

il y'a la table secondaire 1 ( TableNom) .Elle contient aussi 4 Colonnes



0=Nom

1=NOrdre

2=Matiere

3=Note


Déjà dans cette table la colonne 1 [Nom] est remplie par plusieurs noms différents à partir d'une fenêtre de paramétrage ( Nom est considéré comme Index ), avec comme clé primaire le Nom



ensuite

il y'a la Table secondaire 2 ( TableMatière ). Elle contient elle aussi 4 Colonnes

0=Matiere

1=NOrdre

2=Nom

3=Note

Aussi la colonne 1 [Matiere] est déjà remplie par les différentes matières à partir de la fenêtre du parametrage ( Matiere est considérée ici comme Index), avec comme clé primaire la Matiere


au moment de la saisie générale, les codes saisis sont comme suit


la Feuille de saisie


SQLs="Select * from TablePrincipale where NOrdre=" & TNOrdre &""


if RS.State=adStateOpen Then RS.Close
RS.Open SQLs, DB, adOpenKeySet, adLockPessimistic



if RS.EOF then

Goto Oks:

else

Msgbox"Désolé, ce Numéro existe déjà"

exit sub
end if

Oks:

RS.addNew

RS![NOrdre]=TNOrdre
RS![Nom]=TNom
RS![Matiere]=TMatiere
RS![Note]=TNote

RS.Update

'-------------------------------
Dim N

N=CStr(TNom)


SQLs="Select * from TableNom where Nom=' " & TNom &" ' "


if RS.State=adStateOpen Then RS.Close
RS.Open SQLs, DB, adOpenKeySet, adLockPessimistic


if TNom = RS![Nom] Then

RS![NOrdre]=TNOrdre
RS![Matiere]=TMatiere
RS![Note]=TNote

RS.Update

End if


'---------------------------------

Dim M

M=CStr(TMatiere)


SQLs="Select * from TableMatiere where Matiere=' " & TMatiere &" ' "


if RS.State=adStateOpen Then RS.Close
RS.Open SQLs, DB, adOpenKeySet, adLockPessimistic


if TMatiere = RS![Matiere] Then

RS![NOrdre]=TNOrdre
RS![Matiere]=TMatiere
RS![Note]=TNote

RS.Update

End if


Ces codes sont ici pour la saisie générale


seulement en cas d'erreur de saisie, détectée après, il y' a une fenêtre de recherche qui renvoie à la fenêtre de mise à jour.

Supposons que la saisie générale a donné ce qui suit


sur la TablePrincipale

NOrdre Nom Matiere Note

1 XXXX Math 14,45


Sur la TableNom ( Déjà la colonne 0 est pleine par les Noms )

Nom NOrdre Matiere Note

XXXX 1 Math 14,45

YYYY

ZZZZ

WWW




Sur la TableMatiere ( Déjà la Colonne 0 est pleine par les matières )

Matiere NOrdre Nom Note

Math 1 XXX 14,45

Phisique

Chimie

Science



Ceci étant exposé

Supposons que l'erreur détectée est comme suite

au lieu de saisir YYYY on a saisi par erreur XXX ,
et
au lieu de saisir Chimie on a saisi Math

on veut corriger ces deux erreurs



les codes écris sur la feuille de modification est comme suit




Sub CmdModifier_Click ()


If NOrdre = TNOrdre then



Goto Ne_Fais_Rien :

end if


SQLs="Select * TablePrincipale where NOrdre = " & TNOrdre &""

if Rss.State=adStateOpen Then Rss.Close
Rss.Open SQLs, DB, adOpenKeySet, adLockPessimistic



if Rss.EOF then

Goto Oks:

else

msgbox" Ce Numero Existe "


exit sub
end if


Oks:
'-------
Ne_Fais_Rien:


ActuMsg=msgbox("Voulez vous modofier ?",VBquestion+vbYesNo,)


if AcuMsg=vbYes then

'-----l'Actualisation de la TablePrincipale

RS![Nom]=TNom
RS![Matiere]=TMatiere
RS![Note]=TNote

RS.Update


'--------------------------------------------


Dim N

N=CStr(TNom)


SQLs="Select * from TableNom where Nom = '" & CStr(TNom) &"'"


if Rss.State=adStateOpen Then Rss.Close
Rss.Open SQLs, DB, adOpenKeySet, adLockPessimistic

'-----l'Actualisation de la TableNom


if TNom <> RS![Nom] then

RS![NOrdre]=0
RS![Matiere]=""
RS![Note]=0

Else

RS![NOrdre]=TNOrdre
RS![Matiere]=TMatiere
RS![Note]=TNote

RS.Update

end If


'-------------------------------------------------

'-----l'Actualisation de la TableMatiere

Dim M

M=CStr(TMatiere)


SQLs="Select * from TableMatiere where Matiere = '" & CStr(TMatiere) &"'"


if Rss.State=adStateOpen Then Rss.Close
Rss.Open SQLs, DB, adOpenKeySet, adLockPessimistic



if TMatiere <> RS![Matiere] Then

RS![NOrdre]
RS![Nom]=""
RS![Note]=0

Else

Rs![NOrdre]
RS![Nom]=TNom
RS![Note]=TNote

RS.Update

end if






FRecherche.Show

Load me

end if

end sub




sur la TablePrincipale avec les codes dessus la correction est réussie

mais sur la TableNom et la TableMatiere , la suppression des données saisies qui sont supprimées mais la correction est ignorée


c'est à dire

sur la TableNom NOrdre Math 14,45 ( Saisis sur la ligne de XXX ) sont supprimé, mais sur la ligne de YYY rien n'est enregistrés

la même chose se passe sur la ligne matire dans la ( TableMatiere )

les données saisie par erreur sur la ligne de Math sont supprimées, mais rien n'est enregistré sur la ligne de Chimie


Voilà mon problème

J'espère être clair pour vous permettre de bien situer le problème et me donner une solution viable.

Merci pour votre patience

A plus l'Ami
0

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

Posez votre question
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
22 mai 2014 à 11:17
Bonjour,

J'ai compris votre probleme, table Matiere et Nom il n'y a pas de mise a jour sur correction(s).

Parcontre, choses qui me chagrinent un peu:
vous faites des requetes en partant de variables et vous testez si dans le recordset c'est different de la variable que vous avez utilisee pour creer ce recordset

SQLs="Select * from TableNom where Nom = '" & CStr(TNom) &"'"
et
if TNom <> RS![Nom] then

SQLs="Select * from TableMatiere where Matiere = '" & CStr(TMatiere) &"'"
et
if TMatiere <> RS![Matiere] Then

Pouvez-vous mettre a dispo votre projet complet en changent le noms s'il y en a
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
23 mai 2014 à 06:47
Bonjour,

le .vbw ne me sert a rien.
0
mohalesage Messages postés 147 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 31 décembre 2015 1
23 mai 2014 à 14:40
Bonjour l'Ami,

Je n'est pas compris votre phrase le .vbw ne me sert a rien.

Si je vous n'aviez pas reçu mon dossier de le renvoie une autre fois

A plus
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
23 mai 2014 à 14:47
Re,

Pas de dossier dans ce que vous avez mis a dispo, seulement un .vbw
0
mohalesage Messages postés 147 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 31 décembre 2015 1
23 mai 2014 à 15:02
Re Bonjour l'Ami

Veuilez trouver mon dossier sur ce lien

https://www.cjoint.com/?0ExpaG8k7cW

A binetôt.

Avisez moi si jamais le même problème persistait
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
23 mai 2014 à 15:11
Re,

meme chose !!!!!!!!

Votre projet est dans un repertoire, compressez le repertoire
0
mohalesage Messages postés 147 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 31 décembre 2015 1
23 mai 2014 à 16:03
Re

Veuillez m'excuser . je vous l'ai dis, nul en informatique

https://www.cjoint.com/?0ExqcvWQ3zF

je l'ai compressé. J'espère que cette fois est la bonne

a plus
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
23 mai 2014 à 16:21
Re,

C'est bon. Je vous tiens au courant.

A+
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
23 mai 2014 à 17:03
Re,

Structure de base de donnees un peu curieuse:

Table TableNoms: que viennent faire la Matiere et la note dans cette table ??????
Table TableMatieres: que viennent faire le Nom et la note dans cette table ??????

et comme je l'ai deja ecrit, comment faites vous pour les personnes de meme nom

Il faudrait commencer par terminer la saisie des noms avant de penser a voir comment rectifier les erreurs de saisie des notes et matieres

De plus, la saisie des notes par matieres est un peu confuse. Y a plus simple.

A+
0
mohalesage Messages postés 147 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 31 décembre 2015 1
23 mai 2014 à 23:14
Re,

Concernant la saisie des noms. J'ai prévu d'attribuer un code pour chaque
nom.

concernant la TableNoms , la Matiere et la Note y sont pour me permettre
d'appeler la note pour chaque nom ou la matière pour chauqe nom( si je ne me trompe pas )

ainsi pour la TableMatieres.

Que pensez vous ?

A plus l'Ami
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
Modifié par f894009 le 24/05/2014 à 07:54
Bonjour,

J'ai prévu d'attribuer un code pour chaque
nom.
Non, vous faites un test si meme nom
MsgBox "Ce Nom est déjà saisi"
et pas d'enregistrement

Les tables Nom et Matieres ne doivent pas contenir d'autres informations que celles qui les concernent.

Il n'y a qu'une seule a mettre a jour pour la saisie ou rectification de notes: TableNotes
0
mohalesage Messages postés 147 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 31 décembre 2015 1
24 mai 2014 à 13:58
Bonjour,

Après votre remarque ("Structure de base de donnees un peu curieuse: ")
J'ai revu la structure de ma BD . Je n'ai pas encore terminé, une faite, je mettrai
à votre disposition mon petit projet

Merci pour votre attention
0
mohalesage Messages postés 147 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 31 décembre 2015 1
24 mai 2014 à 16:34
Re,

Je mets à votre disposition mon petit projet, revu suite à vos conseils.

j'aimerai bien que vous y jetiez un coup d'oeil et me dire votre avis.

l'Etape prochaine, je tenterai de calculer les cumuls

1 : des notes par Etudiant

2 : des notes par Etudiant et par matières

A plus et Merci pour tout



https://www.cjoint.com/?0EyqDrAUsic
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
24 mai 2014 à 16:36
Re,

projet et base modifies pour noms identiques et pas meme prenom, ai simplifie correction saisie, ai ajoute des tests sur mise a jours Eleves, Matiere, Saisie Notes et correction Saisie Note

https://www.cjoint.com/?DEyqHOzppqE

A+
0
mohalesage Messages postés 147 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 31 décembre 2015 1
25 mai 2014 à 01:41
Bonjour l'Ami

merci pour votre attention
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
25 mai 2014 à 10:30
Bonjour,

Dans ce que je vous ai mis a dispo, il y a un petit probleme, en faisant le menage du repertoire j'ai supprime la form EditionSaisie que j'ai modifiee avec Nom_Prenom.

Dans votre nouveau projet, si le CNE est unique, il doit etre la cle primaire de la table et vous n'avez pas besoin du NOrdre. Par contre il faut qu'a chaque fois vous ayez ce numero avec le nom sinon comment reconnaitre les personnes de meme nom
0