Ajouter des données à une table seulement si le numéro perso existe ...

Le
ymer.hyseni
Salut tout le monde,

J'ai une table qui contient des données, environs 3000
enregistrements. Dans un fichier excel j'ai des données, environs
50000,ce sont les mêmes champs que dans la table access.

Je veux importer ces données dans la table access, mais pas toutes,
seulement celles qui ont le numéro personnel le même que celles qui se
trouvent dans access déjà.

comment faire?

merci, et à plus.
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
pgz
Le #6290021
Bonsoir.

Dans le principe, je te proposerais la manip suivante :
- importer toutes les données XL dans une table particulière et provisoire,
- récupérer alors les données utiles avec une procédure DAO ou ADO,
- supprimer la table provisoire

Bon courage,

--
pgz
_____________________________




Salut tout le monde,

J'ai une table qui contient des données, environs 3000
enregistrements. Dans un fichier excel j'ai des données, environs
50000,ce sont les mêmes champs que dans la table access.

Je veux importer ces données dans la table access, mais pas toutes,
seulement celles qui ont le numéro personnel le même que celles qui se
trouvent dans access déjà.

comment faire?

merci, et à plus.




Fabien
Le #6289981
Bonsoir.

Dans le principe, je te proposerais la manip suivante :
- importer toutes les données XL dans une table particulière et provisoire,
- récupérer alors les données utiles avec une procédure DAO ou ADO,
- supprimer la table provisoire

Bon courage,

Bonjour,

Ok pour l'import.
Puis Mise a jour de la table par les éléments de la table d'import :
UPDATE ImportClassTmp INNER JOIN Matable ON (ImportClassTmp.Num =
Matable.Num)
SET Matable.Champ1 = ImportClasstmp.Champ1, Matable.Champ2 =
ImportClasstmp.Champ2 ;
Voilou

ymer.hyseni
Le #6289901
On 8 juin, 08:31, Fabien
pgz a écrit :> Bonsoir.

Dans le principe, je te proposerais la manip suivante :
- importer toutes les données XL dans une table particulière et pro visoire,
- récupérer alors les données utiles avec une procédure DAO ou ADO,
- supprimer la table provisoire

Bon courage,


Bonjour,
Ok pour l'import.
Puis Mise a jour de la table par les éléments de la table d'import :
UPDATE ImportClassTmp INNER JOIN Matable ON (ImportClassTmp.Num =
Matable.Num)
SET Matable.Champ1 = ImportClasstmp.Champ1, Matable.Champ2 =
ImportClasstmp.Champ2 ;
Voilou


Salut, merci pour vos réponse, j'avoue que je ne comprends pas tout...

j'ai suivi donc un peu votre aide, j'ai crée une nouvelle table qui
s'appelle T_Provisoire, et qui contient les mêmes champs que la table
originale, elle s'appelle T_Data. Le champs sur lequel le update doit
fonctionner s'appelle NoPersonnel.

Pouvez-vous écrire votre fonction sql avec mes données svp.

merci.


Fabien
Le #6289821
On 8 juin, 08:31, Fabien
pgz a écrit :> Bonsoir.

Dans le principe, je te proposerais la manip suivante :
- importer toutes les données XL dans une table particulière et provisoire,
- récupérer alors les données utiles avec une procédure DAO ou ADO,
- supprimer la table provisoire
Bon courage,
Bonjour,

Ok pour l'import.
Puis Mise a jour de la table par les éléments de la table d'import :
UPDATE ImportClassTmp INNER JOIN Matable ON (ImportClassTmp.Num >> Matable.Num)
SET Matable.Champ1 = ImportClasstmp.Champ1, Matable.Champ2 >> ImportClasstmp.Champ2 ;
Voilou


Salut, merci pour vos réponse, j'avoue que je ne comprends pas tout...

j'ai suivi donc un peu votre aide, j'ai crée une nouvelle table qui
s'appelle T_Provisoire, et qui contient les mêmes champs que la table
originale, elle s'appelle T_Data. Le champs sur lequel le update doit
fonctionner s'appelle NoPersonnel.

Pouvez-vous écrire votre fonction sql avec mes données svp.

merci.

Le plus simple c'est de creer une nouvelle requete.

Tu choisit tes 2 tables T_provisoire et T_data
Tu créé un lien entre les deux sur le champs NoPersonnel
Tu indique qu'il s'agit d'une requte de mise a jour
et tu séléctionne les champs a mettre a jour dans ta table T_data.
Pour chaque champs de T_Data tu indique dans la ligne mise a jour, le
champ de la table T_Provisoire qui lui correspond.
Tu dois obtenir quelque chose comme :

T_data T_provisoire
NoPersonnel-----------------NoPersonnel
Champs1 Champs1
champs2 Champs2

---------------------------------------------------------------------
Champs | Champ1 | Champ2
Table |T_data |T_data
Mise a jour |T_Provisoire.[Champ1] |T_Provisoire.[Champ2]
----------------------------------------------------------------------



ymer.hyseni
Le #6289801
On 8 juin, 11:58, Fabien



On 8 juin, 08:31, Fabien
pgz a écrit :> Bonsoir.

Dans le principe, je te proposerais la manip suivante :
- importer toutes les données XL dans une table particulière et p rovisoire,
- récupérer alors les données utiles avec une procédure DAO o u ADO,
- supprimer la table provisoire
Bon courage,
Bonjour,

