GNT sans publicité, site mobile, fonctionnalitées exclusives...

Attacher les tables dans une base frontale depuis une Base dorsale

Le
William Kameron
A partir de ma base de données, je voudrais créer par VBA tous les liens des
tables dans une base de donnée frontale:
J'ai esayé de modifier le code qui fait l'inverse que j'ai pris dans l'aide
d'access.

Mais depuis je suis bloqué au niveau de cette erreur :

3011
Le moteur de base de données Microsoft Jet n'a pas pu trouver l'objet
'Accréditations sur opérations de production'. Assurez-vous que l'objet
existe et que vous avez correctement saisi son nom et son chemin d'accès.

Voici du reste le code assoccié :

[CODE]
Function LierTablesDorsale(StrBaseFrontale As String) As Boolean
On Error GoTo Err_LierTablesDorsale
Dim strMotPasse As String
Dim strConnect As String
Dim strNomsTables() As String
Dim strTemp As String
Dim i As Integer
Dim oDb As DAO.Database
Dim oDbSource As DAO.Database
Dim oTbl As DAO.TableDef
Dim oTblSource As DAO.TableDef

strPass = "thanks"

'dans StrBaseFrontale on trouve le chemin de ma cible style "C:\test.mdb"
strConnect = "MS Access;pwd=" & strPass & ";DATABASE=" & StrBaseFrontale
Set oDb = DBEngine.OpenDatabase(StrBaseFrontale, dbDriverComplete,
False, strConnect)
Set oDbSource = CurrentDb

For Each oTblSource In oDbSource.TableDefs
If (oTblSource.Attributes And dbSystemObject) = 0 Then
strTemp = strTemp & oTblSource.Name & "|"
End If
Next
oDbSource.Close: Set oDbSource = Nothing
Debug.Print strTemp

strNomsTables = Split(Left(strTemp, Len(strTemp) - 1), "|")
For i = 0 To UBound(strNomsTables)
Debug.Print i, strNomsTables(i)

'Initialisation de Table def
Set oTbl = oDb.CreateTableDef(strNomsTables(i))
Debug.Print "Affectation OK"

'Conection à la Frontale
oTbl.Connect = strConnect
Debug.Print "Connection OK"

'Désignation de la table à attacher
oTbl.SourceTableName = strNomsTables(i)
Debug.Print "Désignation OK"

'Modification de Tabledefs et mise à jour de la définition
'C'est ici que cela coince !
' Le moteur de base de données Microsoft Jet n'a pas pu
trouver l'objet 'Nom_de_la_table'.
' Assurez-vous que l'objet existe et que vous avez
correctement saisi son nom et son chemin d'accès.
oDb.TableDefs.Append oTbl
Debug.Print "Definition OK"
Next i

oDb.TableDefs.Refresh

Exit_LierTablesDorsale:
Set oDbSource = Nothing
Set oTbl = Nothing
Set oDb = Nothing
Exit Function

Err_LierTablesDorsale:
Select Case Err.Number
Case 3012
Debug.Print Err.Number, Err.Description
Resume Next

Case Else
Debug.Print Err.Number, Err.Description
TraiteErreur Err.Number, "LierTablesDorsale :" & vbCr &
Err.Description
Resume Exit_LierTablesDorsale
End Select

End Function

[/CODE]

Merci pour toutes vos contributions.
Lire les 8 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
3stone
Le #16486961
Bonjour *aussi* !


Pour réattacher tes tables, tu peux utiliser ceci:
http://www.3stone.be/access/article...=fr&pg(


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)




