powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создание копии скелета базы а оно ...
4 сообщений из 4, страница 1 из 1
Создание копии скелета базы а оно ...
    #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
Создание копии скелета базы а оно ...
    #32389924
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так, пусть связь будет с другим именем
Код: plaintext
str = rlt.Table & rlt.ForeignTable &  "A" 

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

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


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