IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Ré-initialiser les numéro automatiques


Sujet :

Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 18
    Points : 12
    Points
    12
    Par défaut Ré-initialiser les numéro automatiques
    Re-bonjour,

    Pour mon projet je dois exporter des données (de ma BASE1) et à chaque fois il faut que je ré-initialise les numéros automatiques de 3 tables dans la base réceptrice (BASE2). J'ai vu sur le forum/FAQ qu'il faut effacer les enregistrements dans les tables et ensuite compacter la base.

    J'ai trouvé le code pour compacter une base, mais pour vider les tables c'est une autre histoire. Je trouve comment vider les tables de la base en cours grace à CurrentDB mais moi je dois faire cela sur une autre base...
    Alors il faudrai que je trouve un code dans ma BASE1 qui efface les table tbl1, tbl2 et tbl3 dans la BASE2. Ou alors que la BASE1 execute une requête supression dans la BASE2.


    Le code trouvé pour vider (et non pas supprimer!) les tables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function EffaceTBL()
    Dim tbl1 As TableDef
    Dim tbl2 as tableDef
    CurrentDb.TableDefs.Delete tbl1.Name
    CurrentDb.TableDefs.Delete tbl2.Name ' Mais moi je veux agir dans la BASE2 pas dans la courante
    End Function
    Le code pour ensuiter compacter la BASE2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub cmdCompacter()
    Dim sNomBase As String
    Dim sNomBaseTemp As String
     
        sNomBase = Me.CheminBD 'Lieu où est stoké le chemin de ma base
        sNomBaseTmp = Left(sNomBase, Len(sNomBase) - 4) 'enlever l'extension .mdb du fichier
        sNomBaseTmp = sNomBaseTmp & "TEMP.mdb" 'pareil que Replace(sNomBase,".mdb","TEMP.mdb")
        DBEngine.CompactDatabase sNomBase, sNomBaseTmp '1. Compactage dans une nouvelle base
        Kill sNomBase '2. Suppression de la base originale
        Name sNomBaseTmp As sNomBase '3. Renommer la base compactée avec le nom de la base originale
    End Sub
    Si quelqu'un a une idée je suis preneur ;-)
    Merci d'avance.

  2. #2
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    J'essaierai quelque chose du genre (pas testé):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim oDB as DAO.Database
     
    Set oDB = OpenDatabase(Me.CheminBD)
     
     
    oDB.Execute "DELETE * FROM tbl1"
    oDB.Execute "DELETE * FROM tbl2"
    ...
     
    oDB.close
    set oDB = nothing

  3. #3
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Au fait,

    le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function EffaceTBL()
    Dim tbl1 As TableDef
    Dim tbl2 as tableDef
    CurrentDb.TableDefs.Delete tbl1.Name
    CurrentDb.TableDefs.Delete tbl2.Name ' Mais moi je veux agir dans la BASE2 pas dans la courante
    End Function

    supprime des tables (ou des attaches) mais ne la vide pas !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 18
    Points : 12
    Points
    12
    Par défaut Et ca marche !
    Citation Envoyé par mout1234
    Au fait, le code supprime des tables (ou des attaches) mais ne la vide pas !
    heu...bah merci car c'est exactement ce que je voulais PAS faire (supprimer les tables - à cause de liens)!

    Citation Envoyé par mout1234
    J'essaierai quelque chose du genre (pas testé)........
    Merci bien pour ton aide le code fonctionne parfaitement! Cela semble si simple (quand c'est toi qui le dit!! )
    Mais une question : la base BASE2 est-elle vraiment ouverte ou l'ordinateur y accède seulement? Car si la base est très grosse cette opéaration sera longue...

    Pour complier le tout alors :

    Code pour ré-initialiser les numéros automatiques dans la table "table1" de la BASE2 depuis un formulaire dans BASE1 sur click du bouton BTNresetNumAuto ; chemin + nom de la base stocké dans une zone de texte nommé Me.CheminBD dans le même formulaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     
    Private Sub BtnResetNumAuto_Click()
    Call Reset
    Call CmdCompacter
    End Sub
     
     
    Sub Reset()
    Dim DB As DAO.Database
    Set DB = OpenDatabase(Me.CheminBD) ' Lieu où est enregistré le chemin de ma base par ex  c:\mabase\mabase.mdb
    DB.Execute "DELETE * FROM table1" 'Nom de la table à vider
    DB.Close
    Set DB = Nothing
    End Sub
     
     
    Sub cmdCompacter()
    Dim sNomBase As String
    Dim sNomBaseTemp As String
     
        sNomBase = Me.CheminBD ' = c:\mabase\mabase.mdb
        sNomBaseTmp = Left(sNomBase, Len(sNomBase) - 4) 'enlever l'extension .mdb du fichier => c:\mabase\mabase
        sNomBaseTmp = sNomBaseTmp & "TEMP.mdb" 'pareil que Replace(sNomBase,".mdb","TEMP.mdb")  => c:\mabase\mabaseTEMP.mdb
        DBEngine.CompactDatabase sNomBase, sNomBaseTmp '1. Compactage dans une nouvelle base
        Kill sNomBase '2. Suppression de la base originale
        Name sNomBaseTmp As sNomBase '3. Renommer la base compactée avec le nom de la base originale => c:\mabase\mabase.mdb
    End Sub

  5. #5
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Citation Envoyé par tintin0001
    la base BASE2 est-elle vraiment ouverte ou l'ordinateur y accède seulement? Car si la base est très grosse cette opéaration sera longue...
    La base est ouverte au sens DAO du terme, permettant une exploitation des données qu'elle contient.
    Pour ouvrir la base Access en tant qu'application Access; il faudrait lancer une nouvelle session d'Access, ce qui revient à lancer 2 fois Access.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Dim oAcc As Access.Application
        Set oAcc = New Access.Application
        oAcc.OpenCurrentDatabase (sBaseFullName)
        ...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Ah d'accord ! Merci pour l'info!
    Vu que la base est ouverte en DAO seulement l'opération est rapide c'est cool !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [OpenOffice][Tableur] Comment récupérer automatiquement les numéro de page
    Par fransix dans le forum OpenOffice & LibreOffice
    Réponses: 8
    Dernier message: 07/03/2013, 11h43
  2. Réponses: 4
    Dernier message: 30/01/2013, 09h05
  3. Réponses: 10
    Dernier message: 19/05/2004, 11h41
  4. Réponses: 4
    Dernier message: 16/03/2004, 18h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo