Access MAJ table par une autre

artamys Messages postés 122 Date d'inscription   Statut Membre Dernière intervention   -  
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.
Configuration: Windows XP
Internet Explorer 6.0

7 réponses

  1. Frappe Misere Messages postés 2702 Statut Membre 568
     
    verifie que le format des données est bien le meme.
    0
  2. artamys Messages postés 122 Date d'inscription   Statut Membre Dernière intervention   7
     
    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
  3. Frappe Misere Messages postés 2702 Statut Membre 568
     
    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
  4. artamys Messages postés 122 Date d'inscription   Statut Membre Dernière intervention   7
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Frappe Misere Messages postés 2702 Statut Membre 568
     
    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
  7. artamys Messages postés 122 Date d'inscription   Statut Membre Dernière intervention   7
     
    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
  8. Frappe Misere Messages postés 2702 Statut Membre 568
     
    juste pour info, il est possible d'associer une requete à un bouton.
    bonne journée.
    0