J’ai un petit soucis sur l’écriture d’une commande en langage SQL pour Access.
Je dispose d’une base Access avec une table qui constitue l’ensemble des données de la base, et pour des raisons pratique je souhaiterais pouvoir archiver de temps en temps les données présentes dans cette base.
Là ou ça se complique c’est que cet archivage ne se fait pas en fonction de la date des données mais par sélection au cas par cas.
J’ai donc un formulaire avec un menu déroulant qui présente toutes les données d’un champ de la base. ( ce champ n’est pas la clé de la table mais les informations présentes sont unique)
Ce que je cherche à faire c’est après avoir sélectionné la bonne donnée grâce à ce menu déroulant, que l’on puisse avec un bouton lancer une macro ou un code qui « coupera » la ligne appartenant au champ sélectionné de la table principale et la collera dans la table « archive ».
J’ai tenté le code suivant :
Private Sub Commande8_Click()
SQL = "INSERT INTO archive_base_donnees SELECT * FROM base_donnees WHERE titre_etude ='liste';"
End Sub
Mais il ne se passe rien.
Comment dois-je procéder pour faire une telle manipulation ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Gloops
stagiaireengalere a écrit, le 19/06/2012 13:56 :
Bonjour,
Jai un petit soucis sur lécriture dune commande en langage S QL pour Access.
Je dispose dune base Access avec une table qui constitue lensembl e des données de la base, et pour des raisons pratique je souhaiterais pouvoir archiv er de temps en temps les données présentes dans cette base.
Là ou ça se complique cest que cet archivage ne se fait pas en f onction de la date des données mais par sélection au cas par cas.
Jai donc un formulaire avec un menu déroulant qui présente toute s les données dun champ de la base. ( ce champ nest pas la clé de la table ma is les informations présentes sont unique)
Ce que je cherche à faire cest après avoir sélectionné la bo nne donnée grâce à ce menu déroulant, que lon puisse avec un bouton lancer une macro ou un code qui « coupera » la ligne appartenant au champ sélectionné de la table principale et la collera dans la table « archive ».
Jai tenté le code suivant :
Private Sub Commande8_Click() SQL = "INSERT INTO archive_base_donnees SELECT * FROM base_donnees WH ERE titre_etude ='liste';" End Sub
Mais il ne se passe rien.
Comment dois-je procéder pour faire une telle manipulation ?
en vous remerciant par avance de votre aide ;p
Bonjour,
Je me suis fait plusieurs fois dans la journée la réflexion que l'affichage d'une requête SELECT INTO en mode affichage des données n e crée rien, ça se contente d'afficher.
Alors qu'en allant dans la fenêtre d'exécution, en en tapant DoCmd.RunSQL suivi du code de la requête, entre guillemets, là il se passe quelque chose.
Ah oui alors je regarde le message, et je vois que c'est encore mieux : tu as mis le code de la requête dans une variable texte, et tu n'as rie n fait avec, comme c'est bizarre qu'il ne se passe rien.
Juste avant le End Sub, tu pourrais ajouter :
With DoCmd ' .SetWarnings False .RunSQL strSQL ' .SetWarnings True End With
Tu noteras que j'ai mis deux lignes en commentaires, de façon que le message de demande de confirmation te montre bien que la requête s'exécute. Ensuite, peut-être bien que tu te passeras bien de ce message, il suffira alors d'enlever les apostrophes au début des deux lignes.
A noter qu'au premier coup d'oeil cette requête me paraît pas mal pou r copier une ligne (peut-être qu'après tu rendras l'argument modifiable ), mais qu'elle ne supprime pas la ligne de la table de départ.
Il faudra aussi ajouter
DoCmd.RunSQL "DELETE FROM base_donnees WHERE TITRE_ETUDE='liste'"
(ça peut aussi être entre le DoCmd.SetWarnings False, et le DoCmd.SetWarnings True)
ça peut être prudent de faire une copie de la base de données avant de faire le test, ça donne un droit à l'erreur.
A noter pour la prochaine fois : il n'y a pas beaucoup de rues qui s'appellent "rue de l'immeuble". Pourquoi ? Parce qu'expliquer qu'on habite le grand immeuble blanc dans la rue de l'immeuble, ça n'introdui t pas beaucoup de clarté supplémentaire dans l'explication, même si c 'est rue de l'immeuble rouge. De la même manière, appeler base_de_donnees une table, ça suppose d'aimer une longue séance où on essaie d'explique r de quoi on parle mais personne ne comprend.
J'avoue que dans Excel il m'arrive d'appeler comme ça un champ où se trouvent les données. J'ai l'impression que ça prête moins à conf usion, peut-être que je me trompe.
stagiaireengalere a écrit, le 19/06/2012 13:56 :
Bonjour,
Jai un petit soucis sur lécriture dune commande en langage S QL pour Access.
Je dispose dune base Access avec une table qui constitue lensembl e des données
de la base, et pour des raisons pratique je souhaiterais pouvoir archiv er de
temps en temps les données présentes dans cette base.
Là ou ça se complique cest que cet archivage ne se fait pas en f onction de la
date des données mais par sélection au cas par cas.
Jai donc un formulaire avec un menu déroulant qui présente toute s les données
dun champ de la base. ( ce champ nest pas la clé de la table ma is les
informations présentes sont unique)
Ce que je cherche à faire cest après avoir sélectionné la bo nne donnée grâce à
ce menu déroulant, que lon puisse avec un bouton lancer une macro ou un code
qui « coupera » la ligne appartenant au champ sélectionné de la table principale
et la collera dans la table « archive ».
Jai tenté le code suivant :
Private Sub Commande8_Click()
SQL = "INSERT INTO archive_base_donnees SELECT * FROM base_donnees WH ERE
titre_etude ='liste';"
End Sub
Mais il ne se passe rien.
Comment dois-je procéder pour faire une telle manipulation ?
en vous remerciant par avance de votre aide ;p
Bonjour,
Je me suis fait plusieurs fois dans la journée la réflexion que
l'affichage d'une requête SELECT INTO en mode affichage des données n e
crée rien, ça se contente d'afficher.
Alors qu'en allant dans la fenêtre d'exécution, en en tapant
DoCmd.RunSQL suivi du code de la requête, entre guillemets, là il se
passe quelque chose.
Ah oui alors je regarde le message, et je vois que c'est encore mieux :
tu as mis le code de la requête dans une variable texte, et tu n'as rie n
fait avec, comme c'est bizarre qu'il ne se passe rien.
Juste avant le End Sub, tu pourrais ajouter :
With DoCmd
' .SetWarnings False
.RunSQL strSQL
' .SetWarnings True
End With
Tu noteras que j'ai mis deux lignes en commentaires, de façon que le
message de demande de confirmation te montre bien que la requête
s'exécute. Ensuite, peut-être bien que tu te passeras bien de ce
message, il suffira alors d'enlever les apostrophes au début des deux
lignes.
A noter qu'au premier coup d'oeil cette requête me paraît pas mal pou r
copier une ligne (peut-être qu'après tu rendras l'argument modifiable ),
mais qu'elle ne supprime pas la ligne de la table de départ.
Il faudra aussi ajouter
DoCmd.RunSQL "DELETE FROM base_donnees WHERE TITRE_ETUDE='liste'"
(ça peut aussi être entre le DoCmd.SetWarnings False, et le
DoCmd.SetWarnings True)
ça peut être prudent de faire une copie de la base de données avant de
faire le test, ça donne un droit à l'erreur.
A noter pour la prochaine fois : il n'y a pas beaucoup de rues qui
s'appellent "rue de l'immeuble". Pourquoi ? Parce qu'expliquer qu'on
habite le grand immeuble blanc dans la rue de l'immeuble, ça n'introdui t
pas beaucoup de clarté supplémentaire dans l'explication, même si c 'est
rue de l'immeuble rouge. De la même manière, appeler base_de_donnees une
table, ça suppose d'aimer une longue séance où on essaie d'explique r de
quoi on parle mais personne ne comprend.
J'avoue que dans Excel il m'arrive d'appeler comme ça un champ où se
trouvent les données. J'ai l'impression que ça prête moins à conf usion,
peut-être que je me trompe.
Jai un petit soucis sur lécriture dune commande en langage S QL pour Access.
Je dispose dune base Access avec une table qui constitue lensembl e des données de la base, et pour des raisons pratique je souhaiterais pouvoir archiv er de temps en temps les données présentes dans cette base.
Là ou ça se complique cest que cet archivage ne se fait pas en f onction de la date des données mais par sélection au cas par cas.
Jai donc un formulaire avec un menu déroulant qui présente toute s les données dun champ de la base. ( ce champ nest pas la clé de la table ma is les informations présentes sont unique)
Ce que je cherche à faire cest après avoir sélectionné la bo nne donnée grâce à ce menu déroulant, que lon puisse avec un bouton lancer une macro ou un code qui « coupera » la ligne appartenant au champ sélectionné de la table principale et la collera dans la table « archive ».
Jai tenté le code suivant :
Private Sub Commande8_Click() SQL = "INSERT INTO archive_base_donnees SELECT * FROM base_donnees WH ERE titre_etude ='liste';" End Sub
Mais il ne se passe rien.
Comment dois-je procéder pour faire une telle manipulation ?
en vous remerciant par avance de votre aide ;p
Bonjour,
Je me suis fait plusieurs fois dans la journée la réflexion que l'affichage d'une requête SELECT INTO en mode affichage des données n e crée rien, ça se contente d'afficher.
Alors qu'en allant dans la fenêtre d'exécution, en en tapant DoCmd.RunSQL suivi du code de la requête, entre guillemets, là il se passe quelque chose.
Ah oui alors je regarde le message, et je vois que c'est encore mieux : tu as mis le code de la requête dans une variable texte, et tu n'as rie n fait avec, comme c'est bizarre qu'il ne se passe rien.
Juste avant le End Sub, tu pourrais ajouter :
With DoCmd ' .SetWarnings False .RunSQL strSQL ' .SetWarnings True End With
Tu noteras que j'ai mis deux lignes en commentaires, de façon que le message de demande de confirmation te montre bien que la requête s'exécute. Ensuite, peut-être bien que tu te passeras bien de ce message, il suffira alors d'enlever les apostrophes au début des deux lignes.
A noter qu'au premier coup d'oeil cette requête me paraît pas mal pou r copier une ligne (peut-être qu'après tu rendras l'argument modifiable ), mais qu'elle ne supprime pas la ligne de la table de départ.
Il faudra aussi ajouter
DoCmd.RunSQL "DELETE FROM base_donnees WHERE TITRE_ETUDE='liste'"
(ça peut aussi être entre le DoCmd.SetWarnings False, et le DoCmd.SetWarnings True)
ça peut être prudent de faire une copie de la base de données avant de faire le test, ça donne un droit à l'erreur.
A noter pour la prochaine fois : il n'y a pas beaucoup de rues qui s'appellent "rue de l'immeuble". Pourquoi ? Parce qu'expliquer qu'on habite le grand immeuble blanc dans la rue de l'immeuble, ça n'introdui t pas beaucoup de clarté supplémentaire dans l'explication, même si c 'est rue de l'immeuble rouge. De la même manière, appeler base_de_donnees une table, ça suppose d'aimer une longue séance où on essaie d'explique r de quoi on parle mais personne ne comprend.
J'avoue que dans Excel il m'arrive d'appeler comme ça un champ où se trouvent les données. J'ai l'impression que ça prête moins à conf usion, peut-être que je me trompe.
stagiaireengalere
Le mardi 19 Juin 2012 à 23:12 par Gloops :
stagiaireengalere a écrit, le 19/06/2012 13:56 :
Bonjour,
Jai un petit soucis sur lécriture dune commande en langage S QL pour Access.
Je dispose dune base Access avec une table qui constitue lensembl e des données de la base, et pour des raisons pratique je souhaiterais pouvoir archiv er de temps en temps les données présentes dans cette base.
Là ou ça se complique cest que cet archivage ne se fait pas en f onction de la date des données mais par sélection au cas par cas.
Jai donc un formulaire avec un menu déroulant qui présente toute s les données dun champ de la base. ( ce champ nest pas la clé de la table ma is les informations présentes sont unique)
Ce que je cherche à faire cest après avoir sélectionné la bo nne donnée grâce à ce menu déroulant, que lon puisse avec un bouton lancer une macro ou un code qui « coupera » la ligne appartenant au champ sélectionné de la table principale et la collera dans la table « archive ».
Jai tenté le code suivant :
Private Sub Commande8_Click() SQL = "INSERT INTO archive_base_donnees SELECT * FROM base_donnees WH ERE titre_etude ='liste';" End Sub
Mais il ne se passe rien.
Comment dois-je procéder pour faire une telle manipulation ?
en vous remerciant par avance de votre aide ;p
Bonjour,
Je me suis fait plusieurs fois dans la journée la réflexion que l'affichage d'une requête SELECT INTO en mode affichage des données n e crée rien, ça se contente d'afficher.
Alors qu'en allant dans la fenêtre d'exécution, en en tapant DoCmd.RunSQL suivi du code de la requête, entre guillemets, là il se passe quelque chose.
Ah oui alors je regarde le message, et je vois que c'est encore mieux : tu as mis le code de la requête dans une variable texte, et tu n'as rie n fait avec, comme c'est bizarre qu'il ne se passe rien.
Juste avant le End Sub, tu pourrais ajouter :
With DoCmd ' .SetWarnings False .RunSQL strSQL ' .SetWarnings True End With
Tu noteras que j'ai mis deux lignes en commentaires, de façon que le message de demande de confirmation te montre bien que la requête s'exécute. Ensuite, peut-être bien que tu te passeras bien de ce message, il suffira alors d'enlever les apostrophes au début des deux lignes.
A noter qu'au premier coup d'oeil cette requête me paraît pas mal pou r copier une ligne (peut-être qu'après tu rendras l'argument modifiable ), mais qu'elle ne supprime pas la ligne de la table de départ.
Il faudra aussi ajouter
DoCmd.RunSQL "DELETE FROM base_donnees WHERE TITRE_ETUDE='liste'"
(ça peut aussi être entre le DoCmd.SetWarnings False, et le DoCmd.SetWarnings True)
ça peut être prudent de faire une copie de la base de données avant de faire le test, ça donne un droit à l'erreur.
A noter pour la prochaine fois : il n'y a pas beaucoup de rues qui s'appellent "rue de l'immeuble". Pourquoi ? Parce qu'expliquer qu'on habite le grand immeuble blanc dans la rue de l'immeuble, ça n'introdui t pas beaucoup de clarté supplémentaire dans l'explication, même si c 'est rue de l'immeuble rouge. De la même manière, appeler base_de_donnees une table, ça suppose d'aimer une longue séance où on essaie d'explique r de quoi on parle mais personne ne comprend.
J'avoue que dans Excel il m'arrive d'appeler comme ça un champ où se trouvent les données. J'ai l'impression que ça prête moins à conf usion, peut-être que je me trompe.
Merci gloops pour ta réponse.
j'ai tenté de mettre en pratique ce que tu m'a dis, mais j'ai des difficulté (ne maistrisant pas du tout le code)
en tenant compte de ce que tu me disais, mon nouveau code est le suivant:
rivate Sub Commande8_Click()
DoCmd.RunSQL SQL = "INSERT INTO archive SELECT * FROM base_donnees WHERE titre_etude = 'liste';"
With DoCmd .SetWarnings False .RunSQL strSQL .SetWarnings True End With
DoCmd.RunSQL "DELETE * FROM base_donnees WHERE TITRE_ETUDE='liste'"
End Sub
mais j'ai un message d'erreur quand se lance la macro. erreur de compilation, argument non facultatif.
comment dois-je procéder ?
Le mardi 19 Juin 2012 à 23:12 par Gloops :
stagiaireengalere a écrit, le 19/06/2012 13:56 :
Bonjour,
Jai un petit soucis sur lécriture dune commande en langage S QL
pour Access.
Je dispose dune base Access avec une table qui constitue lensembl e des
données
de la base, et pour des raisons pratique je souhaiterais pouvoir archiv er de
temps en temps les données présentes dans cette base.
Là ou ça se complique cest que cet archivage ne se fait pas en
f onction de la
date des données mais par sélection au cas par cas.
Jai donc un formulaire avec un menu déroulant qui présente
toute s les données
dun champ de la base. ( ce champ nest pas la clé de la table ma is
les
informations présentes sont unique)
Ce que je cherche à faire cest après avoir
sélectionné la bo nne donnée grâce à
ce menu déroulant, que lon puisse avec un bouton lancer une macro ou
un code
qui « coupera » la ligne appartenant au champ
sélectionné de la table principale
et la collera dans la table « archive ».
Jai tenté le code suivant :
Private Sub Commande8_Click()
SQL = "INSERT INTO archive_base_donnees SELECT * FROM base_donnees WH ERE
titre_etude ='liste';"
End Sub
Mais il ne se passe rien.
Comment dois-je procéder pour faire une telle manipulation ?
en vous remerciant par avance de votre aide ;p
Bonjour,
Je me suis fait plusieurs fois dans la journée la réflexion que
l'affichage d'une requête SELECT INTO en mode affichage des
données n e
crée rien, ça se contente d'afficher.
Alors qu'en allant dans la fenêtre d'exécution, en en tapant
DoCmd.RunSQL suivi du code de la requête, entre guillemets, là il
se
passe quelque chose.
Ah oui alors je regarde le message, et je vois que c'est encore mieux :
tu as mis le code de la requête dans une variable texte, et tu n'as rie n
fait avec, comme c'est bizarre qu'il ne se passe rien.
Juste avant le End Sub, tu pourrais ajouter :
With DoCmd
' .SetWarnings False
.RunSQL strSQL
' .SetWarnings True
End With
Tu noteras que j'ai mis deux lignes en commentaires, de façon que le
message de demande de confirmation te montre bien que la requête
s'exécute. Ensuite, peut-être bien que tu te passeras bien de ce
message, il suffira alors d'enlever les apostrophes au début des deux
lignes.
A noter qu'au premier coup d'oeil cette requête me paraît pas mal
pou r
copier une ligne (peut-être qu'après tu rendras l'argument
modifiable ),
mais qu'elle ne supprime pas la ligne de la table de départ.
Il faudra aussi ajouter
DoCmd.RunSQL "DELETE FROM base_donnees WHERE TITRE_ETUDE='liste'"
(ça peut aussi être entre le DoCmd.SetWarnings False, et le
DoCmd.SetWarnings True)
ça peut être prudent de faire une copie de la base de
données avant de
faire le test, ça donne un droit à l'erreur.
A noter pour la prochaine fois : il n'y a pas beaucoup de rues qui
s'appellent "rue de l'immeuble". Pourquoi ? Parce qu'expliquer qu'on
habite le grand immeuble blanc dans la rue de l'immeuble, ça n'introdui
t
pas beaucoup de clarté supplémentaire dans l'explication,
même si c 'est
rue de l'immeuble rouge. De la même manière, appeler
base_de_donnees une
table, ça suppose d'aimer une longue séance où on essaie
d'explique r de
quoi on parle mais personne ne comprend.
J'avoue que dans Excel il m'arrive d'appeler comme ça un champ où
se
trouvent les données. J'ai l'impression que ça prête moins
à conf usion,
peut-être que je me trompe.
Merci gloops pour ta réponse.
j'ai tenté de mettre en pratique ce que tu m'a dis, mais j'ai des difficulté (ne maistrisant pas du tout le code)
en tenant compte de ce que tu me disais, mon nouveau code est le suivant:
rivate Sub Commande8_Click()
DoCmd.RunSQL
SQL = "INSERT INTO archive SELECT * FROM base_donnees WHERE titre_etude = 'liste';"
With DoCmd
.SetWarnings False
.RunSQL strSQL
.SetWarnings True
End With
DoCmd.RunSQL "DELETE * FROM base_donnees WHERE TITRE_ETUDE='liste'"
End Sub
mais j'ai un message d'erreur quand se lance la macro.
erreur de compilation, argument non facultatif.
Jai un petit soucis sur lécriture dune commande en langage S QL pour Access.
Je dispose dune base Access avec une table qui constitue lensembl e des données de la base, et pour des raisons pratique je souhaiterais pouvoir archiv er de temps en temps les données présentes dans cette base.
Là ou ça se complique cest que cet archivage ne se fait pas en f onction de la date des données mais par sélection au cas par cas.
Jai donc un formulaire avec un menu déroulant qui présente toute s les données dun champ de la base. ( ce champ nest pas la clé de la table ma is les informations présentes sont unique)
Ce que je cherche à faire cest après avoir sélectionné la bo nne donnée grâce à ce menu déroulant, que lon puisse avec un bouton lancer une macro ou un code qui « coupera » la ligne appartenant au champ sélectionné de la table principale et la collera dans la table « archive ».
Jai tenté le code suivant :
Private Sub Commande8_Click() SQL = "INSERT INTO archive_base_donnees SELECT * FROM base_donnees WH ERE titre_etude ='liste';" End Sub
Mais il ne se passe rien.
Comment dois-je procéder pour faire une telle manipulation ?
en vous remerciant par avance de votre aide ;p
Bonjour,
Je me suis fait plusieurs fois dans la journée la réflexion que l'affichage d'une requête SELECT INTO en mode affichage des données n e crée rien, ça se contente d'afficher.
Alors qu'en allant dans la fenêtre d'exécution, en en tapant DoCmd.RunSQL suivi du code de la requête, entre guillemets, là il se passe quelque chose.
Ah oui alors je regarde le message, et je vois que c'est encore mieux : tu as mis le code de la requête dans une variable texte, et tu n'as rie n fait avec, comme c'est bizarre qu'il ne se passe rien.
Juste avant le End Sub, tu pourrais ajouter :
With DoCmd ' .SetWarnings False .RunSQL strSQL ' .SetWarnings True End With
Tu noteras que j'ai mis deux lignes en commentaires, de façon que le message de demande de confirmation te montre bien que la requête s'exécute. Ensuite, peut-être bien que tu te passeras bien de ce message, il suffira alors d'enlever les apostrophes au début des deux lignes.
A noter qu'au premier coup d'oeil cette requête me paraît pas mal pou r copier une ligne (peut-être qu'après tu rendras l'argument modifiable ), mais qu'elle ne supprime pas la ligne de la table de départ.
Il faudra aussi ajouter
DoCmd.RunSQL "DELETE FROM base_donnees WHERE TITRE_ETUDE='liste'"
(ça peut aussi être entre le DoCmd.SetWarnings False, et le DoCmd.SetWarnings True)
ça peut être prudent de faire une copie de la base de données avant de faire le test, ça donne un droit à l'erreur.
A noter pour la prochaine fois : il n'y a pas beaucoup de rues qui s'appellent "rue de l'immeuble". Pourquoi ? Parce qu'expliquer qu'on habite le grand immeuble blanc dans la rue de l'immeuble, ça n'introdui t pas beaucoup de clarté supplémentaire dans l'explication, même si c 'est rue de l'immeuble rouge. De la même manière, appeler base_de_donnees une table, ça suppose d'aimer une longue séance où on essaie d'explique r de quoi on parle mais personne ne comprend.
J'avoue que dans Excel il m'arrive d'appeler comme ça un champ où se trouvent les données. J'ai l'impression que ça prête moins à conf usion, peut-être que je me trompe.
Merci gloops pour ta réponse.
j'ai tenté de mettre en pratique ce que tu m'a dis, mais j'ai des difficulté (ne maistrisant pas du tout le code)
en tenant compte de ce que tu me disais, mon nouveau code est le suivant:
rivate Sub Commande8_Click()
DoCmd.RunSQL SQL = "INSERT INTO archive SELECT * FROM base_donnees WHERE titre_etude = 'liste';"
With DoCmd .SetWarnings False .RunSQL strSQL .SetWarnings True End With
DoCmd.RunSQL "DELETE * FROM base_donnees WHERE TITRE_ETUDE='liste'"
End Sub
mais j'ai un message d'erreur quand se lance la macro. erreur de compilation, argument non facultatif.