Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
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 24/06/2011, 10h51   #1
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juin 2011
Messages : 75
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 75
Points : 27
Points : 27
Par défaut Transcription requete SQL en VBA

Bonjour,

Je souhaiterais passer la requete Sql suivante :
Code :
1
2
3
4
chSQL = "UPDATE Fonction1 LEFT JOIN Fonction2 ON (Fonction1.Champ1 = Fonction2.Champ1) AND (Fonction1.Champ2 = Fonction2.Champ2) " _
    & " SET Fonction1.Champ1 = 23, " _
    & " Fonction1.Champ3 = 45 " _
    & " WHERE (((Fonction2.Champ1) Is Null));"
en langage VBA en utilisant conjointement pour parcourir les tables 2 recordset (ADO) sur la table Fonction1 et la table Fonction2.
J'ai essayé avec le code suivant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
rec.CursorLocation = adUseClient
    rec.Open "SELECT * FROM Fonction1", conn, adOpenDynamic, adLockOptimistic
    rec2.CursorLocation = adUseClient
    rec2.Open "SELECT * FROM Fonction2", conn, adOpenDynamic, adLockOptimistic
 
    rec2.MoveFirst
 
    While Not rec2.EOF
    While Not rec.EOF
    With rec
        With rec2
            tampon3 = !Champ1               'Fonction2.Champ1
            tampon4 = !Champ2          'Fonction2.champ2
        End With
        tampon1 = !Champ1                   'Fonction1.Champ1
        tampon2 = !Champ3               'Fonction1.Champ3
        tampon5 = !Champ2                'Fonction1.Champ2
        If tampon1 = tampon3 And tampon4 = tampon5 Then
            tampon1 = 23
            tampon2 = 45
            If tampon3 = Null Then
                .Update
                !Champ1 = tampon1
                !Champ3 = tampon2
            End If
        End If
        rec.MoveNext
    End With
    Wend
        rec2.MoveNext
    Wend
 
    rec.Close
    Set rec = Nothing
    rec2.Close
    Set rec2 = Nothing
Je n'ai pas d'erreur de compilation, mais ce n'est apparemment pas l'équivalent de la requete, car mon tableau se remplit differement : Je pense que le problème vient de comment je gère la condition WHERE....
Quelqu'un pourrait-il m'aider ? car ça fait maintenant un petit moment que j'essaye de différentes manières et cela ne fonctionne toujours pas....
candrau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 12h23   #2
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour candrau,

1) : Pourquoi cherches-tu a effectuer manuellement tes updates alors qu'il te suffirait de faire un docmd.runsql chSqL pour faire la mise à jour ?

2) Il me semble qu'il n'y ait pas d'instruction rec.edit, ce qui ne devrait pas permettre à priori d'ouverture en mise à jour de l'enregistrement

3) de plus, le fait d'imbriquer with rec, puis with rec2 me parait dangereux, car l'interprétation logique du programme ferait qu'il existerait un objet rec.rec2, ce qui n'est pas le cas
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 14h16   #3
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juin 2011
Messages : 75
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 75
Points : 27
Points : 27
Je cherche à le faire manuellement, car ce code n'est pas sous access, et j'utilise une fonction personnalisée à la place de la valeur 23 : SET Fonction1.champ1 = mafonction (23). (Je ne l'avais pas spécifié dans ma question histoire de pas tous compliquer^^)

Du coup, si je reste en sql, mon compilateur m'indique que ma fonction personnalisée n'existe pas, donc je suis obligé de contourner le problème (voir dans le forum le sujet : "Fonction personnelle et ADO" où je soulevais ce problème).

quand à l'imbrication des with, à priori cela ne pose pas de problème, car je l'ai déjà utilisé ailleurs dans mon code , et cela fonctionne....
candrau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 14h30   #4
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juin 2011
Messages : 75
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 75
Points : 27
Points : 27
Bon en fait, c'est bon, j'ai réussi, je me suis trop compliqué la vie sur cette histoire: j'ai juste rajouter une colonne a mon tableau pour m'indiquer sur quelles lignes étaient les modifs à faire, puis je les ai modifié via recordset avant de supprimer la colonne rajoutée.

Merci quand même pour avoir essayé de m'aider
candrau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 14h47   #5
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour Candrau,

Parfait si tu y es arrivé tout seul.

Sache qu'un des gros avantages d'access est la possibilité d'implémenter automatiquement des fonction personnalisées dans ton SQL.

Comment faire :
- créer un module indépendant
- écrire toute les fonctions personnalisées dans ce module
- creer une requête (ou l'écrire en VBA) et ajouter la fonction dans ton sql

ex :
Je veux une fonction SQL qui calcule de prix TTC d'un montant
1) creer un module builtInSQLFonction
2) dans ce module créer la procédure suivante :

Code :
1
2
3
4
function TTC (montantHT as single) as single
const Taux_TVA = 1.186
ttc = montantHT * taux_TVA
exit function
3) creer une requete à partir d'une table contenant une colonne numérique (ex : montant) type :
Code :
select mon_montant as prix_ht, TTC(<mon_montant) as prix_ttc from ma_table;
4) regarde le résultat
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h46.


 
 
 
 
Partenaires

Hébergement Web