[ACCESS][VB] Envoyer variable dans champ

SubNoX -  
 SubNoX -
Bonjour,

J'ai un petit problème dans access, j'aimerais pouvoir envoyer la valeur d'une variable dans le champ d'une table qui n'est pas liée avec le formulaire!

Je travaille avec VB et je n'ai pas trouvé le moyen de le faire...

Pouvez-vous m'aider!? merci d'avance!

9 réponses

  1. SubNoX
     
    Hello,

    Alors merci beaucoup! c'est super il comprend les variables! mais j'ai encore un petit problème, les champ reste vide...

    alors voilà mon code:

      SQL = "UPDATE Daten " & _
                                 "SET Daten." & strFeld & " = " & Modultest.sngErgebnis & " " & _
                                 "WHERE Daten." & strFeld & " = 0;"
    
                DoCmd.RunSQL SQL


    Daten est ma table, strFeld est le nom du champ généré, Modultest... et une var numérique
    et j'aimerais en fait que le champ strFeld de ma table Daten soit rempli avec Modultest.sngergebnis...

    Voilà encore merci beaucoup!!

    SubNoX
    0
    1. blux Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      strFeld est un nom ou une variable ? si c'est un nom, pas la peine de le mettre en & "...
      Modultest.sngErgebnis est une variable ou un champ dans le formulaire ? si c'est un champ dans le formulaire, il faut en récupérer la valeur : Modultest.sngErgebnis.value
      -1
  2. SubNoX
     
    Alors strFeld est bien une variable, qui contient le nom du champ

    pour modultest.sngErgebnis, c'est une variable aussi qui contient un chiffre

    mais seulement à l'exécution tout se passe bien, en revanche après quand j'ouvre la table pour contrôler les valeur des champs créer sont vide...

                SQL = "UPDATE Daten " & _
                      "SET Daten." & strFeld & " = " & Modultest.sngErgebnis & " " & _
                      "WHERE Daten." & strFeld & " =0"


    Peut-être une question pour être sur d'avoir bien compris:
    set Daten. strFeld = c'est bien pour dire de mettre la valeur de Modultest.sngErgebnis dans le champ strFeld de la table Daten!?
    avec la condition que le champ strFeld = 0

    c'est bien juste!?

    Merci pour tout
    0
  3. SubNoX
     
    Alors tout à l'air nickel!

    sauf que juste avant la msgBox il m'avertit que j'envisage de mettre à jour 0 champ...

    je comprend pas trop parce qu'en fait le champ que je vais mettre à jour à bien la valeur 0 à la base...

    et la msgBox affiche ca: UPDATE Daten SET Daten.AM_0107 = 12 WHERE Daten.AM_0107 = 0

    et au fait quand je supprime la condition WHERE il me met une erreur...

    Merci en tout cas!!
    0
    1. blux Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      Ton champ 0107, il est décrit comment dans la table : num, chaine ?

      et au fait quand je supprime la condition WHERE il me met une erreur...

      laquelle ?
      -1
    2. SubNoX
       
      Il est en Num mais je l'ai aussi testé en text...

      Non la c'est bon pas prob pour le WHERE, j'avais oublié sur la ligne d'au dessus d'enlever le &_ à la fin...

      Mais j'ai vraiment du mal à comprendre pourquoi il ne veut pas me mettre à jour mes champs...
      0
  4. SubNoX
     
    Non rien d'autre...

    Non ma table n'a pas de liaison...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. SubNoX
     
    Alors après tout ce temps je suis quand même arriver à qqch...

    J'ai étudié le code DAO et j'ai opté pour ca plutôt que le SQL du fait que j'ai toute une table à mettre à jour et pas seulement un champ...

    En revanche j'ai aussi eu quelques souci car j'ai fait une fonction publique dans mon code:

    Public Function RenommeChamp(oBaseDeDonnees As DAO.Database, strNomTable As String, strAncienNom As String, strNouveauNom As String) As Boolean
    
    
    Dim Tbl As DAO.TableDef
    'Mettre la table dans Tbl
    Set Tbl = oBaseDeDonnees.TableDefs(strNomTable)
    'Modifier l'ancienne valeur du champ avec la nouvelle
    Tbl.Fields(strAncienNom).DefaultValue = strNouveauNom
    'Mettre RenommeChamp à True
    RenommeChamp = True
    
    Exit Function
    
    End Function
    


    et il se trouve que j'ai du utiliser "DefaultValue" pour modifier la valeur car quand je mettais Value j'obtenais une erreur... je suppose que le tout est lié

    Mais en tout cas je te remercie beaucoup pour ton aide!

    Si ca ne t'ennui pas trop, j'aurais en revanche encore besoin de ton aide! :-)

    Je crée ici un champ dans ma Table "Daten"

    Set oDb = CurrentDb
                    Set oTbl = oDb.TableDefs("Daten")
                    Set fldNeu = oTbl.CreateField(strFeld, dbDouble)
                    
                    oTbl.Fields.Append fldNeu
                    
                    oTbl.Fields.Refresh


    Et en fait mon petit problème est le suivant: j'aimerais faire un test au début de la déclaration pour voir si le champ que je vais créer (ici strFeld(variable text)) existe déjà ou pas
    Peut-être avec Dlookup!?

    Merci d'avance
    0
    1. blux Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      Avec ce code-là, tu pourras énumérer les champs de la table daten :
      Dim Tb As TableDef
      Dim Fld
      For Each Tb In CurrentDb.TableDefs
          'MsgBox Tb.Name
          If Tb.Name = "Daten" Then
              For Each Fld In Tb.Fields
                  MsgBox Fld.Name
              Next
          End If
      Next
      Cependant, je voudrais te mettre en garde contre une difficulté qui pourrait t'apparaître plus tard, lors de la gestion de ta base.
      Il me semble que tu veuilles créer des champs nommés par le couple mois/année. Ce n'est pas une très bonne solution, car si tu envisages d'en créer beaucoup, ACCESS ne suivra pas toujours (255 champs maxi pour une table), sans compter la difficulté à créer des formulaires basés sur cette table dont la définition changera souvent...
      Il serait plus judicieux de créer une autre table qui contiendrait les données mois/jour avec une clé primaire qui serait justement ces mois/jour et une relation avec la table principale.
      -1
    2. SubNoX
       
      Voilà j'y suis enfin arriver!!!

      C'est vrai que si une table ne peut en contenir que 255 c'est limite, mais j'ai calculé ca devrait allé! ;-)

      Cependant j'ai pas bien compris l'idée de mois/jour!? parce qu'en fait le AM_0107 : AM = nom d'un secteur et 0107 = janvier 2007

      Et sinon puis-je encore te poser une question!?

      J'aurais besoin de parcourir une liste champ et faire passer à chaque enregistrement un test (if ...)
      comment puis-je faire!?

      Merci pour toute ton aide précieuse!
      0
    3. blux Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 455 > SubNoX
       
      Cependant j'ai pas bien compris l'idée de mois/jour!? parce qu'en fait le AM_0107 : AM = nom d'un secteur et 0107 = janvier 2007
      C'est tellement plus simple de créer une autre table qui va contenir ces données plutôt que de les mettre dans une table dont on va modifier la structure tous les mois... En plus, c'est contraire aux bonnes pratiques des bases de données relationnelles.

      J'aurais besoin de parcourir une liste champ et faire passer à chaque enregistrement un test (if ...)
      comment puis-je faire!?

      Tu veux parcourir des enregistrements et faire des tests sur des champs ?
      Il faut utiliser un recordset.
      -1
    4. SubNoX > SubNoX
       
      Oui c'est vrai que ca sera certainement plus simple... mais le truc c'est que je crée ces champs et ces tables automatiquement en fontion de 2 dates (date début / date fin) et je ne les connais pas à l'avance, de plus je cherche à faire que les tables et les champs se créent eux-mêmes par le formulaire car le programme ne doit plus être touché ou modifier une fois utiliser et les dates (enfin date de fin peut aller jusqu'à 2020, voir plus...) donc je voulais pas m'amuser à créer toutes les tables en fonction des années
      Voilà pourquoi je les crée automatiquement!

      Alors le truc c'est que j'ai un formulaire dans lequel il y a une liste champ qui contient les données d'une table, j'aimerais pouvoir parcourir cette liste champ depuis un autre formulaire pour pouvoir effectuer un test sur chaque enregistement "ligne" de la liste.

      Voilà, mais le truc c'est que j'ai aucune idée comment m'y prendre...

      avec un recordset!? je vois pas bien comment!?

      Merci
      0
    5. SubNoX > SubNoX
       
      Je tiens à te remercier sincèrement pour toute ton aide, je pense bien que je vais encore en avoir besoin mais je dois dire que ca m'a permis de comprendre pas mal de chose et de découvrir aussi de nouvelle chose dans access!

      Alors merci beaucoup pour tout!!!
      0
  7. blux Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Salut,

    tu peux passer par une requête UPDATE à lancer via DoCmd.RunSQL...
    -1
    1. SubNoX
       
      Ok j'ai essayé de voir ce que je pouvais faire avec cette fonction, mais je débute un access et j'aurais une autre question...

      Alors avant cette commande, il faut que j'implante dans une variable un code en SQL à passé!? c'est bien ca?

      Du style:


      Dim SQL As String

      SQL = "UPDATE Employees " & _
      "SET Employees.Title = 'Regional Sales Manager' " & _
      "WHERE Employees.Title = 'Sales Manager'"

      DoCmd.RunSQL SQL

      Mais ca c'est l'exemple de l'aide et ca m'aide pas beaucoup je dois dire...

      J'espère que tu pourras m'aider merci et désolé pour mon niveau...
      0
    2. blux Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      Un truc comme ça devrait aller :
      Dim SQL As String
      SQL = "UPDATE Employees " & _
      "SET Employees.Title = '" & zone_du_formulaire.value & "' " & _
      "WHERE Employees.Title = 'Sales Manager'"
      DoCmd.RunSQL SQL 
      --
      A+ Blux
       "Les cons, ça ose tout.
      C'est même à ça qu'on les reconnait"
      -1
      1. SubNoX > blux Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Ok je te remercie, je m'en suis sorti, mais maintenant j'ai un autre problème...

        C'est que en fait ici j'ai des variables...

        Dim SQL As String
        SQL = "UPDATE Employees " & _
        "SET Employees.Title = Variable' " & _
        "WHERE Employees.Title = Variable"
        DoCmd.RunSQL SQL


        Je ne sais pas si c'est quand même possible de le faire, mais je l'espère car je suis obligé de travailler avec des variables...

        Merci beaucoup en tout cas!
        0
      2. blux Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 455 > blux Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Si mais il faut sortir les variables de la chaine pour indiquer à ACCESS de les interpréter avant d'envoyer la chaine à l'exécution :
        Dim SQL As String
        SQL = "UPDATE Employees " & _
        "SET Employees.Title = '" &Variable & "'" & _
        "WHERE Employees.Title = '" & Variable & "';"
        DoCmd.RunSQL SQL
        Quand on teste une valeur chaine, il faut mettre des quotes ('), par contre, il n'en faut pas pour du numérique :
        "SET Employees.Title = " & Variable & _
        --
        A+ Blux
         "Les cons, ça ose tout.
        C'est même à ça qu'on les reconnait"
        -1
  8. blux Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    mais seulement à l'exécution tout se passe bien
    S'il y a une erreur de SQL, ACCESS ne dit rien !

    C'est seulement, s'il y a une erreur à l'exécution qu'il plante (ligne en double, clé non renseignée...)

    Fais un affichage de SQL, pour voir... (msgbox SQL)
    -1
  9. blux Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    sauf que juste avant la msgBox il m'avertit que j'envisage de mettre à jour 0 champ...
    Il ne dit rien d'autre : violation de clé, de contraintes... ?

    Ton champ est lié à un autre par une relation ?
    -1
  10. blux Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Si tu crées une requête dans ACCESS avec le contenu de ta msgbox et que tu la lances, il dit quoi ?
    -1