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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
| Public Function CopyBase(BaseName As String, TempBaseName As String, Optional lblRapport As Label = Nothing) As Boolean
CopyBase = True
Dim iRet As Integer
Dim DbOrg As Database
Dim DbDest As Database
Dim TbDefOrg As TableDef
Dim TbDefDest As TableDef
Dim IdxOrg As Index
Dim IdxDest As Index
Dim FldOrg As Field
Dim FldDest As Field
Dim Attached As Boolean
Dim PrpOrg As Property
Dim PrpDest As Property
Dim strIndex As String
Dim iPntIndex As Integer
Dim tbleIndexes As Variant
Dim Sql As String
Dim QryOrg As QueryDef
Dim QryDest As QueryDef
On Error GoTo Erreur
Set DbDest = CreateDatabase(TempBaseName, dbLangGeneral, dbVersion40)
DbDest.Close
Set DbOrg = OpenDatabase(BaseName, False, False)
Set DbDest = OpenDatabase(TempBaseName, False, False)
'mettre à jour les proprétes de la base
If lblRapport Is Nothing Then
'nop
Else
lblRapport = "Transfert des propriètés"
DoEvents
End If
For Each PrpOrg In DbOrg.Properties
On Error Resume Next
If PrpOrg.Name = "DesignMasterID" Or PrpOrg.Name = "AccessVersion" Then
'nop
Else
Set PrpDest = DbDest.CreateProperty(PrpOrg.Name, PrpOrg.Type, PrpOrg.Value)
DbOrg.Properties.Append PrpDest
End If
On Error GoTo 0
Next
For Each TbDefOrg In DbOrg.TableDefs
If (TbDefOrg.Attributes And dbSystemObject) = 0 Then
If (TbDefOrg.Attributes And dbAttachedTable) = dbAttachedTable Then
Attached = True
ElseIf (TbDefOrg.Attributes And dbAttachedODBC) = dbAttachedODBC Then
Attached = True
Else
Attached = False
End If
If lblRapport Is Nothing Then
'nop
Else
lblRapport = "convertion table " & IIf(Attached, "attachée ", "") & TbDefOrg.Name
DoEvents
End If
If Attached Then
Set TbDefDest = DbDest.CreateTableDef(TbDefOrg.Name)
TbDefDest.Connect = TbDefOrg.Connect
TbDefDest.SourceTableName = TbDefOrg.SourceTableName
DbDest.TableDefs.Append TbDefDest
For Each IdxOrg In TbDefOrg.Indexes
tbleIndexes = Split(IdxOrg.Fields, ";")
strIndex = ""
For iPntIndex = 0 To UBound(tbleIndexes)
If Left(tbleIndexes(iPntIndex), 1) = "+" Then
strIndex = strIndex & Mid(tbleIndexes(iPntIndex), 2) & ","
Else
strIndex = strIndex & Mid(tbleIndexes(iPntIndex), 2) & " DESC ,"
End If
Next
strIndex = Left(strIndex, Len(strIndex) - 1)
On Error Resume Next
If IdxOrg.Unique Then
DbDest.Execute "Create unique Index [" & IdxOrg.Name & "] on [" & TbDefOrg.Name & "] (" & strIndex & ") "
Else
DbDest.Execute "Create Index [" & IdxOrg.Name & "] on [" & TbDefOrg.Name & "] (" & strIndex & ") "
End If
On Error GoTo 0
Next
Else
Set TbDefDest = DbDest.CreateTableDef(TbDefOrg.Name)
'charger les fields de la table
For Each FldOrg In TbDefOrg.Fields
Set FldDest = TbDefDest.CreateField(FldOrg.Name, FldOrg.Type, FldOrg.Size)
FldDest.Attributes = FldOrg.Attributes
FldDest.DefaultValue = FldOrg.DefaultValue
FldDest.OrdinalPosition = FldOrg.OrdinalPosition
TbDefDest.Fields.Append FldDest
Next
'charger le propriétés de la base
For Each PrpOrg In TbDefOrg.Properties
On Error Resume Next
If PrpOrg.Name = "ConflictTable" Or PrpOrg.Name = "ReplicaFilter" Then
'nop
Else
Set PrpDest = TbDefDest.CreateProperty(PrpOrg.Name, PrpOrg.Type, PrpOrg.Value)
TbDefDest.Properties.Append PrpDest
End If
On Error GoTo 0
Next
'charger les index
For Each IdxOrg In TbDefOrg.Indexes
Set IdxDest = TbDefDest.CreateIndex(IdxOrg.Name)
IdxDest.Unique = IdxOrg.Unique
IdxDest.Primary = IdxOrg.Primary
For Each FldOrg In IdxOrg.Fields
Set FldDest = IdxDest.CreateField(FldOrg.Name)
FldDest.Attributes = FldOrg.Attributes
IdxDest.Fields.Append FldDest
Next
On Error Resume Next
TbDefDest.Indexes.Append IdxDest
On Error GoTo 0
Next
DbDest.TableDefs.Append TbDefDest
'transferer les datas à mettre en remarque si on veut une base vide
DbDest.Execute "insert into [" & TbDefDest.Name & "] " & _
"select * from [" & TbDefDest.Name & "] " & _
"in '" & BaseName & "'"
End If
End If
Next
'transfert des requêtes
For Each QryOrg In DbOrg.QueryDefs
If lblRapport Is Nothing Then
'nop
Else
lblRapport = "Transfert requête " & QryOrg.Name
End If
'Sql = QryOrg.Sql
Set QryDest = DbDest.CreateQueryDef(QryOrg.Name, QryOrg.Sql)
Next
If lblRapport Is Nothing Then
'nop
Else
lblRapport = "Convertion terminée "
End If
DbOrg.Close
DbDest.Close
Exit Function
Erreur:
CopyBase = False
End Function |
Partager