Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/05/2011, 15h27   #1
Candidat au titre de Membre du Club
 
Inscription : octobre 2007
Messages : 34
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 34
Points : 14
Points : 14
Par défaut Modification Champs Sous Formulaire Requête Union Impossible

Bonjour,

Mon formulaire principal contient un sous formulaire (l'objet est nommé SForm et le formulaire d'origine SousForm) basé sur une requête UNION. (ReqUnion)

Les champs d'une requête union ne pouvant être modifiés de façon dynamique, j'execute en VB
- une requêtre Création de table avec le contenu de la requête union
- puis je réaffecte le recordsource du sous formulaire à la table Temp

Code :
1
2
3
4
5
6
7
8
9
    CurrentDb.Execute ("Drop Table Temp")
    CurrentDb.Execute ("SELECT ReqUnion.* INTO Temp FROM ReqUnion;")
 
    With SousForm 'Nom du (Sous-)Formulaire 
        .RecordsetType = 0 'dynamique
        .RecordSource = "Temp"
        .Requery
    End With
    Me.requery
Phénomènes étranges:
- En l'état, aucun enregistrement n'est affiché alors que la table Temp a 5 enregistrement
- Si je modifie un champs, un nouvel enregistrement est ajouté à la table Temp et est modifié de façon dynamique
- Si je change le type de Recordeset de Dynamique à Instantané, les 5 enregistrement de la table Temp sont affichés mais ne sont pas modifiable.
- Enfin, si je recrée un nouveau (Sous-)Formulaire, en mode dynamique, ma table est bien mise à jour.

Quelqu'un comprend t'il ce qu'il se passe ?
meud007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 16h02   #2
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
Bonjour,

Humm, déjà greffes à tes méthodes Execute l'argument dbFailOnError.
Le tout bien entendu encapsulé dans une gestion d'erreur idoine.

Ensuite créé dynamiquement ta requête via un QueryDefs et de cette requête, tu peux créer une table à condition que si cette table existe (user de INSERT INTO) ou si elle n'existe pas (user de SELECT INTO) ; mais dans les deux cas, il faut spécifier les champs de destination comme ceux de la source.

Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 16h25   #3
Candidat au titre de Membre du Club
 
Inscription : octobre 2007
Messages : 34
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 34
Points : 14
Points : 14
Merci pour la réponse, mais je ne comprend pas tout...

J'ai essayé ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    CurrentDb.Execute ("Drop Table Temp")
    CurrentDb.Execute ("SELECT ReqUnion.* INTO Temp FROM ReqUnion;")
 
    Dim q As QueryDef
    Set q = CurrentDb.CreateQueryDef("ReqTemp", "Select Temp.* From Temp")
 
 
 
    With Form_ReqCorrectionLotReactifComposition
        .RecordsetType = 0
        .RecordSource = "ReqTemp"
        .Requery
    End With
    Me.Requery
Mais ça ne marche pas.
La requête en mode Feuille de donnée permet bien du visualiser les enregistrementsn, mais le SousFormulaire associé non.
Pourtant, en mode création, les contrôles sont bien associés aux champs de la table temp.
Je ne comprends vraiment pas
meud007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 11h21   #4
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
Humm, non, tu n'y es pas du tout...
Quand je dis créer ta requête, c'est ta requête UNION e.g. "ReqUnion".
Ensuite,
  • soit tu supprimes la table "Temp" et tu fais un SELECT INTO ;
  • soit tu la vides auquel cas tu fais un DELETE puis INSERT ;

Argy

[MODE PROF]
As ce propos, nomme correctement tes objets car ReqUnion et Temp, ce n'est pas très parlant et reste synonyme d'une perspective de maintenance utltérieure ennuyeuse en laissant entrevoir un certain manque de rigueur voire....
[/MODE PROF]
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 14h41   #5
Candidat au titre de Membre du Club
 
Inscription : octobre 2007
Messages : 34
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 34
Points : 14
Points : 14
Merci et désolé pour la réponse tardive.

Pour répondre à tes remarques judicieuse, les noms de mes variables sont plus "propre" que dans le bout de code mais un peu à ralonge et pas très claire hors du contexte.

Je crois plus ou moins avoir essayé les deux solutions que tu me proposes (enfin je crois), mais ça ne marche pas. En revanche, je crois que je vais travailler l'idée d'une table temporaire plutôt qu'une requête union. Mon formulaire devrait alors permettre de modifier les champs de façon dynamique.

Tout ça reste quand même très étrange.
meud007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 15h15   #6
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
Non, non, ne perd pas patience.
Le pricipe est simple :
Tu montes ta requête UNION telle que tu l'attends.
Tu en récupères le code SQL et tu le colle dans une variable.
Tu créés ta requêtes avec une vérification de son existence :
  • Si elle existe alors utilise la propriété SQL du QueryDefs pour affecter la chaîne ci-avant.
  • Si elle n'existe pas, utilise le CreateQueryDefs() pour créer la requête.
Une fois ta requête créée, tu vérifies l'existence de ta table cible.
  • Si elle n'existe pas, tu créé la table avec un SELECT INTO ;
  • Si elle existe, tu la vides avec un DELETE puis tu la rempli avec un SELECt sur ta requête Union via un INSERT ;
Je te préconise d'écrire cet algo, de me le soumettre et cela te permettra de bien comprendre la philosophie.
Après la transpo en VBA sera un jeu d'enfant.

Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h45.


 
 
 
 
Partenaires

Hébergement Web