Страница: 1 |
Помогите, пожалуйста, освоить программирование СУБД на V-Basic - на Ваших условиях, с оплатой. Я новичок, а самостоятельное обучение ну никак не движется. Возникают непонятные ошибки, при отладке непонятно как их устранять. Вася.
И как ты себе это представляешь? Я имею ввиду оплату? Для начала книгу хорошую купи, инфу почитай. Помочь поможем, но не все ведь сразу. Начнем сначала, как обычно. Какая база? как коннектишься? Первая ошибка? что именно неполучается? МСДН читать пробовал? За чем деньги?!! Если че не получиться обращайся на форум - все как смогут так помогут! Ну , я то о том как раз и говорил... Только об одном прошу, для тебя же будет лучше. Не спрашивай сразу готовые решения. Их то тебе дадут, но сможешь ли ты их использовать позже? Сначала попробуй сделать сам, одним путем, другим, если не получится , задавай вопросы с описанием проблемы. Так и научишься, главное пытайся делать что то сам. Большое спасибо всем за ответ ! К сожалению, МСДН у меня нет - почему-то Ошибка, которая у меня возникает: Dim F_об1, F_об2, F_об3, F_об4 As Field Подскажи, пожалуйста, что это за Бяка. ______________________________________________ Private Sub Form_Load() Dim dbFile As String 'Проверка наличия или создание базы данных 'Проверяет наличие файла, имеющего имя, которое будет присвоено новой базе данных. Если есть такая база, то новая база не создается, если нет то вызывается функция и база создается. End Sub Public Function dbgreit() области TableDef отношения ' Строковая переменная, указывающая на файл БД находящийся по тому же пути, что и файл программы. рабочей области версия Jet-машины 3,5 и кодирование. dbLangCyrillic, dbOpts) ' Создание рускоязычной БД dbУчет.CreateTableDef("НасПункты") dbУчет.CreateTableDef("Заказчики") ' Создание и описание счетчика с именем НомерОбъекта (табл. Объекты) dbLong) ' Создание поля в таблице с именем НомерОбъекта - автоинкремент F_об1 в таблицу НомерОбъекта) ключа - первичный ключ к таблице ' Создание и описание поля с именем НаименованиеОбъекта (табл. Объекты) tbОбъекты.CreateField("НаименованиеОбъекта", dbText, 50) ' Создание поля в таблице с именем НаименованиеОбъекта F_об2 в таблицу ' Создание и описание поля с именем НомерНасПункта (табл. Объекты) dbLong) ' Создание поля в таблице с именем НомерНасПункта F_об3 в таблицу ' Создание и описание поля с именем НомерЗаказчика (табл. Объекты) dbLong) ' Создание поля в таблице с именем НомерЗаказчика F_об4 в таблицу ' Создание и описание счетчика с именем НомерНасПункта (табл. НасПункты) tbНасПункты.CreateField("НомерНасПункта", dbLong) ' Создание поля в таблице с именем НомерНасПункта - автоинкремент F_нп1 в таблицу НомерНасПункта) tbНасПункты.CreateIndex("НомерНасПункта") ключа - первичный ключ индекс к таблице ' Создание и описание поля с именем НаименованиеНасПункта (табл. НасПункты) tbНасПункты.CreateField("НаименованиеНасПункта", dbText, 50) ' Создание поля в таблице с именем НаименованиеНасПункта F_нп2 в таблицу ' Создание и описание счетчика с именем НомерЗаказчика (табл. Заказчики) tbЗаказчики.CreateField("НомерЗаказчика", dbLong) ' Создание поля в таблице с именем НомерЗаказчика - автоинкремент F_зак1 в таблицу НомерЗаказчика) tbЗаказчики.CreateIndex("НомерЗаказчика") ключа - первичный ключ индекс к таблице ' Создание и описание поля с именем НаименованиеЗаказчика (табл. Заказчики) tbЗаказчики.CreateField("НаимЗаказчика", dbText, 50) ' Создание поля в таблице с именем НаименованиеЗаказчика F_зак2 в таблицу ' Добавление таблицы Объекты в БД ' Добавление таблицы НасПункты в БД ' Добавление таблицы Заказчики в БД ' Создание объекта Relation (связь, отношение) с именем ОбъектыНасПункты dbУчет.CreateRelation("ОбъектыНасПункты") таблица отношения таблица Создание поля отношения с именем НомерНасПункта, в первой таблице должно быть поле с таким же именем. отношения во второй таблице Номер. объект "отношение" к БДОтветить
Ну во первых, чего так все мутно ? Зачем базу создавать из программы? Не можешь поставлять с пустой базой ? Если уж создаешь базу то правильнее было бы использовать скрипт для ее генерации, если уж хочешь то можно прямо из кода. Далее, переменные у тебя обьявлены неверно. Dim F_об1, F_об2, F_об3, F_об4, F_об5 As Field Из них только последняя Field а остальные Variant !!! Dim F_об1 As Field, F_об2 As Field, F_об3 As Field, F_об4 As Field, F_об5 As Field Вот это будет правильно, то же самое и в остальных обьявлениях. Так ошибка возникает на самом обьявлении? В программе я что то не заметил работы с этой переменной. Вот так выглядит гораздо лучше по моему Все сделано запросами. Правда для Jet не все можно реализовать запросами, например каскадное удаление и обновление (если кто знает, подскажите). Private Sub Form_Load() Dim NewWs As Workspace, dbУчет As Database Dim dbName As String, strSQL As String If Right(App.Path, 1) = "\" Then dbName = App.Path & "Учет.Mdb" Else dbName = App.Path & "\Учет.Mdb" If Dir(dbName) = "" Then Set NewWs = DBEngine.Workspaces(0) Set dbУчет = NewWs.CreateDatabase(dbName, dbLangCyrillic, dbEncrypt) 'Создание таблицы Объекты strSQL = "Create Table Объекты (НомерОбъекта COUNTER CONSTRAINT НомерОбъекта PRIMARY KEY," & _ " НаименованиеОбъекта TEXT(50), НомерНасПункта LONG, НомерЗаказчика LONG)" dbУчет.Execute strSQL 'Создание таблицы НасПункты strSQL = "Create Table НасПункты (НомерНасПункта COUNTER CONSTRAINT НомерНасПункта PRIMARY KEY," & _ " НаименованиеНасПункта TEXT(50))" dbУчет.Execute strSQL 'Создание таблицы Заказчики strSQL = "Create Table Заказчики (НомерЗаказчика COUNTER CONSTRAINT НомерЗаказчика PRIMARY KEY," & _ " НаимЗаказчика TEXT(50))" dbУчет.Execute strSQL 'Создание связей dbУчет.Execute "ALTER TABLE Объекты Add CONSTRAINT ОбъектыНасПункты FOREIGN KEY" & _ " (НомерНасПункта) REFERENCES НасПункты (НомерНасПункта)" dbУчет.Execute "ALTER TABLE Объекты Add CONSTRAINT ОбъектыЗаказчики FOREIGN KEY" & _ " (НомерЗаказчика) REFERENCES Заказчики (НомерЗаказчика)" End If End Sub Что касается справки. Visual Studio поставляется на 5-ти дисках. Два из них MSDN - т.е. справка, документация и т.д. Писать что-то на VB без нее просто невозможно ИМХО. Собственно сам VB, а также С++ с другими приблудами находится на первом диске, другие два тебе думаю не понадобятся. Спасибо Алексу и Магнусу. Создание БД и отношений получилось. Подскажите, как создать экранную форму: № Наим.объекта Наим. заказчика Наим. нас.пункта Я попытался создать на форме объект ДАТА, но когда задавал свойства RecordSource, то программа выдала ошибку "Unrecognized database format "Учет.mdb". В Access база и таблицы просматриваются нормально. Заранее благодарю. Вася. Страница: 1 |
Вопрос: Ребята, помогите
Добавлено: 21.02.03 21:58
Автор вопроса: Вася
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
MAGNUS
Вопросов: 12
Ответов: 430
Профиль | | #1
Добавлено: 21.02.03 22:04
Номер ответа: 2
Автор ответа:
Alex_
ICQ: 202830092
Вопросов: 16
Ответов: 49
Профиль | | #2
Добавлено: 21.02.03 22:15
Номер ответа: 3
Автор ответа:
MAGNUS
Вопросов: 12
Ответов: 430
Профиль | | #3
Добавлено: 21.02.03 22:22
Номер ответа: 4
Автор ответа:
Вася
Вопросов: 1
Ответов: 2
Профиль | | #4
Добавлено: 21.02.03 23:05
с комплектом VB-6.0 (на СД) он не
поставлялся, хотя версий VB много -
начиная с ДОСовских. Но может быть,
я что-то не догоняю. Подскажите, где его достать.
когда я объявляю переменные Fields,
на последней выдается ошибка -
несоответствие типа данных:
Т.е. F_об4. Поэтому я вставил "Лишнюю" переменную
F_об5 последней. (см.текст программы ниже).
Вася.
If Dir(App.Path & "\Учет.Mdb") <> "" Then
dbFile = App.Path & "\Учет.Mdb"
Else:
dbFile = dbgreit()
End If
Dim NewWs As Workspace 'Описание БД и рабочей
Dim dbУчет As Database
Dim dbOpts As Long, dbName As String, tbОбъекты As
Dim tbНасПункты As TableDef
Dim Rel1, Rel2 As Relation ' Описание таблицы и
Dim Ind1, Ind2, Ind3 As Index 'Описание индексов
Dim F_об1, F_об2, F_об3, F_об4, F_об5 As Field
Dim F_нп1, F_нп2, F_нп3 As Field
Dim F_зак1, F_зак2, F_зак3 As Field
Dim F_rel1, F_rel2, F_rel3 As Field
Dim Ind_об1, Ind_нп1, Ind_зак1 As Index
dbName = App.Path & "\Учет.Mdb"
Set NewWs = DBEngine.Workspaces(0) ' Создание
dbOpts = dbVersion35 + dnEncrypt ' Параметры БД -
Set dbУчет = NewWs.CreateDatabase(dbName,
' добавление таблицы с именем Объекты в БД
Set tbОбъекты = dbУчет.CreateTableDef("Объекты")
' добавление таблицы с именем НасПункты в БД
Set tbНасПункты =
' добавление таблицы с именем Заказчики в БД
Set tbЗаказчики =
Set F_об1 = tbОбъекты.CreateField("НомерОбъекта",
F_об1.Attributes = dbAutoIncrField ' Атрибуты поля
tbОбъекты.Fields.Append F_об1 ' Добавляем поле
' Первичный ключ таблицы Объекты (индекс по полю
Set Ind_об1 = tbОбъекты.CreateIndex("НомерОбъекта")
Ind_об1.Primary = True ' Устанавливаем свойство
tbОбъекты.Indexes.Append Ind_об1 ' Добавляем индекс
Set F_об2 =
tbОбъекты.Fields.Append F_об2 ' Добавляем поле
Set F_об3 = tbОбъекты.CreateField("НомерНасПункта",
tbОбъекты.Fields.Append F_об3 ' Добавляем поле
Set F_об4 = tbОбъекты.CreateField("НомерЗаказчика",
tbОбъекты.Fields.Append F_об4 ' Добавляем поле
Set F_нп1 =
F_нп1.Attributes = dbAutoIncrField ' Атрибуты поля
tbНасПункты.Fields.Append F_нп1 ' Добавляем поле
' Первичный ключ таблицы НасПункты (индекс по полю
Set Ind_нп1 =
Ind_нп1.Primary = True ' Устанавливаем свойство
tbНасПункты.Indexes.Append Ind_нп1 ' Добавляем
Set F_нп2 =
tbНасПункты.Fields.Append F_нп2 ' Добавляем поле
Set F_зак1 =
F_зак1.Attributes = dbAutoIncrField ' Атрибуты поля
tbЗаказчики.Fields.Append F_зак1 ' Добавляем поле
' Первичный ключ таблицы Заказчики (индекс по полю
Set Ind_зак1 =
Ind_зак1.Primary = True ' Устанавливаем свойство
tbЗаказчики.Indexes.Append Ind_зак1 ' Добавляем
Set F_зак2 =
tbЗаказчики.Fields.Append F_зак2 ' Добавляем поле
dbУчет.TableDefs.Append tbОбъекты
dbУчет.TableDefs.Append tbНасПункты
dbУчет.TableDefs.Append tbЗаказчики
Set Rel1 =
' Установка свойств отношения
Rel1.Table = "tbОбъекты" ' Первичная (мастер)
Rel1.ForeignTable = "tbНасПункты" ' Подчиненная
' Создание поля отношения и установка свойств
Set F_rel1 = Rel1.CreateField("НомерНасПункта") '
F_rel1.ForeignName = "НомерНасПункта" ' Поле
' Добавление поля к объекту "отношение" и сам
Номер ответа: 5
Автор ответа:
MAGNUS
Вопросов: 12
Ответов: 430
Профиль | | #5
Добавлено: 21.02.03 23:22
Номер ответа: 6
Автор ответа:
Alex3
ICQ: 9481061
Вопросов: 18
Ответов: 132
Профиль | | #6
Добавлено: 22.02.03 02:06
Номер ответа: 7
Автор ответа:
Вася
Вопросов: 1
Ответов: 2
Профиль | | #7
Добавлено: 23.02.03 10:53