Перелом мозгов с CreateTableDef.Connect

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Перелом мозгов с CreateTableDef.Connect

Сообщение Dummiel » 15.01.2007 (Пн) 13:56

Хай, други мои! Вправьте мозги, please!

Я уже писал о двух БД, во второй 14500 записей, она статическая (справочник), нет смысла отдельной таблицей раздувать первую БД.

В HELP'е нашел код, который использую для прилинковки таблицы db2 к db1 (на форме присутствует Data1 и DBGrid, в пропертях которого DBGrid.DataSource = Data1), в модуле проекта имеем - Public dbBase as DAO.Database, в заголовке кода формы, после Option Explicit - Dim tbLink As TableDef.

Далее:
Код: Выделить всё

Private Sub Form_Load()

On Error Resume Next 'на случай, если прилинкованная таблица уже существует

dbName = App.Path & "\db1.mdb"
Set dbBase = DAO.OpenDatabase(dbName)

Set tbLink = dbBase.CreateTableDef("tbTemp")
tbLink.Connect = ";DATABASE=" & App.Path & "\db2.mdb"
tbLink.SourceTableName = "tbSprav" 'справочная таблица в db2
dbBase.TableDefs.Append tbLink

********** 'см. далее по тексту

Data1.DatabaseName = dbName
sSQL = "SELECT Pasp.Fam, tbTemp.Kod FROM Pasp, tbTemp"
Data1.RecordSource = sSQL

End Sub

Private Sub MDIForm_Unload(Cancel As Integer)

On Error Resume Next 'на случай, если прилинкованной таблицы уже нет

dbBase.TableDefs.Delete "tbTemp"
Me.WindowState = 1:    End

End Sub



И вроде все бы работало, да вот только два дня назад начались глюки:

При запуске проекта на исполнение [F5] VB мне выдает, что "Ядро базы данных Microsoft Jet не может найти входную таблицу или запрос "tbTemp"" и т.д., и, соответственно, на форме выводится пустой грид. Если я трассирую проект [F8], то все без проблем - грид заполняется. Доводя трассировку до выхода из проекта, вижу, что dbBase.TableDefs.Delete "tbTemp" в MDIForm_Unload - отрабатывается без ошибки, т.е., таблица tbTemp СУЩЕСТВУЕТ! Если я из MDIForm_Unload убираю строку [dbBase.TableDefs.Delete "tbTemp"], то все тоже без проблем заполняется. Если я закомментирую строку On Error Resume Next в MDIForm_Unload, то команда работает без ошибки, т.е. удаляет СУЩЕСТВУЮЩУЮ таблицу! Но тогда при выходе из проекта в db1 остается ссылка, а мне бы ее убрать надобно. Такое впечатление, что все дело в MDIForm_Unload - dbBase.TableDefs.Delete "tbTemp"! Но так не должно быть!

Когда я вынес приведенный код в отдельный проект, все работает на ура, вместе со строкой в MDIForm_Unload.

Свой проект упростил до минимума (в смысле убрал все навороты с загрузкой и SQL-запросом) - VB все равно выеживается. Когда из SQL-запроса убираю все о tbTemp - ("SELECT * FROM Pasp"), код работает. Когда оставляю только "SELECT * FROM tbTemp" - такие же глюки! И на фиг мне такой код?

Если после строки [dbBase.TableDefs.Append tbLink] я нахально прерываю работу проекта, открываю db1 Access'ом - там ЕСТЬ (!) таблица tbTemp.

Экспериментально пришел к тому, что если вместо строки звездочек в программе вставить две строки -

Код: Выделить всё
dbBase.Close
Set dbBase = DAO.OpenDatabase(dbName)


то код снова начинает работать без вопросов. Причем код работает независимо от того, присутствуют ли обе строки, либо по отдельности. Правда при отдельной dbBase.Close возникает ошибка в строке dbBase.TableDefs.Delete "tbTemp" - Объект более не задан. Ну это понятно - если я закрыл БД, какая же с ней работа? Но ведь в отдельном проекте этот код работает БЕЗ этих двух строк. И потом, если БД уже открыта (Set dbBase = DAO.OpenDatabase(dbName) в начале Form_Load), какой смысл ее закрывать и открывать снова?

Вот такие гладиолусы! :( Кто-нибудь сталкивался с подобными глюками? И что мне теперь, Биллом Гейтцем не стать? :)

P.S. Приведенный код один к одному идентичен в обоих проектах, кроме добавляемых двух строк вместо звездочек.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 15.01.2007 (Пн) 16:17

Сталкивался с такой проблемой: http://bbs.vbstreets.ru/viewtopic.php?t=23192#6584419
Другого решения, кроме как переконнектиться не нашел.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 23.01.2007 (Вт) 4:46

"Все это было бы смешно, когда бы не было так грустно!"

После недели извратов (тупо менял строчку за строчкой в из вновь созданного проекта в свой) над проектом нашел причину:

В файле проекта *.vbp у меня была строка

Reference=*\G{00025E01-0000-0000-C000-000000000046}#5.0#0#C:\Program Files\Common Files\Microsoft Shared\DAO\dao360.dll#Microsoft DAO 3.6 Object Library

Когда я ее заменил на строку

Reference=*\G{00025E01-0000-0000-C000-000000000046}#4.0#0#..\Program Files\Common Files\Microsoft Shared\DAO\DAO350.DLL#Microsoft DAO 3.51 Object Library

из нового проекта, то все заработало.

До этого я экспериментировал с ADO ( и с ADODC, естессно), м.б. как-то эта строка поменялась.

Непонятно, конечно. По всем канонам последующая версия бибилиотеки должна всячески поддерживать предыдущую, здесь же этого не произошло.

Отсюда еще вопрос, правда уже не относящийся к основной теме топика: Почему dao360.dll не нравится работать с элементом Data, а вот DAO350.DLL его полностью принимает? Чего нет в DAO360.DLL, что есть в DAO350.DLL?

Спасибо, Dummiel.

P.S. Извините за долгое отсутствие :)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.01.2007 (Вт) 8:33

Сервис-пак на студию установлен?
Lasciate ogni speranza, voi ch'entrate.

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 24.01.2007 (Ср) 13:59

alibek писал(а):Сервис-пак на студию установлен?


Уважаемый!
Какая студия!!! :( То что найдено в подземных переходах за 60-70 рублей, тем и работаем! Ладно, хоть это нашел. А сервис-паков никаких нет. Буду весьма признателен за ссылочку, где его можно скачать. :)


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList