none
Incapable d'ouvrir fichier Access à partir des front-end copiés RRS feed

  • Question

  • Salut! Je viens de faire un split de ma bd access 2007 et suis capable d'ouvrir mon application à partir du front-end à partir duquel j'ai fais le split. Cependant, si je copie ce front-end sur d'autres ordi, l'application ne veut pas s'ouvrir à partir de ces autres ordi. Est-ce que quelqu'un peut m'aider? Merci.
    vendredi 26 mars 2010 01:30

Toutes les réponses

  • Bonjour,

    Un peu vague comme explication.

    Un problème d'attache peut-être ?

    Lorsqu'on transfère un front-end sur d'autres machines il faut souvent refaire l'attache des tables.

    Le mieux est de faire une procédure d'attachement qui se lance au démarrage.

    Cordialement,


    Visitez mes sites : http://2gm.free.fr | http://loufab.developpez.com
    mercredi 31 mars 2010 19:24
  • J'ai refais un split et j'ai copié le front-end avant de faire les attaches et ça a fonctionné car au départ, j'avais fais le split puis refait les attaches et après fait la copie. Cependant, je trouve la procédure d'attache au démarrage assez intéressante. Avez-vous plus d'info à ce sujet. Merci de l'aide.
    mercredi 31 mars 2010 22:15
  • Voici le code à mettre dans un module
    il faut régler les constantes avec le nom des tables et le nom du fichier
    et appelé simplement le pgAttache au démarrage de l'application. Dans un splash screen par exemple.
    Pour le spalsh screen voir sur l'un de mes sites :
    http://loufab.develeoppez.com
    http://2gm.free.fr
    Global Const strlstTable As String = "Table1;Table2;Table3"
    Global Const strFichierData As String = "FichierEndData.accdb"
    
    Sub pgAttache()
    ' vérifie l'attachement
    ' et attache le cas échéant
        On Error GoTo err_demarrage
    
        Dim db As Database
        Dim rst As Recordset        ' pour le test d'attache
        Dim lstTable() As String    ' contient les tables
        Dim i As Integer            ' the Compteur
    
        lstTable = Split(strlstTable, ";")      ' la liste des tables à traiter
    
        Set db = DBEngine(0)(0)
        For i = 0 To UBound(lstTable)           ' liste les tables et tente l'ouverture
            Set rst = db.OpenRecordset(lstTable(i), dbOpenSnapshot)
            rst.Close
            Set rst = Nothing
        Next
    
        CurrentDb.TableDefs.Refresh
    
        Exit Sub
    
    err_demarrage:
        Dim tbl As TableDef
        Dim strChemin As String
    
        If Not FichierExiste(strChemin) Then
            If Not FichierExiste(CurrentProject.Path & "\" & strFichierData) Then
                strChemin = fIndiqueFichier(CurrentProject.Path & "\" & strFichierData)
            Else
                strChemin = CurrentProject.Path & "\" & strFichierData
            End If
        End If
    
        If Err.Number = 3078 Then  ' ne trouve pas la table
            Set tbl = db.CreateTableDef(lstTable(i))
            tbl.Connect = ";DATABASE=" & strChemin
            tbl.SourceTableName = lstTable(i)
            db.TableDefs.Append tbl
            db.TableDefs(tbl.Name).RefreshLink
            Resume
        End If
    
        For Each tbl In db.TableDefs
            If tbl.Attributes = dbAttachedTable Then
                tbl.Connect = ";DATABASE=" & strChemin
                db.TableDefs(tbl.Name).RefreshLink
            End If
        Next
        Resume
    End Sub
    
    Function FichierExiste(vlChemin As String)
    ' teste l'existence d'un fichier
    On Error GoTo ErrFichierExiste
    
    FichierExiste = False
    
    If GetAttr(vlChemin) Then
       FichierExiste = True
    End If
    
    Exit Function
    
    ErrFichierExiste:
    If Err.Number = 52 Or Err.Number = 53 Then Exit Function
    
    End Function
    
    Public Function fOuvreFichier(msoPathFileName As String, msoType As MsoFileDialogType, _
                                  msoMultiSel As Boolean, ByRef tblResult() As Variant, _
                                  Optional strtitre As String = "Sélectionner un fichier") As Boolean
    ' Ouvre la fenêtre Ouvrefichier/répertoire
        Dim fdg As FileDialog
        Dim vrtSelectedItem As Variant
        Dim i As Integer
    
        'Cree un filedialog
        Set fdg = Application.FileDialog(msoType)
    
        With fdg
            .AllowMultiSelect = False
            .ButtonName = "Selectionner"
            .Title = strtitre
            .InitialFileName = msoPathFileName
            If .Show = True Then   'Affiche le dlgbox
                ' traite chaque item
                ReDim tblResult(.SelectedItems.Count)
                For Each vrtSelectedItem In .SelectedItems
                    tblResult(i) = vrtSelectedItem
                    i = i + 1
                    fOuvreFichier = True
                Next vrtSelectedItem
            Else    ' Cancel.
                fOuvreFichier = False
            End If
        End With
        Set fdg = Nothing
    
    End Function
    

    Comme pour beaucoup de cas dans ACCESS ce méthode n'est pas unique. On peut en utiliser d'autres.

    Cordialement,


    Visitez mes sites : http://2gm.free.fr | http://loufab.developpez.com
    jeudi 1 avril 2010 07:30