Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создание копии скелета базы а оно ... / 4 сообщений из 4, страница 1 из 1
28.01.2004, 01:16
    #32389903
Andrik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание копии скелета базы а оно ...
Требуется создать базу архив

Код:
Dim i As Integer, j As Integer, AMode As Integer
Dim str As String, AFileName As String
Dim fs As FileSystemObject
Dim ws As Workspace
Dim db As Database, dbNew As Database
Dim td As TableDef, tdNew As TableDef
Dim fld As Field, fldNew As Field
Dim idx As Index, idxNew As Index
Dim rlt As Relation, rltNew As Relation

str = Forms("Форм_Главная").Form.edPathToBase
Set ws = DBEngine.Workspaces(0)
Set db = OpenDatabase(str)
AFileName = edNewDataBase

Set fs = CreateObject("Scripting.FileSystemObject")
Set dbNew = ws.CreateDatabase(AFileName, dbLangCyrillic, dbEncrypt)

For Each td In db.TableDefs
If Left(td.Name, 4) = "Табл" Then
Set tdNew = dbNew.CreateTableDef(td.Name)
For Each fld In td.Fields
Set fldNew = tdNew.CreateField(fld.Name, fld.Type, fld.Size)
If fldNew.Type = dbText Then fldNew.AllowZeroLength = fld.AllowZeroLength
fldNew.Attributes = fld.Attributes
fldNew.DefaultValue = fld.DefaultValue
fldNew.Required = fld.Required
tdNew.Fields.Append fldNew
Next fld

If td.Indexes.Count Then
For Each idx In td.Indexes
'If idx.Name = "primarykey" Then
Set idxNew = tdNew.CreateIndex(idx.Name)
For Each fld In idx.Fields
idxNew.Fields.Append idxNew.CreateField(fld.Name)
Next fld
idxNew.Unique = idx.Unique
idxNew.Primary = idx.Primary
tdNew.Indexes.Append idxNew
'End If
Next idx
End If

dbNew.TableDefs.Append tdNew
End If
Next td

AMode = dbRelationUpdateCascade + dbRelationDeleteCascade
For Each rlt In db.Relations
str = rlt.Table & rlt.ForeignTable
Set rltNew = dbNew.CreateRelation(str, rlt.Table, rlt.ForeignTable, AMode) 'rlt.Attributes)
For Each fld In rlt.Fields
Set fldNew = rltNew.CreateField(fld.Name)
fldNew.ForeignName = fld.ForeignName
rltNew.Fields.Append fldNew
Next fld
dbNew.Relations.Append rltNew
Next rlt

на строке (dbNew.Relations.Append rltNew) при создании первой-же записи говорит что ИНДЕКС УЖЕ СУЩЕСТВУЕТ и дальше не хочет. Как это понимать, я проверял индекса с таким именем нету ни в исходной базе не в результирующей, что я делаю не правильно?
...
Рейтинг: 0 / 0
28.01.2004, 03:51
    #32389924
Alexander G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание копии скелета базы а оно ...
Попробуй так, пусть связь будет с другим именем
Код: plaintext
str = rlt.Table & rlt.ForeignTable &  "A" 

Больше сказать ничего не могу.
...
Рейтинг: 0 / 0
28.01.2004, 09:22
    #32390041
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание копии скелета базы а оно ...
я проверял индекса с таким именем нету ни в исходной базе не в результирующей
Фигово ты проверял.

Нефиг все подряд индексы тупо добавлять
Если idx.Foreign = True, то пропускать такой индекс надо
...
Рейтинг: 0 / 0
28.01.2004, 10:47
    #32390206
Andrik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание копии скелета базы а оно ...
Для ЛОХ:
Вот спасибо - просто и со вкусом, да и копировать стало раза в 3 быстрее.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создание копии скелета базы а оно ... / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]