"William Kameron"
|A partir de ma base de données, je voudrais créer par VBA tous les liens des
| tables dans une base de donnée frontale:
| J'ai esayé de modifier le code qui fait l'inverse que j'ai pris dans l'aide
| d'access.
|
| Mais depuis je suis bloqué au niveau de cette erreur :
|
| 3011
| Le moteur de base de données Microsoft Jet n'a pas pu trouver l'objet
| 'Accréditations sur opérations de production'. Assurez-vous que l'objet
| existe et que vous avez correctement saisi son nom et son chemin d'accès.
|
| Voici du reste le code assoccié :
|
| [CODE]
| Function LierTablesDorsale(StrBaseFrontale As String) As Boolean
| On Error GoTo Err_LierTablesDorsale
| Dim strMotPasse As String
| Dim strConnect As String
| Dim strNomsTables() As String
| Dim strTemp As String
| Dim i As Integer
| Dim oDb As DAO.Database
| Dim oDbSource As DAO.Database
| Dim oTbl As DAO.TableDef
| Dim oTblSource As DAO.TableDef
|
| strPass = "thanks"
|
| 'dans StrBaseFrontale on trouve le chemin de ma cible style "C:test.mdb"
| strConnect = "MS Access;pwd=" & strPass & ";DATABASE=" & StrBaseFrontale
| Set oDb = DBEngine.OpenDatabase(StrBaseFrontale, dbDriverComplete,
| False, strConnect)
| Set oDbSource = CurrentDb
|
| For Each oTblSource In oDbSource.TableDefs
| If (oTblSource.Attributes And dbSystemObject) = 0 Then
| strTemp = strTemp & oTblSource.Name & "|"
| End If
| Next
| oDbSource.Close: Set oDbSource = Nothing
| Debug.Print strTemp
|
| strNomsTables = Split(Left(strTemp, Len(strTemp) - 1), "|")
| For i = 0 To UBound(strNomsTables)
| Debug.Print i, strNomsTables(i)
|
| 'Initialisation de Table def
| Set oTbl = oDb.CreateTableDef(strNomsTables(i))
| Debug.Print "Affectation OK"
|
| 'Conection à la Frontale
| oTbl.Connect = strConnect
| Debug.Print "Connection OK"
|
| 'Désignation de la table à attacher
| oTbl.SourceTableName = strNomsTables(i)
| Debug.Print "Désignation OK"
|
| 'Modification de Tabledefs et mise à jour de la définition
| 'C'est ici que cela coince !
| ' Le moteur de base de données Microsoft Jet n'a pas pu
| trouver l'objet 'Nom_de_la_table'.
| ' Assurez-vous que l'objet existe et que vous avez
| correctement saisi son nom et son chemin d'accès.
| oDb.TableDefs.Append oTbl
| Debug.Print "Definition OK"
| Next i
|
| oDb.TableDefs.Refresh
|
| Exit_LierTablesDorsale:
| Set oDbSource = Nothing
| Set oTbl = Nothing
| Set oDb = Nothing
| Exit Function
|
| Err_LierTablesDorsale:
| Select Case Err.Number
| Case 3012
| Debug.Print Err.Number, Err.Description
| Resume Next
|
| Case Else
| Debug.Print Err.Number, Err.Description
| TraiteErreur Err.Number, "LierTablesDorsale :" & vbCr &
| Err.Description
| Resume Exit_LierTablesDorsale
| End Select
|
| End Function
|
| [/CODE]
|
| Merci pour toutes vos contributions.
|
William Kameron
Le #16488251
***** BONJOUR A TOUS ****
Merci 3stone !
Où a t'on souvent la tête quand on a un problème ?

Je voudrais apporter une précision :

Le but de ma procédure est de créer les liens dans la frontale en étant dans
la dorsale. "Créer les liens à distance" puis, plus tard vérifier leur
effectivité à l'ouverture de la base frontale.
De la frontale, aucun problème puisque la procédure origale récupérée dans
l'aide fonctionne bien.
Pour ta procédure 3stone, je l'incrit tout de suite dans le autoxec de ma
base frontale puisque tu confirmes qu'elle est la meilleure et la plus rapide.

Merci encore.

"3stone" a écrit :

Bonjour *aussi* !


Pour réattacher tes tables, tu peux utiliser ceci:
http://www.3stone.be/access/article...=fr&pg(


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)




