Access MAJ table par une autre
artamys
Messages postés
127
Statut
Membre
-
Frappe Misere Messages postés 2702 Statut Membre -
Frappe Misere Messages postés 2702 Statut Membre -
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.
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:
- Access MAJ table par une autre
- Table ascii - Guide
- Table des matières word - Guide
- È maj - Guide
- Maj chrome - Accueil - Applications & Logiciels
- Maj windows 10 - Accueil - Mise à jour
7 réponses
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.
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.
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 ?
je ne vois pas en quoi cela te pose un probleme ?
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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...
mais tant que ça fonctionne...