Rechercher : dans
Par :

Requete access et vba

Dernière réponse le 23 fév 2006 à 15:15:25 amelie, le 21 fév 2006 à 13:40:44 
 Signaler ce message aux modérateurs

Quelqu'un serait il traduire ces requete en vba merci car moi le vb on ne s'aime pas trop

SELECT Right((Left([Port description],75)),1) AS Unit, Right((Right([Port description],20)),2) AS Port, rg18.[MAC forwarding address]
FROM rg18 LEFT JOIN Gimi ON rg18.[MAC forwarding address] = Gimi.Valeur
WHERE (((Gimi.Valeur) Is Null));

1

HDU, le 21 fév 2006 à 14:45:21
  • +2

Bonjour,

On ne traduit pas du sql en vba, pas possible.
Si tu veux parler d'exécuter une requête sans avoir à l'enregistrer en tant que telle, tu dois utiliser un recordset.

Exemple :

sub DAOOpenRecordset ()
    Dim db As DAO.Database, rst As DAO.Recordset, fld As DAO.Field
    Dim sSQL As String
    ' Ouverture de la base de données 
    Set db = currentDb
    sSQL =  "SELECT Right((Left([Port description],75)),1) AS Unit,
Right((Right([Port description],20)),2) AS Port, rg18.[MAC forwarding address]
FROM rg18 LEFT JOIN Gimi ON rg18.[MAC forwarding address] = Gimi.Valeur
WHERE (((Gimi.Valeur) Is Null));"
    ' Ouverture du recordset 
    Set rst = db.OpenRecordset (sSQL, dbOpenForwardOnly, dbReadOnly)
    ' Fermeture du Recordset
    rst.Close
End Sub

TCHUZZZZZZZZZZZZZZ
@+

Répondre à HDU

2

amelie, le 21 fév 2006 à 15:10:28
  • +1

Je met ce code dans le module access et il doit logiquement marcher ou pas ?????

Répondre à amelie

3

HDU, le 21 fév 2006 à 15:14:22
  • +1

Tu dois le mettre à l'endroit ou *il faut*, c'est-à-dire dans le code propre à l'évènement qui doit déclencher cette requête.
Exemple :
si tu veux exécuter cette requête lors du clic sur un bouton sur un formulaire, et bien tu mets ce code sur l'évènement clic() du même bouton.

Au fait, c'est quoi le but de la maneuvre ?

TCHUZZZZZZZZZZZZZZ
@+

Répondre à HDU

4

amelie, le 21 fév 2006 à 15:18:13

Le but c reussir a separer un champ en plusieur grace au indique presente dans le champs

Répondre à amelie

5

HDU, le 21 fév 2006 à 15:26:22

Pourquoi vouloir le faire absolument en vba ???

Si dans le requêteur d'access tu mets tes tables et tes champs qui vont bien, et tu mets à la place de ton champ portdescription

unit: droite(gauche(portdescription;75);1)
.
Autre chose :
ton Right((Right([Port description],20)),2) sert à quoi ???? Il revient à un right(portdescription,2)

TCHUZZZZZZZZZZZZZZ
@+

Répondre à HDU

6

amelie, le 21 fév 2006 à 15:50:56

Tu as raison c inutile ce que j'avais ecrit !!!!merci t cool

Répondre à amelie

7

HDU, le 21 fév 2006 à 15:59:26

Mais y'a pas de mal ma brave dame ;-))

TCHUZZZZZZZZZZZZZZ
@+

Répondre à HDU

8

amelie, le 22 fév 2006 à 11:36:35

Il ya encore un petit truc que j'ai pas compris c a quand tu dis tu le met dans l'endroit il faut !!!

en fait je met ou ce code et est ce que je laisse la requete que j'ai créer ???

Répondre à amelie

9

amelie, le 22 fév 2006 à 11:41:48

Et aussi desolé comment on crée un bouton avec un formulaire???

Répondre à amelie

10

HDU, le 22 fév 2006 à 14:02:15

Tu ne sais pas créer un bouton dans un formulaire ?????????

Sinon pour ta question d'avant, tout dépend quand tu veux faire exécuter cette requête ; on n'éxécute pas une requête tout au long que la base est ouverte...
TCHUZZZZZZZZZZZZZZ
@+

Répondre à HDU

11

amelie, le 22 fév 2006 à 15:04:49