"William Kameron"
|A partir de ma base de données, je voudrais créer par VBA tous les liens des
| tables dans une base de donnée frontale:
| J'ai esayé de modifier le code qui fait l'inverse que j'ai pris dans l'aide
| d'access.
|
| Mais depuis je suis bloqué au niveau de cette erreur :
|
| 3011
| Le moteur de base de données Microsoft Jet n'a pas pu trouver l'objet
| 'Accréditations sur opérations de production'. Assurez-vous que l'objet
| existe et que vous avez correctement saisi son nom et son chemin d'accès.
|
| Voici du reste le code assoccié :
|
| [CODE]
| Function LierTablesDorsale(StrBaseFrontale As String) As Boolean
| On Error GoTo Err_LierTablesDorsale
| Dim strMotPasse As String
| Dim strConnect As String
| Dim strNomsTables() As String
| Dim strTemp As String
| Dim i As Integer
| Dim oDb As DAO.Database
| Dim oDbSource As DAO.Database
| Dim oTbl As DAO.TableDef
| Dim oTblSource As DAO.TableDef
|
| strPass = "thanks"
|
| 'dans StrBaseFrontale on trouve le chemin de ma cible style "C:test.mdb"
| strConnect = "MS Access;pwd=" & strPass & ";DATABASE=" & StrBaseFrontale
| Set oDb = DBEngine.OpenDatabase(StrBaseFrontale, dbDriverComplete,
| False, strConnect)
| Set oDbSource = CurrentDb
|
| For Each oTblSource In oDbSource.TableDefs
| If (oTblSource.Attributes And dbSystemObject) = 0 Then
| strTemp = strTemp & oTblSource.Name & "|"
| End If
| Next
| oDbSource.Close: Set oDbSource = Nothing
| Debug.Print strTemp
|
| strNomsTables = Split(Left(strTemp, Len(strTemp) - 1), "|")
| For i = 0 To UBound(strNomsTables)
| Debug.Print i, strNomsTables(i)
|
| 'Initialisation de Table def
| Set oTbl = oDb.CreateTableDef(strNomsTables(i))
| Debug.Print "Affectation OK"
|
| 'Conection à la Frontale
| oTbl.Connect = strConnect
| Debug.Print "Connection OK"
|
| 'Désignation de la table à attacher
| oTbl.SourceTableName = strNomsTables(i)
| Debug.Print "Désignation OK"
|
| 'Modification de Tabledefs et mise à jour de la définition
| 'C'est ici que cela coince !
| ' Le moteur de base de données Microsoft Jet n'a pas pu
| trouver l'objet 'Nom_de_la_table'.
| ' Assurez-vous que l'objet existe et que vous avez
| correctement saisi son nom et son chemin d'accès.
| oDb.TableDefs.Append oTbl
| Debug.Print "Definition OK"
| Next i
|
| oDb.TableDefs.Refresh
|
| Exit_LierTablesDorsale:
| Set oDbSource = Nothing
| Set oTbl = Nothing
| Set oDb = Nothing
| Exit Function
|
| Err_LierTablesDorsale:
| Select Case Err.Number
| Case 3012
| Debug.Print Err.Number, Err.Description
| Resume Next
|
| Case Else
| Debug.Print Err.Number, Err.Description
| TraiteErreur Err.Number, "LierTablesDorsale :" & vbCr &
| Err.Description
| Resume Exit_LierTablesDorsale
| End Select
|
| End Function
|
| [/CODE]
|
| Merci pour toutes vos contributions.
|




William Kameron
Le #16488241
***** BONJOUR A TOUS ****
Merci 3stone !
Où a t'on souvent la tête quand on a un problème ?

Je voudrais apporter une précision :

Le but de ma procédure est de créer les liens dans la frontale en étant dans
la dorsale. "Créer les liens à distance" puis, plus tard vérifier leur
effectivité à l'ouverture de la base frontale.
De la frontale, aucun problème puisque la procédure origale récupérée dans
l'aide fonctionne bien.
Pour ta procédure 3stone, je l'incrit tout de suite dans le autoxec de ma
base frontale puisque tu confirmes qu'elle est la meilleure et la plus rapide.

Merci encore.

"3stone" a écrit :

Bonjour *aussi* !


Pour réattacher tes tables, tu peux utiliser ceci:
http://www.3stone.be/access/article...=fr&pg(


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)




