2010-05-21 2 views
2

J'ai créé un module dans Access 2007 qui mettra à jour les tables liées, mais je voulais exécuter ce module depuis vb6. J'ai essayé ce code de Microsoft, mais cela n'a pas fonctionné.Comment exécuter un module Access 2007 dans VB6?

 Sub AccessTest1() 
     Dim A As Object 

     Set A = CreateObject("Access.Application") 
     A.Visible = False 

     A.OpenCurrentDatabase (App.Path & "/DataBase/acc.accdb") 

     A.DoCmd.RunMacro "RefreshLinks" 

    End Sub 

Ce que je vise à faire, est de permettre à mon programme de mettre à jour toutes les tables liées à de nouveaux liens, dans le cas où le programme a été utilisé sur un autre ordinateur

Si vous voulez jeter un oeil au programme de module, la voici:

Sub CreateLinkedJetTable() 
Dim cat As ADOX.Catalog 
Dim tbl As ADOX.Table 

Set cat = New ADOX.Catalog 

' Open the catalog. 
cat.ActiveConnection = CurrentProject.Connection 

Set tbl = New ADOX.Table 

' Create the new table. 
tbl.Name = "Companies" 
Set tbl.ParentCatalog = cat 

' Set the properties to create the link. 
tbl.Properties("Jet OLEDB:Link Datasource") = CurrentProject.Path & "/db3.mdb" 
tbl.Properties("Jet OLEDB:Remote Table Name") = "Companies" 
tbl.Properties("Jet OLEDB:Create Link") = True 

' To link a table with a database password set the Link Provider String 
' tbl.Properties("Jet OLEDB:Link Provider String") = "MS Access;PWD=Admin;" 

' Append the table to the tables collection. 
cat.Tables.Append tbl 
Set cat = Nothing 

End Sub 

Sub RefreshLinks() 
Dim cat As ADOX.Catalog 
Dim tbl As ADOX.Table 

Set cat = New ADOX.Catalog 

' Open the catalog. 
cat.ActiveConnection = CurrentProject.Connection 

Set tbl = New ADOX.Table 

For Each tbl In cat.Tables 
' Verify that the table is a linked table. 
    If tbl.Type = "LINK" Then 
     tbl.Properties("Jet OLEDB:Link Datasource") = CurrentProject.Path & "/db3.mdb" 
' To refresh a linked table with a database password set the Link Provider String 
'tbl.Properties("Jet OLEDB:Link Provider String") = "MS Access;PWD=Admin;" 
    End If 
Next 
End Sub 
+0

Comment cela ne fonctionnait-il pas? Sans cela, toute réponse est juste une supposition. – Corin

+0

Avez-vous une macro nommée "RefreshLinks"? –

+0

@ David-W-Fenton Après une longue période de recherche, j'ai découvert que je n'ai pas un marco et pour obtenir le marco je devais appeler la fonction cette question est résolue – Mahmoud

Répondre

0

l'erreur ici est que toutes les fonctions sont sous-marins, pour faire fonctionner macro je dois faire soit l'un des

C suivant hangement chaque sub en Public Function ou créer une fonction qui appelle à la fois par exemple sous

public function Refresh() 
    RefreshLinked 
end Function` 

puis créer un Marco et en action chercher le code Run, et rechercher la fonction et tout fonctionne bien bien

Merci personnes