Si je sais creer un bouton mais quand j'applique a ce boutons mes requete est ce normal qu'il me renvoie mes demande sous forme de tableau moi j'y voudrait sous form de formulaire est ce possible
merci hdu

Répondre à amelie

12

HDU, le 22 fév 2006 à 15:29:13

Re,

Ce que tu appelles sous forme de tableau, c'est qu'il te donne le résultat de la requête, c'est cela ?

Pour l'avoir sous forme de formulaire, il fallait pas t'embrouiller la vie comme cela depuis le départ ;-)

Tu te crées un formulaire avec comme source cette requête.
Au clic sur le bouton, au lieu d'exécuter cette requête, tu fais ouvrir le formulaire.
Exemple :
tu crées un formulaire nommé f_resultat avec comme source de données la requête.
Au clic sur le bouton de ton formulaire "principal", tu mets :
docmd.openform "f_resultat"

Et c'est tout...

TCHUZZZZZZZZZZZZZZ
@+

Répondre à HDU

13

amelie, le 22 fév 2006 à 16:20:06

Desolé je vais sembler bete mais j'ai rien compris a tes exxplications hdu desolé pourrais tu etre plus explicite meme si tu dois surement deja l'etre mais j'ai du mal

merci

Répondre à amelie

14

HDU, le 22 fév 2006 à 16:54:11

Tu veux qu'un formulaire affiche le résultat de ta requête.
Tu crées ta requête par la voie "classique" : tu vas dans l'onglet "requêtes", nouvelle requete, tu choisis les tables dont tu as besoin et les champ dont tu as besoin.
Une requête classique.
Tu enregistre cette requête, par exemple, r_resultat.
Ensuite tu vas dans formulaire, nouveau, soit tu fais ton formulaire avec l'assistant, soit tu le fais "à la main".
Si c'est avec l'assistant, celui-ci te donne le choix de la source de ton formulaire, soit tables, soit requêtes ; tu choisis "requête", et là tu choisis r_resultat créée juste auparavant.
Si tu ne veux pas de l'assistant, tu crées ton formulaire en mode création, dans les propriétés du formulaire (affichage, propriétés), sur la ligne source, du choisis r_resultat.

Tu enregistres ton formulaire, par exemple f_resultat.
En ouvrant ton formulaire en mode normal, celui-ci doit maitenant t'afficher le résultat de ta requête.


Ensuite, si tu veux ouvrir ce formulaire depuis un autre formulaire, avec un bouton par exemple, tu mets sur le code de ce bouton :
docmd.openform "f_resultat"


Je ne peux pas plus détailler...
TCHUZZZZZZZZZZZZZZ
@+

Répondre à HDU

15

amelie, le 23 fév 2006 à 10:48:41

Tu as été tres clair !!!
merci énormement!!
Sinon est il possible au lieu de créér un requete specifique de créer une macro qui va faire toujours la meme actions mais sur des tables differentes mais ayant exactement la meme structure!!
Car sinon je vais etre obligée de realiser a chaque fois une requete specifique pour chaque table c a d changer a chaque fois l'instruction FROM

tu a quelques indications?????
MERCI

Répondre à amelie

16

amelie, le 23 fév 2006 à 11:03:43

Je n'ai vraiment pas ete tres clair au dessus desolé je me reprend!!

J'ai crée des requêtes qui agissent sur mes tables !!
Maintenant en fait je souhaiterais que les actions qu'elles realisent sur mes tables bien précise car instruction FROM elle le fasse sur n'importe quelle table que j'importe!!

en gros pas besoin de modif des requêtes a chaque fois est ce possible et si oui comment et avec qoui module ou macro????
Merci

Répondre à amelie

17

HDU, le 23 fév 2006 à 11:24:00

Tu peux le faire en vba.

Ca sera quelquechose comme :
sql="SELECT truc, bidule from "& le_nom_de_la_table & " where truc=machin ;"

TCHUZZZZZZZZZZZZZZ
@+

Répondre à HDU

18

amelie, le 23 fév 2006 à 11:31:30

Ok pour le vba mais je dois precise automatiquement quelle table je souhaite modifier??
Car je voudrait savoir si c possible de realiser les meme modif sur toutes les tables importées sans changer quoi que ce soit !!
merci en tout cas de ton aide hdu ;)

Répondre à amelie

20

sergeszebe, le 23 fév 2006 à 11:41:59

Salut! ton pb est resolue? la discution est longue mais au dernier msg avec l'ami HDU je vois pas de conclusion?
si non à quel niveau es-tu rendu?

