Access MAJ table par une autre

Fermé
artamys Messages postés 120 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 9 mars 2018 - 1 août 2008 à 22:51
Frappe Misere Messages postés 2677 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 10 août 2011 - 4 août 2008 à 14:24
Bonjour,

J'ai une Table A avec 25 Champs. Il existe un Champs Clé Primaire numérique non numéro automatique.
Cette clé primaire est un numéro de demande.
L'objectif est de mettre a jour cette table A (outil interne de service) via un fichier txt qui sera chargé dans un table TEMPO issu de l'extraction hebdomadaire d'un outil WEB mondial.
La table A contient un Champ de plus que l'extraction txt. Ce champs est le numero de projet auquel est rattaché le numero de la demande.

L'objectif de la requete est donc double :
1. Mise a jour : Ecraser Tous les champs existant en fonction de la cle primaire sauf le champs numero de projet.
2 Charger les nouvelles demandes qui seront ensuite affecté par les utilisateurs.

Je fais des essais avec du VBA et SQL.

je peux charger les donner manquante.
MAis je n(arrive pas a écraser les colonnes existantes.
A voir également:

7 réponses

Frappe Misere Messages postés 2677 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 10 août 2011 568
2 août 2008 à 00:22
verifie que le format des données est bien le meme.
0
artamys Messages postés 120 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 9 mars 2018 7
2 août 2008 à 12:10
LES Données sont identiques critères par critères, Même champs, Même nom...
Ce qui me manque c'est le code VBA ou la requete sql pour écraser. les colonnes existantes en fonction de la cle primaire. et en gardant les données de la colonne supplémentaire.
0
Frappe Misere Messages postés 2677 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 10 août 2011 568
4 août 2008 à 10:05
une requete update comprenant tes 2 tables et seulement les champs que tu veux écraser.
je ne vois pas en quoi cela te pose un probleme ?
0
artamys Messages postés 120 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 9 mars 2018 7
4 août 2008 à 12:20
Merci, Sir,
Je ne suis pas expert access, moi je suis expert excel, et je ne connaissais pas cette fonctionalité. voici le code pour ceux qui auront besoin.





Sub reporting_Click()


Dim NomTable1 As String, NomTable2 As String
Dim oRst1 As DAO.Recordset, orst2 As DAO.Recordset
Dim odb As DAO.Database
Dim Message As String
Set odb = CurrentDb
NomTable1 = "TB_DEI"
NomTable2 = "TB_Tempo"
Set oRst1 = odb.OpenRecordset(NomTable1)
Set orst2 = odb.OpenRecordset(NomTable2)
While Not orst2.EOF
Insertion orst2, oRst1
orst2.MoveNext
Wend
If Not oRst1.EOF Then oRst1.MoveLast
Message = "Opération terminée" & vbCrLf & vbCrLf & _
"La table source comportait : " & oRst1.RecordCount & " enregistrement(s)," & vbCrLf & _
"la table de destination en comporte " & orst2.RecordCount
MsgBox Message, vbInformation, "MAJ terminée"

Dim db As DAO.Database
Set db = CurrentDb()

' Exécution de la requête
db.Execute "UPDATE TB_TEMPO INNER JOIN TB_DEI ON TB_TEMPO.NumDEI = TB_DEI.NumDEI SET TB_DEI.ObjetDEI = TB_TEMPO.ObjetDEI, TB_DEI.DateCreation = TB_TEMPO.DateCreation, TB_DEI.DemandeurDEI = TB_TEMPO.DemandeurDEI, TB_DEI.DirectionDEI = TB_TEMPO.DirectionDEI, TB_DEI.CodeAnalytiqueDEI = TB_TEMPO.CodeAnalytiqueDEI, TB_DEI.ValideurDEI = TB_TEMPO.ValideurDEI, TB_DEI.CamLeader = TB_TEMPO.CamLeader, TB_DEI.NatureDEI = TB_TEMPO.NatureDEI, TB_DEI.ThemeDEI = TB_TEMPO.ThemeDEI, TB_DEI.SousThemeDEI = TB_TEMPO.SousThemeDEI, TB_DEI.EtatDEI = TB_TEMPO.EtatDEI, TB_DEI.PrioriteDEI = TB_TEMPO.PrioriteDEI, TB_DEI.DateMOA = TB_TEMPO.DateMOA, TB_DEI.DetailDEI = TB_TEMPO.DetailDEI, TB_DEI.ChargesGlobalesDEI = TB_TEMPO.ChargesGlobalesDEI, TB_DEI.JoursRealisesDEI = TB_TEMPO.JoursRealisesDEI, TB_DEI.RafDEI = TB_TEMPO.RafDEI, TB_DEI.AuteurCreation = TB_TEMPO.AuteurCreation, TB_DEI.DateAcceptation = TB_TEMPO.DateAcceptation, TB_DEI.AuteurAcceptation = TB_TEMPO.AuteurAcceptation, TB_DEI.DateValidation = TB_TEMPO.DateValidation;"
Debug.Print "Enregistrement affectés = " & db.RecordsAffected
MsgBox (" Mise à Jour Terminée")
db.Close
End Sub



Sub Insertion(oRst1 As DAO.Recordset, orst2 As DAO.Recordset)
On Error GoTo err
Dim Fld As DAO.Field
orst2.AddNew
For Each Fld In oRst1.Fields
If (Fld.Attributes And dbAutoIncrField) = 0 Then
orst2.Fields(Fld.Name).Value = Fld.Value
End If
Next Fld
orst2.Update
err:
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Frappe Misere Messages postés 2677 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 10 août 2011 568
4 août 2008 à 13:50
là tu utilises du code mais tu pouvais aussi passer par une requete, avec l'assistant ça aurait été encore plus rapide.
mais tant que ça fonctionne...
0
artamys Messages postés 120 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 9 mars 2018 7
4 août 2008 à 13:58
Oui tu as raison mais comme c'est pour un service il ne faut que des boutons et des actions qu'ils ne puissent pas toucher ensuite. j'ai préféré sécuriser.

Merci beaucoup de ton aide en tout cas.
0
Frappe Misere Messages postés 2677 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 10 août 2011 568
4 août 2008 à 14:24
juste pour info, il est possible d'associer une requete à un bouton.
bonne journée.
0