Ok pour l'import.
Puis Mise a jour de la table par les éléments de la table d'import :
UPDATE ImportClassTmp INNER JOIN Matable ON (ImportClassTmp.Num =
Matable.Num)
SET Matable.Champ1 = ImportClasstmp.Champ1, Matable.Champ2 =
ImportClasstmp.Champ2 ;
Voilou


Salut, merci pour vos réponse, j'avoue que je ne comprends pas tout...

j'ai suivi donc un peu votre aide, j'ai crée une nouvelle table qui
s'appelle T_Provisoire, et qui contient les mêmes champs que la table
originale, elle s'appelle T_Data. Le champs sur lequel le update doit
fonctionner s'appelle NoPersonnel.

Pouvez-vous écrire votre fonction sql avec mes données svp.

merci.


Le plus simple c'est de creer une nouvelle requete.
Tu choisit tes 2 tables T_provisoire et T_data
Tu créé un lien entre les deux sur le champs NoPersonnel
Tu indique qu'il s'agit d'une requte de mise a jour
et tu séléctionne les champs a mettre a jour dans ta table T_data.
Pour chaque champs de T_Data tu indique dans la ligne mise a jour, le
champ de la table T_Provisoire qui lui correspond.
Tu dois obtenir quelque chose comme :

T_data T_provisoire
NoPersonnel-----------------NoPersonnel
Champs1 Champs1
champs2 Champs2

---------------------------------------------------------------------
Champs | Champ1 | Champ2
Table |T_data |T_data
Mise a jour |T_Provisoire.[Champ1] |T_Provisoire.[Champ2]
----------------------------------------------------------------------- M asquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Salut, merci pour ta réponse, mais moi je ne veux justement pas mettre
à jour les champs que j'ai dans T_Data, je veux juste ajouter des
lignes à ma table, mais ajouter seulement les personnes qui existent
déjà dans ma T_Data, donc en fait au final j'aurai deux lignes pour la
même personne... c'est ce que je veux...

et non pas mettre à jour un champ particulier... ca je ne veux pas...

merci à toi




pgz
Le #6289771
Bonjour.

Je te propose la procédure DAO suivante, dans l'idée et donc à mattre au
point dans ton contexte

Public sub subImporter
dim db as DAO.Database, rstData as DAO.Recordset, rstProvisoire as
DAO.Recordset

set db = Application.CurrentDb
set rstData = db.OpenRecordSet("T_Data",dbOpenDynaset)
set rstProv = db.OpenRecordSet("T_Provisoire",dbOpenDynaset)

While Not rstProv.EOF
rstData.FindFirst "NoPersonnel = " & rstProv("NoPersonnel")
if Not rstData.NoMatch Then
rstData.AddNew
rstData("NoPersonnel") = rstProv("NoPersonnel")
rstData("NomChamp") = rstProv("NomChamp")
...
rstData.Update
End if
rstProv.MoveNext
Wend

rstProv.Close
rstData.Close
set rstProv = Nothing
Set rstData=Nothing
Set db = Nothing
End sub


Et tu exécutes : F5

Bon courage,
--
pgz
_____________________________



- Afficher le texte des messages précédents -


Salut, merci pour ta réponse, mais moi je ne veux justement pas mettre
à jour les champs que j'ai dans T_Data, je veux juste ajouter des
lignes à ma table, mais ajouter seulement les personnes qui existent
déjà dans ma T_Data, donc en fait au final j'aurai deux lignes pour la
même personne... c'est ce que je veux...

et non pas mettre à jour un champ particulier... ca je ne veux pas...

merci à toi





ymer.hyseni
Le #6289691
On 8 juin, 12:57, pgz
Bonjour.

Je te propose la procédure DAO suivante, dans l'idée et donc à matt re au
point dans ton contexte

Public sub subImporter
dim db as DAO.Database, rstData as DAO.Recordset, rstProvisoire as
DAO.Recordset

set db = Application.CurrentDb
set rstData = db.OpenRecordSet("T_Data",dbOpenDynaset)
set rstProv = db.OpenRecordSet("T_Provisoire",dbOpenDynaset)

While Not rstProv.EOF
rstData.FindFirst "NoPersonnel = " & rstProv("NoPersonnel")
if Not rstData.NoMatch Then
rstData.AddNew
rstData("NoPersonnel") = rstProv("NoPersonnel")
rstData("NomChamp") = rstProv("NomChamp")
...
rstData.Update
End if
rstProv.MoveNext
Wend

rstProv.Close
rstData.Close
set rstProv = Nothing
Set rstData=Nothing
Set db = Nothing
End sub

Et tu exécutes : F5

Bon courage,
--
pgz
_____________________________




- Afficher le texte des messages précédents -


Salut, merci pour ta réponse, mais moi je ne veux justement pas mettre
à jour les champs que j'ai dans T_Data, je veux juste ajouter des
lignes à ma table, mais ajouter seulement les personnes qui existent
déjà dans ma T_Data, donc en fait au final j'aurai deux lignes pour la
même personne... c'est ce que je veux...

et non pas mettre à jour un champ particulier... ca je ne veux pas...

merci à toi- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -


Merci à toi, ca fonctionne comme il faut... bravo

cioa



Publicité
Poster une réponse
Anonyme