Répondre à sergeszebe

19

HDU, le 23 fév 2006 à 11:35:56

Il faudra forcément que tu indiques à access sur quelles tables tu veut que tes requêtes interviennent.
Avec un peu de bol, si tes tables s'appelent table1, table2, table3..., avec une moulinette c'est simple, si c'est tableun, tabledeux, tabletrois, ça sera plus long...
TCHUZZZZZZZZZZZZZZ
@+

Répondre à HDU

21

amelie, le 23 fév 2006 à 11:49:14

Mes tables s'appellent rg01/rg02....etc
g pas compris pour la moulinette tu peux m'en dire plus merci!!!

Répondre à amelie

22

sergeszebe, le 23 fév 2006 à 11:55:06

Salut! je prend le train en marche du debut avec HDU c'est touffou pourtant il ezst bon je recponnais son pseudo.à l'isntant ou es-tu rendu? quel est le plus clairement ton besoin? et ton pb?:
met le besoin avant le pb

Répondre à sergeszebe

23

amelie, le 23 fév 2006 à 12:05:38

Mon besoin est :
Je veux lancer une appliq ou autre commune a toutes mes tables sans avoir a modifié mes requete sql (c a d le FroM XXX)

En faite g realiser 4 requete sql et pour les appliquer a chaque tables je dois obligatoirement modifier le "from" pour indiquer la table
pbl a la fin ca va m'en faire 80 requete voir plus car j'ai 22 tables

en faite je veux que c requete s'applique a chauque fois pur toutes les tables sans les modif

alors est ce que faut faire un module ou une macro moi je ny connait rien en programmation

merci les gars ;)

Répondre à amelie

24

sergeszebe, le 23 fév 2006 à 12:11:42

C bizare est-ce que tes 4 requette ont les meme besoin?
je veux dire le select par exemple soit la table client. le select va traiter les donné des client!! si tu veux utiliser cette meme requette pour la table Repas le select sera le meme?
est-ce que tu peux faire un copie coller de 2? et tu travail dans quel domaine?
moi je crois qu'il faut faire un module.
comme ça tu auras des variable qui comme le nom l'indique varierons en fonction du besoin.

Répondre à sergeszebe

25

amelie, le 23 fév 2006 à 12:17:18

Moi aussi je pense qu'il faut faire un module mais qui dis module dis programme et qui dit programme dis ""
en faite les 4 requetes font toujours faire les meme actions sur les tables !!!
car en faite g 20 tables qui ont les memes champs mais pas les meme données et une commune ou j'etablie mes liens de correspondance et mes liens de non correspondance!!!

tu comprend un peu mieu le truc??

Répondre à amelie

26

sergeszebe, le 23 fév 2006 à 12:34:48

Mais le module va remplacer les 4 requete sauf que tu vas definr les variables avant et les variable vt changer le resultat final au fur et à mesure.par contre 20 table avec les meme chanmps c'est spécial.
est-ce que tu peux donner un exmple de ce que tu aimeirai avoir ds l'execution d'une requete?
mais tu ne va pas t'échaper au code t'es biens dans du vba? mme si c que des requettre du devra bien faire un docmd.run sql pour les exécuter? si tu trouve compliquer.je t'enverais dans un forum spécial access là tu trouvera mieux la solution.le pb c pas ce que tu vceux optenir mais ta question est clair alors on ne peut pas te donner un bout de code alors qu'on ne connait pas la finalité! tu vois!
moi je t'ai bien compris je crois mais. envoie un peu un exemple!

Répondre à sergeszebe

27

amelie, le 23 fév 2006 à 13:30:06

Je vais te donner un exemple et du meme coup te remettre dans le contexte professionnel!

Voila g recuperer plusieurs info concernant mon reseau et qui est connecté ( noposte nomposte @macposte ...)et g recuperer des infos de tous mes switchs(@mac port decrition)

En faite je dois pour toutes les tables des switch etablir la correspondance avec la table reseau grace a l'adresse mac commune .
Toutes celle qui sont commune correspondent a des postes bureau et les autres non communes a des postes production.
de plus je dois eliminer une ligne specifique et enlever les doublons .

