Access et requete de mise a jour
Fermé
ppqx
Messages postés
6
Date d'inscription
dimanche 11 novembre 2007
Statut
Membre
Dernière intervention
4 décembre 2007
-
11 nov. 2007 à 15:47
brunotours Messages postés 4 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 6 décembre 2018 - 16 mars 2011 à 12:26
brunotours Messages postés 4 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 6 décembre 2018 - 16 mars 2011 à 12:26
A voir également:
- Access et requete de mise a jour
- Mise a jour chrome - Accueil - Applications & Logiciels
- Mise a jour windows 10 - Accueil - Mise à jour
- Mise a jour chromecast - Accueil - Guide TV et vidéo
- Mise a jour kindle - Guide
- Mise a jour windows 7 - Accueil - Mise à jour
6 réponses
PBGunner
Messages postés
64
Date d'inscription
mercredi 17 octobre 2007
Statut
Membre
Dernière intervention
29 juillet 2008
64
12 nov. 2007 à 13:13
12 nov. 2007 à 13:13
Salut!
Ta requete finale est-elle déja créer, ou la crées tu lors du clic sur le bouton VALIDER?
Pour moi, il n 'y a pas de problème majeur a réimporter ce type de donnée... Par contre, il y au moins 2 possibilitées:
1)Soit tu crées une requête mise a jour 'en dur' (j'entend par là qu'elle existe comme un objet de la base de données et qu'elle est accessible depuis la rubrique 'Requetes'. Dans cette requêtes tu ne mets que les champs de type 'texte' et tu les importes tous lorsque tu clic ton bouton VALIDER. A mon avis c'est la solution la plus simple et la plus rapide a mettre en place, mais elle offre peu de souplesse car elle importera systématiquement toutes les données qu'elle contient
2) soit tu crées une requete au moment du clic sur VALIDER sous VBA au format SQL. C'est plus complexe mais ca te donne plus de souplesse car tu peux améliorer ton script pour ne prendre par exemple que les enregistrements (ou les champs d'enregistrement) qui ont réellement été modifiés...
Pour cela, il te faudra utiliser les commandes:
Les différents champs de ta requetes seront accessibles par la fonction
Si mes souvenirs sont justes, par exemple, pour obtenir le type de données dans le champs 1 utilise le code suivant
Si tu ne maitrise pas le SQL, je te conseille vivement de créer ta requête via l'interface 'Nouvelle requetes' d'Access, puis de passer l'affichage en mode SQL. Il ne te reste plus qu'a mettre des variables où tu veux dans ton code VB...
a+
Ta requete finale est-elle déja créer, ou la crées tu lors du clic sur le bouton VALIDER?
Pour moi, il n 'y a pas de problème majeur a réimporter ce type de donnée... Par contre, il y au moins 2 possibilitées:
1)Soit tu crées une requête mise a jour 'en dur' (j'entend par là qu'elle existe comme un objet de la base de données et qu'elle est accessible depuis la rubrique 'Requetes'. Dans cette requêtes tu ne mets que les champs de type 'texte' et tu les importes tous lorsque tu clic ton bouton VALIDER. A mon avis c'est la solution la plus simple et la plus rapide a mettre en place, mais elle offre peu de souplesse car elle importera systématiquement toutes les données qu'elle contient
2) soit tu crées une requete au moment du clic sur VALIDER sous VBA au format SQL. C'est plus complexe mais ca te donne plus de souplesse car tu peux améliorer ton script pour ne prendre par exemple que les enregistrements (ou les champs d'enregistrement) qui ont réellement été modifiés...
Pour cela, il te faudra utiliser les commandes:
Dim chSQL as String 'variable qui va te permettre de stocker ta ligne SQL Set db = CurrentDb() chSQL = "UPDATE [ici tu mets ta requete SQL avec les champs qui t'interesse]..." Set MyQuery= db.OpenRecordset(chSQL, dbOpenSnapshot) 'Creation de la requete
Les différents champs de ta requetes seront accessibles par la fonction
MyQuery(i)de type Field, i étant le numéro du champs.
Si mes souvenirs sont justes, par exemple, pour obtenir le type de données dans le champs 1 utilise le code suivant
MsgBox MyQuery(1).Type
Si tu ne maitrise pas le SQL, je te conseille vivement de créer ta requête via l'interface 'Nouvelle requetes' d'Access, puis de passer l'affichage en mode SQL. Il ne te reste plus qu'a mettre des variables où tu veux dans ton code VB...
a+
ppqx
Messages postés
6
Date d'inscription
dimanche 11 novembre 2007
Statut
Membre
Dernière intervention
4 décembre 2007
12 nov. 2007 à 15:09
12 nov. 2007 à 15:09
Salut PBGunner,
Merci beaucoup pour ta réponse. CEPENDANT, je ne maîtrise absolument pas le SQL ni le code VBA. Donc, là, je m'engage dans du flou total.
Si j'utilise ta première solution "en dur", cela veut donc dire que je dois saisir à chaque fois tous les champs. Et ceci afin d'éviter que ma mise à jour prenne en compte en compte les champs vide de mon formulaire (pour lesquels je n'ai pas apporté de modification). Hors, je souhaiterais que le bouton VALIDER, sur clic, ne mette à jour que les champs qui sont subi une modification sur mon formulaire.
Pour la deuxième solution, flou total, je ne connais rien au langage VBA et SQL. Je ne sais même pas où écrire le code ou le coller. Je ne sais même pas comment procéder.
Où puis-je trouver d'ailleurs des infos sur le langage VBA et les rquêtes SQL ?
Merci de ta réponse,
Bien cordialement,
Patrice
Merci beaucoup pour ta réponse. CEPENDANT, je ne maîtrise absolument pas le SQL ni le code VBA. Donc, là, je m'engage dans du flou total.
Si j'utilise ta première solution "en dur", cela veut donc dire que je dois saisir à chaque fois tous les champs. Et ceci afin d'éviter que ma mise à jour prenne en compte en compte les champs vide de mon formulaire (pour lesquels je n'ai pas apporté de modification). Hors, je souhaiterais que le bouton VALIDER, sur clic, ne mette à jour que les champs qui sont subi une modification sur mon formulaire.
Pour la deuxième solution, flou total, je ne connais rien au langage VBA et SQL. Je ne sais même pas où écrire le code ou le coller. Je ne sais même pas comment procéder.
Où puis-je trouver d'ailleurs des infos sur le langage VBA et les rquêtes SQL ?
Merci de ta réponse,
Bien cordialement,
Patrice
PBGunner
Messages postés
64
Date d'inscription
mercredi 17 octobre 2007
Statut
Membre
Dernière intervention
29 juillet 2008
64
12 nov. 2007 à 22:41
12 nov. 2007 à 22:41
salut,
Donc ca n'est pas simple. Comment lance tu la mise a jour depuis le bouton VALIDER? C'est l'assitant formulaire qui t'a créé la macro correspondante? Je n'avais pas tout a fait saisi ce que tu entendais par 'chaine de texte'. En fait tu voulais dire un champs pour lequel tu as rempli une information.
Abandonnons pour le moment la seconde solution.
Puis-je savoir quels sont les champs de ta table temporaire? L'exemple sera plus compréhensible avec le nom de tes champs...
Donc ca n'est pas simple. Comment lance tu la mise a jour depuis le bouton VALIDER? C'est l'assitant formulaire qui t'a créé la macro correspondante? Je n'avais pas tout a fait saisi ce que tu entendais par 'chaine de texte'. En fait tu voulais dire un champs pour lequel tu as rempli une information.
Abandonnons pour le moment la seconde solution.
Puis-je savoir quels sont les champs de ta table temporaire? L'exemple sera plus compréhensible avec le nom de tes champs...
Salut,
Merci de l'intérêt que tu portes à ma demande.
Réponse à ta première question : c'est moi qui est créé la macro pour le bouton VALIDER. En fait, j'avais une requête de mise à jour pour chaque champs. La macro "VALIDER MODIFICATION CLIENT" comprenait une action "ouvrir requête" pour chacune de celles-ci. L'exécution de la requête devait théoriquement se faire selon la condition [Est pas Null] ou encore [Est pas ""] (si chaine pas vide ?). Mais ça ne fonctionne pas. Si une modification est effectuée à partir d'une requête, et qu'une deuxième doit être effectuée, ACCESS bloque l'action en indiquant que "La BASE CLIENT est déjà utilisée par un autre utilisateur ou ...". Pourtant, je suis en mode partagé.
Donc j'ai ensuite essayé, au niveau de la macro, les opérations suivantes pour l'exécution de chaque requête : 1 - Ouvrir requête sous condition / 2 - Fermer Requête après exécution (dans l'objectif de libérer la table BASE CLIENT pour permettre l'exécution des autres si les conditions sont remplies). MAIS, ça ne marche toujours pas.
LE PROBLEME EST ESSENTIELLEMENT LE SUIVANT : Soit j'essaye avec une macro et au quel cas, les requêtes ne peuvent toutes s'exécuter. Soit j'essaye de faire une requête pour l'ensemble des modifications à mettre à jour dans la base CLIENT, mais avec des mises à jour sous condition (si le champ a été modifié).
J'ai rencontré également le cas de figure : ma requête met à jour même les champs auxquels je n'ai pas apporté de modifications. Et donc, elle remplace les données de la Table CLIENT par un champ vide.
Alors voici comment est organisé mon formulaire :
Une table temporaire est créée à l'ouverture du formulaire (macro du bouton OUVRIR BASE DE CONSULTATION CLIENT du formulaire d'accueil de mon application). Cette table est destinée à la consultation des informations sur le client. Une requête de sélection affiche les informations du client sélectionné dans différents petits cadre (selon leur thème).
En bas du formulaire se trouvent les champs destinés à apporter les éventuelles modifications de la fiche client. Un bouton de commande "VALIDER LES MODIFICATIONS" doit permettre de valider les modifications apportées (nouvelle adresse, etc.). DONC mettre à jour seulement les champs pour lesquels les modifications ont été apportées.
Voici les champs à mettre à jour si ils comportent des modifications :
Champs de la table CLIENT
NOM CLIENT
PRENOM CLIENT
ADRESSE CLIENT
CODE POSTAL
VILLE
Les noms des champs du formulaire dans lesquels on apporte des modifications :
NOUV NOM CLIENT
NOUV PRENOM CLIENT
NOUV ADRESSE CLIENT
NOUV CODE POSTAL CLIENT
NOUV VILLE CLIENT
Voilà,
En attendant de tes nouvelles ...
Merci à toi,
Patrice
Merci de l'intérêt que tu portes à ma demande.
Réponse à ta première question : c'est moi qui est créé la macro pour le bouton VALIDER. En fait, j'avais une requête de mise à jour pour chaque champs. La macro "VALIDER MODIFICATION CLIENT" comprenait une action "ouvrir requête" pour chacune de celles-ci. L'exécution de la requête devait théoriquement se faire selon la condition [Est pas Null] ou encore [Est pas ""] (si chaine pas vide ?). Mais ça ne fonctionne pas. Si une modification est effectuée à partir d'une requête, et qu'une deuxième doit être effectuée, ACCESS bloque l'action en indiquant que "La BASE CLIENT est déjà utilisée par un autre utilisateur ou ...". Pourtant, je suis en mode partagé.
Donc j'ai ensuite essayé, au niveau de la macro, les opérations suivantes pour l'exécution de chaque requête : 1 - Ouvrir requête sous condition / 2 - Fermer Requête après exécution (dans l'objectif de libérer la table BASE CLIENT pour permettre l'exécution des autres si les conditions sont remplies). MAIS, ça ne marche toujours pas.
LE PROBLEME EST ESSENTIELLEMENT LE SUIVANT : Soit j'essaye avec une macro et au quel cas, les requêtes ne peuvent toutes s'exécuter. Soit j'essaye de faire une requête pour l'ensemble des modifications à mettre à jour dans la base CLIENT, mais avec des mises à jour sous condition (si le champ a été modifié).
J'ai rencontré également le cas de figure : ma requête met à jour même les champs auxquels je n'ai pas apporté de modifications. Et donc, elle remplace les données de la Table CLIENT par un champ vide.
Alors voici comment est organisé mon formulaire :
Une table temporaire est créée à l'ouverture du formulaire (macro du bouton OUVRIR BASE DE CONSULTATION CLIENT du formulaire d'accueil de mon application). Cette table est destinée à la consultation des informations sur le client. Une requête de sélection affiche les informations du client sélectionné dans différents petits cadre (selon leur thème).
En bas du formulaire se trouvent les champs destinés à apporter les éventuelles modifications de la fiche client. Un bouton de commande "VALIDER LES MODIFICATIONS" doit permettre de valider les modifications apportées (nouvelle adresse, etc.). DONC mettre à jour seulement les champs pour lesquels les modifications ont été apportées.
Voici les champs à mettre à jour si ils comportent des modifications :
Champs de la table CLIENT
NOM CLIENT
PRENOM CLIENT
ADRESSE CLIENT
CODE POSTAL
VILLE
Les noms des champs du formulaire dans lesquels on apporte des modifications :
NOUV NOM CLIENT
NOUV PRENOM CLIENT
NOUV ADRESSE CLIENT
NOUV CODE POSTAL CLIENT
NOUV VILLE CLIENT
Voilà,
En attendant de tes nouvelles ...
Merci à toi,
Patrice
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
PBGunner
Messages postés
64
Date d'inscription
mercredi 17 octobre 2007
Statut
Membre
Dernière intervention
29 juillet 2008
64
13 nov. 2007 à 13:15
13 nov. 2007 à 13:15
Salut,
Peux tu m'envoyer ton adresse mail en message privé afin que je puisse te donner la mienne, pour que tu m'envois ta base...
Je ne pense pas que le problème soit compliqué a résoudre, mais j'ai besoin de regarder un peu plus dans le détail la structure de ta base.
Peux tu m'envoyer ton adresse mail en message privé afin que je puisse te donner la mienne, pour que tu m'envois ta base...
Je ne pense pas que le problème soit compliqué a résoudre, mais j'ai besoin de regarder un peu plus dans le détail la structure de ta base.
PBGunner
Messages postés
64
Date d'inscription
mercredi 17 octobre 2007
Statut
Membre
Dernière intervention
29 juillet 2008
64
22 nov. 2007 à 12:55
22 nov. 2007 à 12:55
Salut!
Désolé, je n'ai pas pu m'occuper de ta base avant aujourd'hui car j'ai du effectuer un déplacement a l'étranger...
J'ai trouvé l'erreur!
Dans ta macro "VALIDER MODIF FICHE CLIENT" la syntaxe de la condition n'est pas bonne. Remplace "=Pas Null" par "Est Pas Null" et le tour est joué!
a+
Désolé, je n'ai pas pu m'occuper de ta base avant aujourd'hui car j'ai du effectuer un déplacement a l'étranger...
J'ai trouvé l'erreur!
Dans ta macro "VALIDER MODIF FICHE CLIENT" la syntaxe de la condition n'est pas bonne. Remplace "=Pas Null" par "Est Pas Null" et le tour est joué!
a+
16 mars 2011 à 12:26
J'ai un message en anglais "Too few parameters. expended 2"
Pourriez vous m'aider?
Voici le code VBA utilisé:
Dim db
Dim MyQuery
Dim chSQL As String 'variable qui va te permettre de stocker ta ligne SQL
Set db = CurrentDb()
chSQL = "SELECT [Code outil].[id code outil], [Code outil]![Quantitée(s)]-[Forms]![recherche outil]![Qté_emprunte] AS qte_calculé FROM [Code outil]WHERE ((([Code outil].[id code outil])=Str([Forms]![recherche outil]![Affichage Recherche Code outil iso].[Form]![id code outil])));"
Set MyQuery = db.OpenRecordset(chSQL, dbOpenSnapshot) 'Creation de la requete
MsgBox MyQuery(2).Type