Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

BDE + ADO + C++Builder = error?

9.5K
10 января 2007 года
Borgir
97 / / 20.12.2006
Вобщем ситуация такая. Использовал в своей программе BDE для работы с файлами DBF. Все работало прекрасно. Тут решил добавить в программу еще одну базу, но на этот раз в формате MS ACCESS (mdb). Для этого использовал компонент TADOTable. Прописал все как полагается, попробовал тут же свойство Active=true, таблицу показывает, все работает.
Компилируется тоже все нормально, но когда программа запускается тут же вылетает ошибка "cannot load driver".
Провел эксперимент: убрал компонент TADOTable - все работает. Добавил этот компонент снова, но не стал прописывать ему вообще никакой ConnectionString - опять таже ошибка.

И еще интересная вещь. Если построить ЕХЕ-шник, то он выдает эту же ошибку только пока запущен Builder. Если Builder закрыть, то ЕХЕ-шник работает нормально.

Где тут собака порылась?
2.1K
10 января 2007 года
mainigor
151 / / 21.10.2005
Цитата: Borgir

Компилируется тоже все нормально, но когда программа запускается тут же вылетает ошибка "cannot load driver".
Провел эксперимент: убрал компонент TADOTable - все работает.
Добавил этот компонент снова, но не стал прописывать ему вообще никакой ConnectionString - опять таже ошибка.

И еще интересная вещь. Если построить ЕХЕ-шник, то он выдает эту же ошибку только пока запущен Builder. Если Builder закрыть, то ЕХЕ-шник работает нормально.

Где тут собака порылась?


Могу тебя обрадовать. У тебя винда повалилась. По крайней мере та часть, что с ADO работает. Такие чудеса сами не происходят, ADO известный компонент, я сам его юзаю когда нужно сделать маленькие приложеньица. И он всегда был на высоте. Я и DBF через ADO ковыряю, так что скомпилируй, и запусти на машине с целой виндой, всё должно получиться.

9.5K
10 января 2007 года
Borgir
97 / / 20.12.2006
Нет, дело в том что без запущенного Билдера, скомпиленный ЕХЕ-шник работает и на моем компе. Глючит каким-то образом получается Билдер. Причем, в режиме создания, если в TADOTable сделать Active=true, то можно таблицу смотреть без проблем. Странная ситуация вообще.
Я наверно не достаточно подробно объяснил. Дело в том что изначально у меня в программе было несколько BDE-шных компонентов Table, которые работали с DBF-файлами. А потом я дабавил один ADO-шный компонент TADOTable и началось...

Хотя наверно можно вместо BDE-шных Table, тоже поставить TADOTable (то есть вообще избавиться от BDE-шных компонентов Table, но неохота переделывать.
294
11 января 2007 года
Plisteron
982 / / 29.08.2003
Цитата: Borgir
Нет, дело в том что без запущенного Билдера, скомпиленный ЕХЕ-шник работает и на моем компе. Глючит каким-то образом получается Билдер. Причем, в режиме создания, если в TADOTable сделать Active=true, то можно таблицу смотреть без проблем. Странная ситуация вообще.


На машине какой-нибудь пакости типа vipnet не установлено? У нас такое из-за випнета было.

9.5K
11 января 2007 года
Borgir
97 / / 20.12.2006
Цитата: Plisteron
На машине какой-нибудь пакости типа vipnet не установлено? У нас такое из-за випнета было.



Нет. Я даже не знаю что это такое.
А вы кто-нибудь у себя попробуйте поместить на форму сначала BDE-шный компонент TTable, и открыть им какую-нибудь таблицу. А затем поместить ADO-шный компонент TADOTable, им можно даже ничего не открывать. Скомпилируйте и запустите.

547
11 января 2007 года
Hydra
488 / / 20.06.2006
имхо, бде - в топку. борланд ошибается редко, но тут точно ребята погорячились.
294
11 января 2007 года
Plisteron
982 / / 29.08.2003
Цитата: Borgir
Нет. Я даже не знаю что это такое.
А вы кто-нибудь у себя попробуйте поместить на форму сначала BDE-шный компонент TTable, и открыть им какую-нибудь таблицу. А затем поместить ADO-шный компонент TADOTable, им можно даже ничего не открывать. Скомпилируйте и запустите.


vipnet -- гадко сляпанная пародия на Firewall+VPN.
Попробовал. Результат позабавил: из-под среды Access Violation, отдельно всё нормально запускается.
Вывод: хорошо, что я использую компоненты прямого доступа к данным (ODAC, DegisyData, Apollo), а не BDE или ADO!

Ещё инфа к размышлению: если перед запуском в дизайнере сделать всем табличкам (и BDE, и ADO) свойство Active = false, а на форму бросить кнопку

 
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ADOTable1->Active = true;
    Table1->Active    = true;    
}
, то и из-под среды всё нормально работает. Моё скромное мнение: глючит не BDE, а среда, которая не может корректно всё проинициализировать в режиме отладки.
9.5K
11 января 2007 года
Borgir
97 / / 20.12.2006
Мое мнение такое же. Успокаивет конечно то, что такой глюк не у меня одного, только вот думаю что с этим делать. Может перевести все на ADO?
Тогда возникает вопрос чайника, если я несколько таблиц, которые у меня сейчас в DBF-файлах, "скопирую" в одну базу MDB, то как работать с несколькими таблицами одной базы с помощью ADO? Это надо вместо каждого TTable ставить TADOTable и прописывать в нем соответствующую таблицу или как-то по-другому?
309
11 января 2007 года
el scorpio
1.1K / / 19.09.2006
По части пользовательского интерфейса ADO от BDE отличается очень мало. Собственно говоря, "переписывать" придётся всего-навсего названия нескольких методов и свойств - BUILDER сам скажет, какие :D

А вот с ACCESSом через ADO связываться куда проще.
И ещё: по-хорошему "таблицы" лучше не использовать. Учите SQL, пишите запросы для Query с параметрами.
Кстати, а для аксеса всё ещё проще. Используется компонент ADOStoreProc, ему указывается только имя запроса и значения требуемых параметров. Тексты SQL-запросов легко, удобно и красиво пишутся в самом аксесе. А запросы без параметров открываются в ADOTable, как таблицы - по имени запроса.
Всё - у вас есть удобная среда для написания и отладки доступа к данным, и есть удобная среда для написания и отладки интерфейса программы. Каждая из сред максимально независима от другой.

А BDE, равно как и базы данных, для которых он предназначался - музейный раритет ;)
9.5K
11 января 2007 года
Borgir
97 / / 20.12.2006
Ладно, всем спасибо. Буду переходить на ADO, и впредь больше не буду использовать BDE...
24K
12 января 2007 года
fs.
3 / / 12.01.2007
такой вопрос нужно переключиться между таблицами
пишу следующее
 
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ADOTable1->Active = "false";
    ADOTable1->TableName="Table2";
    ADOTable1->Active = "true";
}

получаю ошибку
2.1K
12 января 2007 года
mainigor
151 / / 21.10.2005
Цитата: fs.
такой вопрос нужно переключиться между таблицами
пишу следующее
 
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ADOTable1->Active = "false";
    ADOTable1->TableName="Table2";
    ADOTable1->Active = "true";
}

получаю ошибку




я так подозреваю, что в ADOTable1 были заведены поля,
а в другой таблице они другие - и наверное написано : "field not found"
Если поля не заведешь - всё должно работать.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог