Програмное создание файла *.mdb в VB
Подскажите пожалуйста как програмно создать файл базы данных Access с таблицами и связями, и сохранить его. Спасибо!
Я с одними связями разбирался целый день.. :) Так что сделать-то можно, тока процесс непростой, смортя какие таблицы, связи и т.д.
Кстати ты вообще где хочешь-то создавать свою базу, из какой программы-то?
Я с одними связями разбирался целый день.. :) Так что сделать-то можно, тока процесс непростой, смортя какие таблицы, связи и т.д.
Кстати ты вообще где хочешь-то создавать свою базу, из какой программы-то?
Есть оболочка написанная в VB из нее нужно создать програмно базу данных Access. По шаблону. Хоть приблизительно скажи как это сделать.
Есть оболочка написанная в VB из нее нужно создать програмно базу данных Access. По шаблону. Хоть приблизительно скажи как это сделать.
В смысле, на VB6 будешь писать что-ли?
Саму базу не создавал, тока в Access таблицы, запросы, формы и связи, но там насколько я помню ничего сильно отличающегося от вышеперечисленного нет, так что ща посмотрим... вспомним...
В смысле, на VB6 будешь писать что-ли?
Саму базу не создавал, тока в Access таблицы, запросы, формы и связи, но там насколько я помню ничего сильно отличающегося от вышеперечисленного нет, так что ща посмотрим... вспомним...
Да писать буду в VB6. Посмотри пожалуйста как это делается!
Да писать буду в VB6. Посмотри пожалуйста как это делается!
Проще всего с базой данных из VB общаться по технологии Microsoft DAO 3.60 Это прикольно, она предоставляет доступ к базе Access через модель объектов как например в VB6, VBA:
Workspace->Databases(Database)->TableDefs(TableDef) и т.д. Очень советую просто взять справку и полазить по этим объектам и внимательно почитать и посмотреть примеры и тебе все станет понятно, если ты хоть немного программировал на VB6. Суть та же, теже объекты, их методы, свойства, иерархия, ну вообщем полный доступ. Конечно в скорости обработки запросов DAO будет помедленее SQL, но это уже другой вопрос.
Для того чтобы работать с DAO из других программ необходимо подключить библиотеку Microsoft DAO 3.60 Object Library через Tools/References.
Вот сам пример создания базы для затравки, хотя все это можно (и даже лучше) уточнить по справке, которая даст более богатую информацию (нечего боятся, там все понятно :) )
' Создание базы данных .mdb
' ==========================
Dim wrkDefault As Workspace
Dim dbs As Database
Dim sNameDB As String
' название файла для новой базы данных
sNameDB = "NewDB.mdb"
' получаем Workspace по умолчанию
Set wrkDefault = DBEngine.Workspaces(0)
' убеждаемся что файл с таким названием не существует, иначе
' удаляем его
If Dir(sNameDB) <> "" Then Kill sNameDB
' создаем новую базу данных
Set dbs = wrkDefault.CreateDatabase("NewDB.mdb", dbLangGeneral, dbVersion30)
End If
' =================================
' Добавление таблицы в базу данных
' =================================
Dim tdf As TableDef, fld, fld1 As Field
Dim idx As Index, fldIndex As Field
Dim rst As Recordset
Dim NameTable As String
' имя для новой таблицы
NameTable = "Табл1"
' А вот так можно получить доступ к уже открытой(текущей) базе данных: Set dbs = CurrentDb
' Создаем новую таблицу
Set tdf = dbs.CreateTableDef(NameTable)
' Создаем поле Код, которое будет у нас ключевым
Set fld1 = tdf.CreateField("Код", dbLong)
fld1.Attributes = fld1.Attributes + dbAutoIncrField
tdf.Fields.Append fld1
' Создаем primary key index.
Set idx = tdf.CreateIndex("PrimaryKey")
Set fldIndex = idx.CreateField("Код", dbLong)
' Добавляем индексированное поле
idx.Fields.Append fldIndex
' Устанавливаем Primary property.
idx.Primary = True
' Добавляем index.
tdf.Indexes.Append idx
' Определяем и добавляем новые поля в таблицу
With tdf
.Fields.Append .CreateField("Сумма", dbText, 10)
.Fields.Append .CreateField("Дата", dbDate, 10)
.Fields.Append .CreateField("Пользователь", dbText, 3)
End With
' обновляем коллекцию полей
tdf.Fields.Refresh
' добавление таблицы в коллекцию таблиц базы данных
dbs.TableDefs.Append tdf
' обновляем коллекцию таблиц
dbs.TableDefs.Refresh
'----------------------------------------
' Вторую таблицу аналогично можно создать
'-----------------------------------------
' =================================
' Установка связей между таблицами
' =================================
' Например у нас две таблицы: Табл1 и Табл2
' в них уже должны быть соответствующие поля (Field), которые будут
' удовлетворять всем требованиям для создания связи: т.е. быть одного типа и т.д.
' Пусть в каждой из этих таблицах будет по одинаковому полю - "ПолеСвязь"
Dim tdf1 As TableDefs, tdf2 As TableDefs
' связь между таблицами - это объект модели DAO под названием Relation
Dim relNew As Relation
' открываем таблицы
tdf1 = dbs.TableDefs!Табл1
tdf2 = dbs.TableDefs!Табл2
' создаем объект связь
Set relNew = dbs.CreateRelation("НашаСвязь", tdf1.name, tdf2.name, dbRelationUpdateCascade)
' Теперь в этот объект (связь) - relNew надо добавить указание о полях, через которые будут связаны наши таблицы
' Делается это так:
' 1. Сначала создается поле(Field) под название "ПолеСвязь"
' и добавляется в коллекцию полей объекта Relation, т.е. relNew
' 2. У этого добавленного поля в relNew становится доступным свойство - ForeignName,
' в котором надо указать поле другой таблицы для связи (в нашем случае поля наз. одинаково, так что можно не мучаться лишний раз)
' 3. Вот и все.
relNew.Fields.Append relNew.CreateField("ПолеСвязь")
relNew.Fields!DeptID.ForeignName = "ПолеСвязь"
' обновляем коллекцию
dbs.Relations.Append relNew
' особождаем память
Set tdf = Nothing
Set dbs = Nothing
Исправить на: relNew.Fields!ПолеСвязь.ForeignName = "ПолеСвязь"