Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Runtime
Runtime Forum destiné à recevoir toutes vos questions concernant le Runtime (empaquetage, déploiement...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/12/2010, 16h29   #1
Invité de passage
 
Inscription : mars 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 26
Points : 3
Points : 3
Par défaut application s'appuyant sur une BD indépendante

Bonjour,
J'ai lu et relu le tuto "Comment déployer vos applications professionnelles développées avec Microsoft Access 2007 en incluant le Runtime" dans tous les sens et cherché un peu dans les forum, mais je ne trouve pas vraiment réponse à ma question.

Je voudrais développer une application (avec formulaires, requetes, etats) à partir d'une BD "type source". C'est-à-dire que je voudrais pouvoir installer cette appli sur n'importe quel poste possédant un BD de même nom et avec les mêmes tables que ma BD "type".
J'ai compris qu'il fallait que je lie les tables de ma BD type source à ma BD comprenant les etats, formulaires, etc de mon appli, et qu'ainsi je peux installer sur un autre poste mon appli mais uniquement si la BD sur le 2e poste se trouve exactement au même endroit; même chemin.

Ma question : n'est-il pas possible d'utiliser le chemin relatif ? ou bien de spécifier le chemin de la BD source (tables à lier) lors de l'installation ?
marinaetsonchat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 11h43   #2
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
Bonjour,

Si effectivement la base Frontale (application) est susceptible de voire ses tables dans une base de données présente dans des chemins différents, il faut que tu mettes en place un processus de rattachement dynamique avec une notion de "Première utilisation" qui oblige l'utilisateur à lier ses table lui-même la première fois qu'il ouvre son appli.
Bien entendu, le même processus s'exécutera à chaque utilisation et vérifiera la disponiblité des tables même si c'est pour la forme.

Non, il n'existe pas de notion de chemin relatif pour les tables liées.

Petite piste pour t'aider à développer ta routine :
Code :
Mid$(CurrentDB.TableDefs("Nom d'une table liée").Connect, 11)
Sinon tu oeux forcer les choses en configuarnt toi-même les chemins en dur de tels sorte à ce que à l'installation du package, le SETUP.EXE pose la Frontale ici et la Dorsale là...

par exemple
Frontal : C:\Applications\MarinaEtSonChat\Dorsale : C:\Applications\MarinaEtSonChat\Data

Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 14h17   #3
Invité de passage
 
Inscription : mars 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 26
Points : 3
Points : 3
La solution qui oblige l'utilisateur à lier ses table lui-même la première fois qu'il ouvre son appli me semble pas mal. Mais à quel endroit devrais-je mettre ce code ?
sur l'événement onLoad du 1er formulaire chargé à l'ouverture de l'appli ?
dans ma macro autoexec ?
marinaetsonchat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 14h56   #4
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
Load()...

Dans le formulaire qui fait office de SplashScreen, vs les applications Office.
Il est temporisé (5 secondes... ou le temps nécessaire à la définition de paramètres) puis il check les tables avec une fonction cummulative qui retourne un nombre dont la valeurs et connue et qui défini le nombre de table dont le nom est stocké dans une table LOCALE.
Tu peux checker chaque liaison pour chaque table liée par précaution mais, observant la situation de tes déploiments, il semble que si une table liée répond favorablement, on peut supposer que les autres aussi, si peu que l'utilisateur n'en ait pas supprimé. Il faut donc que tu empêche l'ouverture de l'application avec un AllowByPassKey à False.

Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 15h59   #5
Invité de passage
 
Inscription : mars 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 26
Points : 3
Points : 3
je vais tenter ... mais ...

Code :
Mid$(CurrentDB.TableDefs("Nom d'une table liée").Connect, 11)
c'est quoi Mid$ ? et pourquoi 11 ?
marinaetsonchat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 16h20   #6
Invité de passage
 
Inscription : mars 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 26
Points : 3
Points : 3
En fait je crois qu'il me faudrait qqch dans ce genre là :

Code :
1
2
3
4
5
6
Private Sub Form_Load()
    If CurrentDb.TableDefs(Article).Connect = False Then 'ne fonctionne pas
        chemin = InputBox("Chemin :")
        Application.OpenCurrentDatabase (chemin)
    End If
End Sub
sauf que ma 1e ligne est fausse, je ne sais pas comment tester la connexion.
marinaetsonchat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 17h10   #7
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
Bon, voici une fonction écrite sur le pouce pour te donner une idée...

Code :
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
29
30
31
32
33
Public Function IsCorrectlyLinked(ByVal LinkedTablename As String, ByRef Message As String) As Boolean
Dim strDatabaseFilename                                As String
Dim strConnect                                         As String
Dim SQL                                                As String
Dim RS                                                 As DAO.Recordset
    On Error GoTo IsCorrectlyLinked_Error
 
    '2 On vérifie que la table existe :
    Message = "La table n'exite pas dans dans cette application !!!" & vbCrLf & vbCrLf & "A mon avis, vous avez lancé la fonction avec un mauvais nom de table... Non ?"
    strDatabaseFilename = Mid$(CurrentDb.TableDefs(LinkedTablename).Connect, 11)
 
    '2 On vérifie que la base est physiquement là :
    If Dir(strDatabaseFilename, vbNormal) = vbNullString Then
        Err.Raise 53, "Vérification", " La base de données n'existe plus et, j'en suis sûr, elle était là, humm ya pas si longtemps !" & vbCrLf & vbCrLf & "Qu'avez-vous fait, hummm ???"
    End If
    '3 On essaye de lire la table (mais là on est pessimiste car bon,elle est là donc...
    SQL = "SELECT COUNT(*) FROM " & LinkedTablename
    'Si ça s'affecte, c'est que le table est là
    Message = "La table n'est plus liée dans l'application !!!" & vbCrLf & vbCrLf & "Je suis sûr qu'une grosse bêtise à été faite... Non ?"
    Set RS = CurrentDb.OpenRecordset(SQL, 2)
    IsCorrectlyLinked = True
    RS.Close
    On Error GoTo 0
IsCorrectlyLinked_Exit:
    Set RS = Nothing
    Exit Function
IsCorrectlyLinked_Error:
    IsCorrectlyLinked = False
    If Len(Err.Description) Then
        Message = Err.Description
    End If
    Resume IsCorrectlyLinked_Exit
End Function
que tu testes dans ton load comme suit :
Code :
1
2
3
4
5
6
7
8
Private Sub Form_Load()
 
Dim strMessage                                         As String
    If IsCorrectlyLinked(("Nom d'une table liée", strMessage) = False Then
        MsgBox strMessage, vbExclamation, "Oh, là là"
        'Application.Quit acQuitPrompt
    End If
End Sub
A peaufiner biensûr mais c'est une idée de départ...

Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 17h34   #8
Invité de passage
 
Inscription : mars 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 26
Points : 3
Points : 3
Code :
strDatabaseFilename = Mid$(CurrentDb.TableDefs(LinkedTablename).Connect, 11)
je procède par étape et déjà cette 1e ligne ne passe pas :
"erreur d'execution '3265'
element non trouvé dans cette collection"

c'est quoi cette fonction Mid avec un $ ?
marinaetsonchat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 09h13   #9
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
Mid renvoie un Variant
Mid$ renvoie un String

dans :
Code :
strDatabaseFilename = Mid$(CurrentDb.TableDefs(LinkedTablename).Connect, 11)
tu dois faire en sorte que LinkedTablename représente un nom d'une de tes tables liées...
L'erreur 3265 dit bien la vérité : la table que tu as passé n'existe pas dans ta base.

Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 15h14   #10
Invité de passage
 
Inscription : mars 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 26
Points : 3
Points : 3
Ca y est ca marche ! j'avais pas mis les guillemet autour du nom de ma table ...

Je mets le code pour ceux que ca peut intéresser (très simplifié car je n'ai pas besoin de faire bcp de verif, je voulais juste pouvoir avoir la main lors de l'install ou à la 1e utilisation pour spécifier le bon chemin de la BD)

Code :
1
2
3
4
5
6
7
Private Sub Form_Load() ' c'est mon formulaire principal ouvert au lancement
        strDatabaseFilename = Mid$(CurrentDb.TableDefs("Article").Connect, 11)
        If Dir(strDatabaseFilename, vbNormal) = vbNullString Then
             chemin = InputBox("Chemin :")
            Application.OpenCurrentDatabase (chemin)
        End If
End Sub
marinaetsonchat est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h00.


 
 
 
 
Partenaires

Hébergement Web