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

mohalesage Messages postés 162 Statut Membre -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
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

28 réponses

  • 1
  • 2
  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  2. mohalesage Messages postés 162 Statut Membre 1
     
    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
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  4. mohalesage Messages postés 162 Statut Membre 1
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  7. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    le .vbw ne me sert a rien.
    0
  8. mohalesage Messages postés 162 Statut Membre 1
     
    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
  9. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    Pas de dossier dans ce que vous avez mis a dispo, seulement un .vbw
    0
  10. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    meme chose !!!!!!!!

    Votre projet est dans un repertoire, compressez le repertoire
    0
  11. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    C'est bon. Je vous tiens au courant.

    A+
    0
  12. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  13. mohalesage Messages postés 162 Statut Membre 1
     
    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
  14. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  15. mohalesage Messages postés 162 Statut Membre 1
     
    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
  16. mohalesage Messages postés 162 Statut Membre 1
     
    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
  17. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  18. mohalesage Messages postés 162 Statut Membre 1
     
    Bonjour l'Ami

    merci pour votre attention
    0
  19. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  • 1
  • 2