Couper/coller sous access 2007

Le
stagiaireengalere Hors ligne
Bonjour,

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 ?

en vous remerciant par avance de votre aide ;p
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Gloops
Le #24576611
stagiaireengalere a écrit, le 19/06/2012 13:56 :
Bonjour,

J’ai un petit soucis sur l’écriture d’une commande en langage S QL pour Access.

Je dispose d’une base Access avec une table qui constitue l’ensembl 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 c’est que cet archivage ne se fait pas en f onction 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 toute s les données
d’un champ de la base. ( ce champ n’est pas la clé de la table ma is les
informations présentes sont unique)

Ce que je cherche à faire c’est après avoir sélectionné la bo nne 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 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 Hors ligne
Le #24577811
Le mardi 19 Juin 2012 à 23:12 par Gloops :
stagiaireengalere a écrit, le 19/06/2012 13:56 :
Bonjour,

J’ai un petit soucis sur l’écriture d’une commande en langage S QL
pour Access.

Je dispose d’une base Access avec une table qui constitue l’ensembl 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 c’est que cet archivage ne se fait pas en
f onction 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
toute s les données
d’un champ de la base. ( ce champ n’est pas la clé de la table ma is
les
informations présentes sont unique)

Ce que je cherche à faire c’est après avoir
sélectionné la bo nne 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 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 ?
Gloops
Le #24580251
stagiaireengalere a écrit, le 20/06/2012 10:24 :
Le mardi 19 Juin 2012 à 23:12 par Gloops :
stagiaireengalere a écrit, le 19/06/2012 13:56 :
Bonjour,

J







Bon, eh ben ... on se le tiendra pour dit :)
Publicité
Poster une réponse
Anonyme