"William Kameron"
|A partir de ma base de données, je voudrais créer par VBA tous les liens des
| tables dans une base de donnée frontale:
| J'ai esayé de modifier le code qui fait l'inverse que j'ai pris dans l'aide
| d'access.
|
| Mais depuis je suis bloqué au niveau de cette erreur :
|
| 3011
| Le moteur de base de données Microsoft Jet n'a pas pu trouver l'objet
| 'Accréditations sur opérations de production'. Assurez-vous que l'objet
| existe et que vous avez correctement saisi son nom et son chemin d'accès.
|
| Voici du reste le code assoccié :
|
| [CODE]
| Function LierTablesDorsale(StrBaseFrontale As String) As Boolean
| On Error GoTo Err_LierTablesDorsale
| Dim strMotPasse As String
| Dim strConnect As String
| Dim strNomsTables() As String
| Dim strTemp As String
| Dim i As Integer
| Dim oDb As DAO.Database
| Dim oDbSource As DAO.Database
| Dim oTbl As DAO.TableDef
| Dim oTblSource As DAO.TableDef
|
| strPass = "thanks"
|
| 'dans StrBaseFrontale on trouve le chemin de ma cible style "C:test.mdb"
| strConnect = "MS Access;pwd=" & strPass & ";DATABASE=" & StrBaseFrontale
| Set oDb = DBEngine.OpenDatabase(StrBaseFrontale, dbDriverComplete,
| False, strConnect)
| Set oDbSource = CurrentDb
|
| For Each oTblSource In oDbSource.TableDefs
| If (oTblSource.Attributes And dbSystemObject) = 0 Then
| strTemp = strTemp & oTblSource.Name & "|"
| End If
| Next
| oDbSource.Close: Set oDbSource = Nothing
| Debug.Print strTemp
|
| strNomsTables = Split(Left(strTemp, Len(strTemp) - 1), "|")
| For i = 0 To UBound(strNomsTables)
| Debug.Print i, strNomsTables(i)
|
| 'Initialisation de Table def
| Set oTbl = oDb.CreateTableDef(strNomsTables(i))
| Debug.Print "Affectation OK"
|
| 'Conection à la Frontale
| oTbl.Connect = strConnect
| Debug.Print "Connection OK"
|
| 'Désignation de la table à attacher
| oTbl.SourceTableName = strNomsTables(i)
| Debug.Print "Désignation OK"
|
| 'Modification de Tabledefs et mise à jour de la définition
| 'C'est ici que cela coince !
| ' Le moteur de base de données Microsoft Jet n'a pas pu
| trouver l'objet 'Nom_de_la_table'.
| ' Assurez-vous que l'objet existe et que vous avez
| correctement saisi son nom et son chemin d'accès.
| oDb.TableDefs.Append oTbl
| Debug.Print "Definition OK"
| Next i
|
| oDb.TableDefs.Refresh
|
| Exit_LierTablesDorsale:
| Set oDbSource = Nothing
| Set oTbl = Nothing
| Set oDb = Nothing
| Exit Function
|
| Err_LierTablesDorsale:
| Select Case Err.Number
| Case 3012
| Debug.Print Err.Number, Err.Description
| Resume Next
|
| Case Else
| Debug.Print Err.Number, Err.Description
| TraiteErreur Err.Number, "LierTablesDorsale :" & vbCr &
| Err.Description
| Resume Exit_LierTablesDorsale
| End Select
|
| End Function
|
| [/CODE]
|
| Merci pour toutes vos contributions.
|




William Kameron
Le #16489021
RE-BONJOUR A TOUS

En fait, je voudrais réaliser par cette fonction, l'équivalent de
"fractionner une base de données" sauf qu'au final, je souhaiterais trier en
sous ensemble ce qui doit être envoyé dans la base frontale.

Cela pourrait me permettre de créer une base frontale différente pour chacun
des modules de l'application du style : Comptabilité, Editions, etc.

Merci d'avance.


"William Kameron" a écrit :

***** BONJOUR A TOUS ****
Merci 3stone !
Où a t'on souvent la tête quand on a un problème ?

Je voudrais apporter une précision :

Le but de ma procédure est de créer les liens dans la frontale en étant dans
la dorsale. "Créer les liens à distance" puis, plus tard vérifier leur
effectivité à l'ouverture de la base frontale.
De la frontale, aucun problème puisque la procédure origale récupérée dans
l'aide fonctionne bien.
Pour ta procédure 3stone, je l'incrit tout de suite dans le autoxec de ma
base frontale puisque tu confirmes qu'elle est la meilleure et la plus rapide.

Merci encore.

"3stone" a écrit :

