[ACCESS][VB] Envoyer variable dans champ

Fermé
SubNoX - 20 juil. 2007 à 16:08
 SubNoX - 26 juil. 2007 à 16:47
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!
A voir également:

9 réponses

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
blux Messages postés 26020 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 3 mai 2024 3 289
23 juil. 2007 à 10:14
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
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
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
blux Messages postés 26020 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 3 mai 2024 3 289
23 juil. 2007 à 11:05
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
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
Non rien d'autre...

Non ma table n'a pas de liaison...
0

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

Posez votre question
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
blux Messages postés 26020 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 3 mai 2024 3 289
23 juil. 2007 à 15:50
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
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
blux Messages postés 26020 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 3 mai 2024 3 289 > SubNoX
24 juil. 2007 à 14:38
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
SubNoX > SubNoX
24 juil. 2007 à 14:52
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
SubNoX > SubNoX
26 juil. 2007 à 16:47
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
blux Messages postés 26020 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 3 mai 2024 3 289
20 juil. 2007 à 16:17
Salut,

tu peux passer par une requête UPDATE à lancer via DoCmd.RunSQL...
-1
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
blux Messages postés 26020 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 3 mai 2024 3 289
20 juil. 2007 à 16:48
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
SubNoX > blux Messages postés 26020 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 3 mai 2024
20 juil. 2007 à 16:59
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
blux Messages postés 26020 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 3 mai 2024 3 289 > blux Messages postés 26020 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 3 mai 2024
20 juil. 2007 à 17:06
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
blux Messages postés 26020 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 3 mai 2024 3 289
23 juil. 2007 à 10:46
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
blux Messages postés 26020 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 3 mai 2024 3 289
23 juil. 2007 à 11:55
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
blux Messages postés 26020 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 3 mai 2024 3 289
23 juil. 2007 à 12:46
Si tu crées une requête dans ACCESS avec le contenu de ta msgbox et que tu la lances, il dit quoi ?
-1