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.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
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/articles.php?lng=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/articles.php?lng=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/articles.php?lng=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/articles.php?lng=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)
William Kameron
Le #16496801
Bonjour 3stone.

STP, As-tu eu la même erreur ? Il y a t'il un moyen de contourner cela ?

En fait, le problème c'est que, j'ai developpé une application entière. Avec
tous ses éléments, menus, formulaires, chacun d'eux contenant evidemment ses
propres outils. Ainsi de suite.

Je voudrais donc la fractionner en plusieurs sous composantes. C'est à dire,
ne envoyer pour la comptabilité, le service commercial, etc., que ce qui est
utile.

J'ai donc écrit dans un module du procédures qui permettront, partant du
Forumulaire Principal utile au service, d'extraire de l'application entière
tous (TOUS) les objets de l'appli qui doivent figurer sur cette [SOUS] base
frontale. Ceci devrait même permettre la détection des appels de requete, de
tables, de formulaires et d'états avec leur sous états.
Comme je veux réaliser cette opération en un seul geste, je bute sur le fait
qu'il faut exécuter ton code que tu m'as envoyé ou celui que j'ai récupéré de
l'aide à distance qui fonctionnent d'ailleurs bien mais dans le sens opposé.

Je ne suis pas puriste, mais comme l'appli est encore en cours de
developpement, ce geste sera repeté plusieurs dixaines de fois je pense que
le jeu en vaut la chandelle.

Le gros du boulot est fait. Il reste ce "petit" bug (hé hé hé !!!) et puis
je n'ai pas encore exploré le code VBA des modules des formulaires. Je suis
dessus actuellement.

Il y a un avantage : Avec un clic, on recréé TOUT... TOUS, avec les
dernières versions des éléments.

Merci encore aux autres.

"3stone" a écrit :

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)





3stone
Le #16496941
Salut,

"William Kameron"
|
| STP, As-tu eu la même erreur ? Il y a t'il un moyen de contourner cela ?


Tu parles de :
"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."

?

Cela ne me dit rien de spécial...
Tu obtiens cela sur quelle version d'OS et d'Access ?



|
| Il y a un avantage : Avec un clic, on recréé TOUT... TOUS, avec les
| dernières versions des éléments.


Et bien, bon courrage pour la suite ;-)

Car lorsque je vois
'dans StrBaseFrontale on trouve le chemin de ma cible style "C:test.mdb"

donc, des chemins "en dur", cela me donne... des raideurs :o)

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

Mille excuses pour cet oubli...

- Access 2003
- Win Xp

Cela n'a rien a voir avec la machine. le résultat est le même sur mon
portable et mon poste de bureau. Ni même la base d'ailleurs.

Pourais-tu tester ce bout de code dans la base 'Comptoir.mdb' par exemple ou
"Grand livre.mdb"

Pour le chemin il provient d'une série d'instructions dans une autre fonction

strDbPath = CurrentDb.Name
StrBaseFrontale = Left(strDbPath, Len(strDbPath) - 4) & " " &
StrChildbaseName
DBEngine.CreateDatabase StrBaseFrontale , dbLangGeneral

Après cela j'exporte tout ce qui peut l'être
Puis il me faut attacher les tables...

J'ai revu le code pour éviter aux testeur des erreurs.

[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, strDbPath 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"
strDbPath = CurrentDb.Name
StrBaseFrontale = Left(strDbPath, Len(strDbPath) - 4) & " " &
StrChildbaseName
DBEngine.CreateDatabase StrBaseFrontale, dbLangGeneral

'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

'Récupère toutes les table de la base
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
Resume Exit_LierTablesDorsale
End Select

End Function
[/CODE]

Il faut copier et coller dans un nouveau module d'une base exemple et lancer
par la commande :

LierTablesDorsale "Fils"

Le résultat apparait dans la zone d'exécution.



"3stone" a écrit :

Salut,

"William Kameron"
|
| STP, As-tu eu la même erreur ? Il y a t'il un moyen de contourner cela ?


Tu parles de :
"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."

?

Cela ne me dit rien de spécial...
Tu obtiens cela sur quelle version d'OS et d'Access ?



|
| Il y a un avantage : Avec un clic, on recréé TOUT... TOUS, avec les
| dernières versions des éléments.


Et bien, bon courrage pour la suite ;-)

Car lorsque je vois
'dans StrBaseFrontale on trouve le chemin de ma cible style "C:test.mdb"

donc, des chemins "en dur", cela me donne... des raideurs :o)

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





Publicité
Poster une réponse
Anonyme