> Bonjour *aussi* !
>
>
> Pour réattacher tes tables, tu peux utiliser ceci:
> http://www.3stone.be/access/article...=fr&pg(
>
>
> --
> A+
> Pierre (3stone) Access MVP
> Perso: http://www.3stone.be/
> MPFA: http://www.mpfa.info/ (infos générales)
>
>
>
>
> "William Kameron"
> |A partir de ma base de données, je voudrais créer par VBA tous les liens des
> | tables dans une base de donnée frontale:
> | J'ai esayé de modifier le code qui fait l'inverse que j'ai pris dans l'aide
> | d'access.
> |
> | Mais depuis je suis bloqué au niveau de cette erreur :
> |
> | 3011
> | Le moteur de base de données Microsoft Jet n'a pas pu trouver l'objet
> | 'Accréditations sur opérations de production'. Assurez-vous que l'objet
> | existe et que vous avez correctement saisi son nom et son chemin d'accès.
> |
> | Voici du reste le code assoccié :
> |
> | [CODE]
> | Function LierTablesDorsale(StrBaseFrontale As String) As Boolean
> | On Error GoTo Err_LierTablesDorsale
> | Dim strMotPasse As String
> | Dim strConnect As String
> | Dim strNomsTables() As String
> | Dim strTemp As String
> | Dim i As Integer
> | Dim oDb As DAO.Database
> | Dim oDbSource As DAO.Database
> | Dim oTbl As DAO.TableDef
> | Dim oTblSource As DAO.TableDef
> |
> | strPass = "thanks"
> |
> | 'dans StrBaseFrontale on trouve le chemin de ma cible style "C:test.mdb"
> | strConnect = "MS Access;pwd=" & strPass & ";DATABASE=" & StrBaseFrontale
> | Set oDb = DBEngine.OpenDatabase(StrBaseFrontale, dbDriverComplete,
> | False, strConnect)
> | Set oDbSource = CurrentDb
> |
> | For Each oTblSource In oDbSource.TableDefs
> | If (oTblSource.Attributes And dbSystemObject) = 0 Then
> | strTemp = strTemp & oTblSource.Name & "|"
> | End If
> | Next
> | oDbSource.Close: Set oDbSource = Nothing
> | Debug.Print strTemp
> |
> | strNomsTables = Split(Left(strTemp, Len(strTemp) - 1), "|")
> | For i = 0 To UBound(strNomsTables)
> | Debug.Print i, strNomsTables(i)
> |
> | 'Initialisation de Table def
> | Set oTbl = oDb.CreateTableDef(strNomsTables(i))
> | Debug.Print "Affectation OK"
> |
> | 'Conection à la Frontale
> | oTbl.Connect = strConnect
> | Debug.Print "Connection OK"
> |
> | 'Désignation de la table à attacher
> | oTbl.SourceTableName = strNomsTables(i)
> | Debug.Print "Désignation OK"
> |
> | 'Modification de Tabledefs et mise à jour de la définition
> | 'C'est ici que cela coince !
> | ' Le moteur de base de données Microsoft Jet n'a pas pu
> | trouver l'objet 'Nom_de_la_table'.
> | ' Assurez-vous que l'objet existe et que vous avez
> | correctement saisi son nom et son chemin d'accès.
> | oDb.TableDefs.Append oTbl
> | Debug.Print "Definition OK"
> | Next i
> |
> | oDb.TableDefs.Refresh
> |
> | Exit_LierTablesDorsale:
> | Set oDbSource = Nothing
> | Set oTbl = Nothing
> | Set oDb = Nothing
> | Exit Function
> |
> | Err_LierTablesDorsale:
> | Select Case Err.Number
> | Case 3012
> | Debug.Print Err.Number, Err.Description
> | Resume Next
> |
> | Case Else
> | Debug.Print Err.Number, Err.Description
> | TraiteErreur Err.Number, "LierTablesDorsale :" & vbCr &
> | Err.Description
> | Resume Exit_LierTablesDorsale
> | End Select
> |
> | End Function
> |
> | [/CODE]
> |
> | Merci pour toutes vos contributions.
> |
>
>


3stone
Le #16496321
Salut,

"William Kameron"
| En fait, je voudrais réaliser par cette fonction, l'équivalent de
| "fractionner une base de données" sauf qu'au final, je souhaiterais trier en
| sous ensemble ce qui doit être envoyé dans la base frontale.
|
| Cela pourrait me permettre de créer une base frontale différente pour chacun
| des modules de l'application du style : Comptabilité, Editions, etc.


Perso, il ne m'est jamais venu à l'idée de me placer dans la dorsale
pour lier des tables ;-))

Quant à "programmer" un fractionnement frontale/dorsale ou la frontale
aurait un contenu "à la demande", me laisse perplexe...

Tu peux avoir raisonnablement deux ou trois variante d'une frontale.

Au départ d'une frontale complète, tu élimines les éventuels formulaires
et tables(liées) non désirés et le plus gros est fait.... tu crées ensuite les
copies selon les destinataires.
Avec le code indiqué, chacun pourra se relier à "ses" tables de la dorsale.

Jusqu'à Access 2003, il aurait fallu passer plus simplement par la sécurité
au niveau utilisateur pour fixer ces droits réduits... mais...

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Publicité
Suivre les réponses
Poster une réponse
Anonyme