Débutant en AutoIt, je cherche à migrer mes précédents codes VB / VBA en AutoIt. J'ai un pb (générique) pour lier une table d'une base mdb (Access) dans une autre base mdb.
Je plante systématiquement sur la ligne $adox_catalog.Tables.Append($adox_table) .
J'ai déjà cherché une solution dans les forums Français / Américain / Allemand et Google sans succès. Les UDF trouvés (Access.au3 et AccessCom.au3) ne contiennent pas de code pour effectuer des LinkTables.
Code : Tout sélectionner
; ----------------------------------------------------------------------------
; AutoIt Version : 3.3.0.0
; Auteur: pw93 at live point fr
; Date : 2009-05-22
; Fonction du Script :
; Lier la table Access ZIPTPW01.ZIPTPW01 en tant que CUSTOMER.ZIPTPW01
; --> Se plante sur la ligne : $adox_catalog.Tables.Append($adox_table)
;
; err.description : COM Erreur 80020009 Multiple-step OLE DB operation generated errors.
; err.source : Microsoft JET Database Engine
; err.windescription : .... des caractères en chinois....
; ----------------------------------------------------------------------------
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
Local $CustomerMdbPath = "c:\$user\$user"
Local $CustomerMdbName = "CUSTOMER"
Local $CustomerTbName = "CLITPW00"
Local $ZipfooMdbPath = "c:\$user\$user"
Local $ZipfooMdbName = "ZIPTPW01"
Local $ZipfooTbName = "ZIPTPW01"
_TestAddLinkedTable($ZipfooMdbPath, $ZipfooMdbName, $ZipfooTbName, $CustomerMdbPath, $CustomerMdbName, "ZIPTPW01")
Exit
;--------------------------------------- Functions ---------------------------
Func _TestAddLinkedTable($LinkedMdbPath, $LinkedMdbName, $LinkedTbName, $MdbPath, $MdbName, $TbName)
Dim $conn
$conn = ObjCreate("ADODB.Connection")
$conn.Open( _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & $MdbPath & "\" & $MdbName & ".mdb" & ";" & _
"Jet OLEDB:Engine Type=5;")
Dim $adox_catalog
$adox_catalog = ObjCreate("ADOX.Catalog")
$adox_catalog.ActiveConnection() = $conn
Dim $adox_table
$adox_table = ObjCreate("ADOX.Table")
With $adox_table
.Name = $TbName
.ParentCatalog = $adox_catalog
.Properties("Jet OLEDB:Link Datasource").Value = $LinkedMdbPath & "\" & $LinkedMdbName & ".mdb"
.Properties("Jet OLEDB:Remote Table Name").Value = $LinkedTbName
.Properties("Jet OLEDB:Create Link").Value = True
EndWith
[color=#FF0000]$adox_catalog.Tables.Append($adox_table)[/color]
$adox_table = ''
$adox_catalog = ''
$conn.Close
$conn = ''
EndFunc ;==>_TestAddLinkedTable
Code : Tout sélectionner
Sub AddLinkedTable(ByVal LinkedMdbPath, ByVal LinkedMdbName, ByVal LinkedTbName, ByVal MdbPath, ByVal MdbName, ByVal TbName)
Dim cnn
Set cnn = CreateObject("ADODB.Connection")
cnn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & MdbPath & "\" & MdbName & ".mdb" & ";" & _
"Jet OLEDB:Engine Type=5;")
Dim adox_catalog
Set adox_catalog=CreateObject("ADOX.Catalog")
Dim adox_table
Set adox_table=CreateObject("ADOX.Table")
adox_catalog.ActiveConnection() = cnn
With adox_table
.Name = TbName
.ParentCatalog = adox_catalog
.Properties("Jet OLEDB:Link Datasource").Value = LinkedMdbPath & "\" & LinkedMdbName & ".mdb"
.Properties("Jet OLEDB:Remote Table Name").Value = LinkedTbName
.Properties("Jet OLEDB:Create Link").Value = True
End With
adox_catalog.Tables.Append adox_table
Set adox_table = Nothing
Set adox_catalog = Nothing
cnn.Close
Set cnn = Nothing
End Sub
1er test) en utilisant le DAO ---> Celà fonctionne avec le code ci-dessous !
Code : Tout sélectionner
Func _DAOTestAddLinkedTable($LinkedMdbPath, $LinkedMdbName, $LinkedTbName, $MdbPath, $MdbName, $TbName)
Local $engine = ObjCreate("DAO.DBEngine.36")
Local $dbs = $engine.OpenDatabase($MdbPath & "\" & $MdbName & ".mdb", False, False)
Local $tdfLnked = ObjCreate("DAO.TableDef.36")
$tdfLinked = $dbs.CreateTableDef($TbName)
$tdfLinked.Connect = ";DATABASE=" & $LinkedMdbPath & "\" & $LinkedMdbName & ".mdb"
$tdfLinked.SourceTableName = $LinkedTbName
$dbs.TableDefs.Append($tdfLinked)
$dbs.Close
$tdfLinked = ""
$dbs = ""
$engine = ""
EndFunc ;==>_DAOTestAddLinkedTable Code : Tout sélectionner
Func _TestCreateLocalTable($MdbPath, $MdbName)
Local $adox_table = ObjCreate("ADOX.Table")
With $adox_table
.Name = "TESTNAME"
.Columns.Append("id", 3)
.Columns.Append("surname", 202, 30)
.Columns.Append("firstname", 202, 30)
.Keys.Append("pk_name_id", 1, "id")
EndWith
Local $adox_catalog = ObjCreate("ADOX.Catalog")
With $adox_catalog
.ActiveConnection() = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & $MdbPath & "\" & $MdbName & ".mdb" & ";" & _
"Jet OLEDB:Engine Type=5;"
.Tables.Append($adox_table)
EndWith
$adox_catalog = ""
$adox_table = ""
EndFunc ;==>_TestCreateLocalTableQuelqu'un aurait il LA solution ?