Tous ceci je l'ai realiser avec des requetes .
(tu comprend le fait d'avoir des tables avec les meme champs mais pas les meme info car tables de differents switch)

Maintenant je souhaite qu'au lieu de creer 4 requete specifique pour chaque switch je créee un "module " qui va faire automa

Répondre à amelie

29

amelie, le 23 fév 2006 à 13:32:30

Je laisse mon adresse mail si quelqu'un veut me contacter pour encore plus de renseignement!!!

amelieservat@yahoo.fr

Répondre à amelie

31

amelie, le 23 fév 2006 à 13:33:44

Je laisse mon adresse mail si quelqu'un veut me contacter pour encore plus de renseignement!!!

amelieservat@yahoo.fr

Répondre à amelie

28

amelie, le 23 fév 2006 à 13:31:10

Est ce possible??
MERCI
N'oublions pas ma nullité pour la prog !!!

Répondre à amelie

32

HDU, le 23 fév 2006 à 13:56:04

Re,

commence à être long ce post !!

Si tes tables s'appellent reg01, reg02,...

tu vas pouvoir faire une moulinette dans le genre :


dim i as integer
Dim db As DAO.Database, rst As DAO.Recordset, fld As DAO.Field
Dim sSQL As String
Set db = currentDb
'début de la moulinette
for 1=1 to 22 'tu as 22 tables je crois
    sSQL =  "SELECT ce_que_tu_veux FROM reg" & i & " WHERE tes_conditions ;"
    ' Ouverture du recordset 
    Set rst = db.OpenRecordset (sSQL, dbOpenForwardOnly, dbReadOnly)
    ' Fermeture du Recordset
    rst.Close
End Sub
next i

TCHUZZZZZZZZZZZZZZ
@+

Répondre à HDU

33

sergeszebe, le 23 fév 2006 à 13:59:04

Dit tchusssss elle doit faire le recordset sur toutes ses 22 table non?
style dim t1 as recordset
|
|
|
|
dim T22 as recordset!
ou seul suffira?

Répondre à sergeszebe

34

HDU, le 23 fév 2006 à 14:32:20

Ouais, j'ai mis le next i après le end sub, faute de frappe.

La le recordset va se créer, se refermer, .... 22 fois.
TCHUZZZZZZZZZZZZZZ
@+

Répondre à HDU

35

amelie, le 23 fév 2006 à 14:39:33

Je peux enchainer mes 4 requetes directement les une apres les autres??

Répondre à amelie

37

HDU, le 23 fév 2006 à 14:49:01

Oui, mais tu va être obligée de déclarer les 4.

Dim rst1, rst2, rst3, rst4 As DAO.Recordset
Dim sSQL 1, sSQL2, sSQL3, sSQL4 As String

et dans la boucle
for 1=1 to 22 
    sSQL1 =  "SELECT ce_que_tu_veux FROM reg" & i & " WHERE tes_conditions ;"
    sSQL2 = " SELECT ce_que_tu_veux FROM reg" & i & " WHERE tes_conditions ;"
    sSQL3 =  "SELECT ce_que_tu_veux FROM reg" & i & " WHERE tes_conditions ;"
    sSQL4 = " SELECT ce_que_tu_veux FROM reg" & i & " WHERE tes_conditions ;"

    ' Ouverture du recordset 
    Set rst1 = db.OpenRecordset (sSQL1, dbOpenForwardOnly, dbReadOnly)
    Set rst2 = db.OpenRecordset (sSQL2, dbOpenForwardOnly, dbReadOnly)
    Set rst3 = db.OpenRecordset (sSQL3, dbOpenForwardOnly, dbReadOnly)
    Set rst4 = db.OpenRecordset (sSQL4, dbOpenForwardOnly, dbReadOnly)

    ' Fermeture des Recordsets
    rst1.Close
    rst2.Close
    rst3.Close
    rst4.Close

next i
TCHUZZZZZZZZZZZZZZ
@+

Répondre à HDU

30

sergeszebe, le 23 fév 2006 à 13:33:35

Là tu essaye dc deja de creer ton module en attendant laise ton message sur: www.e-rus.net c spécifiquement access et la gestion des bd .pendant ce temps je vois ce que je peux faire

Répondre à sergeszebe

36

sergeszebe, le 23 fév 2006 à 14:41:39

Oui tu peux enchener les 4 requetes elle s'excuteron par ordre d'enchainement .

Répondre à sergeszebe

38

sergeszebe, le 23 fév 2006 à 14:50:50

Amelie tu devras offrir un bonbon a tchu! et seb!

Répondre à sergeszebe

39

amelie, le 23 fév 2006 à 14:59:04

Une sucette ca ira!!

chupa chups bien sur!!

Répondre à amelie