Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: ADO vs CBuilder  (Прочитано 26113 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Кот
Гость
« : 04-12-2003 03:50 » 

Народ может у кого есть описание как скрестить сабж. На многих форумах задавал этот вопрос в основном приводят небольшой кусок и все. Может у кого есть почитать по подробнее на русском.
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #1 : 04-12-2003 04:16 » 

Кот, нету ничего такого. Пользовался MSDN и описанием от Дельфи. Спроси чего по конкретней отвечу максимально развёрнуто.
Записан

Странно всё это....
Serega
Гость
« Ответ #2 : 04-12-2003 08:39 » 

Никогда не работал с Builder'ом, но там наверняка есть аналог #import
Записан
WW
Гость
« Ответ #3 : 04-12-2003 09:43 » 

А TADOConnection, TADODataSet и еже с ними чем не подходят?
Вкладка ADO. Инкапсулируют ADO от MS/  Вот такой я вот
Записан
Gunman
Гость
« Ответ #4 : 04-12-2003 10:29 » 

1) Полнстью присоединяюсь к WW
2) bcbdev.ru
Записан
Kern
Гость
« Ответ #5 : 04-12-2003 12:38 » 

А меня вот какие вопросы интересуют при работе ADO vs CBiulder
Мне нравится работать в SQL запросах. Так как запросы очень разнообразные и часто приходится делать различные командные запросы к БД. Как следствие на форме только одна компонента TADOConnection. в run-time создаю TADOCommand и через нее получаю TADOTable
БД на основе Access - *.mdb
Так вот как поменять в run-time путь к БД? при любых попытках сделать компонент говорит неверные параметры.
Как работать с БД более эффективно? то есть я делаю SELECT id1,id2,id3 FROM t
а чтобы обратиться к полям я должен каждый раз использовать функцию GetFieldByName()... но ведь я-то знаю порядок возвращаемых элементов а поиск по строке IMHO существенно менее эффективен (особенно когда нада пробежаться по десятку-тысяч элементов  Улыбаюсь  )

И еще вопрос про ADO - поддерживают ли они multi-thread - т.е. обращение к БД одновременно несколькими нитями из одной программы и в каких пределах?
Записан
SOS
Гость
« Ответ #6 : 04-12-2003 13:48 » 

Цитата

И еще вопрос про ADO - поддерживают ли они multi-thread - т.е. обращение к БД одновременно несколькими нитями из одной программы и в каких пределах?


Eshe kak, a)|( pyx letit  Отлично  .
Записан
Strannik
Гость
« Ответ #7 : 04-12-2003 14:06 » 

У меня была только одна проблема с ADO в BCB5.

При попытке выполнить такой код:
ADODataSet1->Recordset = Command1.Execute() программа вылетала с системной ошибкой в ADO, если процедура(в Command1) не возвращала рекордсет. Причем после этого любое обращение к методам ADO вызывало разные ошибки и призодилось перезапускать программу.
Записан
Kern
Гость
« Ответ #8 : 05-12-2003 06:32 » 

Цитата

Eshe kak, a)|( pyx letit  .


а на каком уровне нада разделять нити? например для каждой нити создать по одному TADOConnection или достаточно не обращаться разными нитями к одной TADOTable? или нада все обращения к БД - делать через критическую секцию? - правда при этом теряется приемущество нитей...

Для примера в документации к Postgress (БД под unix) ясно написанно что он безопасен в пределах одного PGconn (аналог TADOConnection) т.е. каждой нити по PGconn - и делай все что душе угодно. А возвращаемый результат вообще как угодно можно использовать (по аналогии - TADOTable) - т.е. обрабатывать сразу разными нитями...

С проблемами типа
Цитата

ADODataSet1->Recordset = Command1.Execute() программа вылетала с системной ошибкой в ADO, если процедура(в Command1) не возвращала рекордсет.

Можно даже и не столкнуться - ведь на этапе проектирвания проги ты наверняка знаешь будет ли результат или не будет Улыбаюсь


по поводу смены пути к БД:
Цитата

AnsiString PathDB="DB.mdb";
for(int i=0;i<ADOConnection->Properties->Count;i++){
   if(AnsiString(ADOConnection->Properties->Item->Name)=="Data Source"){
      ADOConnection->Properties->Item->Value=PathDB;
      break;
   }
}

при компиляции выдается ошибка:
[Linker Error] Unresolved external 'System::__linkproc__ __fastcall CheckAutoResult()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\RELEASE\VCLE.LIB|syssupp

при удалении этих строчек из проги, но при присутствии обращений к БД, чтения результатов и т.п. проблем нет. В Дельфи аналогичный код работает  :?
Записан
FoxVID
Гость
« Ответ #9 : 05-12-2003 08:05 » 

Цитата
по поводу смены пути к БД:

А не проще ли будет создать файл линка данных (расширение .udl) и сослаться на него. При смене пути к базе данных меняется только этот файл, без перекомпилляции проекта.
Записан
FoxVID
Гость
« Ответ #10 : 05-12-2003 08:37 » 

Цитата
При попытке выполнить такой код:
ADODataSet1->Recordset = Command1.Execute() программа вылетала с системной ошибкой в ADO, если процедура(в Command1) не возвращала рекордсет.

Так это и должно быть. Для выполнения команд, не возвращающих рекордсет, используй компонент ADOQuery или ADOStoredProc
Записан
Kern
Гость
« Ответ #11 : 05-12-2003 11:57 » 

FoxVID,
Цитата

А не проще ли будет создать файл линка данных (расширение .udl) и сослаться на него.

хм... не знаю как это делать (.udl).
При чем здесь перекомпиляция?
Я программно могу менять  PathDB! (здесь привел код где  PathDB как константа для простоты)

фишка в том что код не хочет компилироваться как таковой  Жаль
Записан
FoxVID
Гость
« Ответ #12 : 06-12-2003 10:19 » 

Kern, есть небольшая статейка по адресу http://bcbsql.narod.ru/pub/ispado.htm
Там, на мой взгляд, достаточно полно описано создание файлов линка.
Кстати, объясни мне, пожалуйста, для чего программно менять путь к базе данных? Они что, мигрируют?  Отлично
Записан
Kern
Гость
« Ответ #13 : 06-12-2003 11:43 » 

FoxVID, За линк спасибо.
С линкованием БД разобрался, теперь даже полу программно получается менять путь к БД Улыбаюсь - типа если задать несколько готовых .udl файлов между ними можно переключаться таким образом:
Цитата

ADOConnection1->Close();
ADOConnection1->ConnectionString="FILE NAME=E:\\proba 8.udl";
ADOConnection1->Open();
ADOTable1->Open();

В принципе проблема в моем контексте разрешена Улыбаюсь

Цитата

для чего программно менять путь к базе данных?

Например есть демонстрационная БД и рабочая БД. Или чтение пути к БД из конфигурационного файла... Или большая БД разбита на несколько кусков одной структуры но с разными данными - на ходу надо уметь придумать название текущего куска БД, потом к нему подконнектится или даже создать если таковой отсутсвтует.
Теперь встает другой вопрос - как программно менять/создавать .udl файлы? Улыбаюсь
Записан
FoxVID
Гость
« Ответ #14 : 08-12-2003 07:38 » 

Kern,
Цитата

Например есть демонстрационная БД и рабочая БД.

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

как программно менять/создавать .udl файлы?

не знаю. Кстати, вопрос интересный... :idea:
Записан
Kern
Гость
« Ответ #15 : 08-12-2003 13:19 » 

FoxVID,
Цитата
Не вижу смысла здесь программно менять путь к базе данных. После успешного тестирования приложения раз и навсегда переходишь на рабочую.
А такой вариант: пользователь клацает кнопку в приложении "режим безболезненной демонстрации" - прога переключается в демо-БД и пользователь творит все что душе угодно Улыбаюсь
Но все же если БД бьется на куски программным методом - то все равно нада переключаться между базами... А если заранее нельзя сказать на какие и сколько кусков бьется - то и нельзя заранее сделать файлы .UDL. Жаль

про multi-thread - так ничего вразумительного и не сказанно...
Записан
FoxVID
Гость
« Ответ #16 : 11-12-2003 11:32 » 

Цитата
А такой вариант: пользователь клацает кнопку в приложении "режим безболезненной демонстрации" - прога переключается в демо-БД и пользователь творит все что душе угодно

Интересная мысль  :!: Попробую и у себя что-нибудь подобное реализовать для новых бухгалтеров Жжешь
Записан
Дикий
Гость
« Ответ #17 : 16-12-2003 08:21 » 

Цитата

А такой вариант: пользователь клацает кнопку в приложении "режим безболезненной демонстрации" - прога переключается в демо-БД и пользователь творит все что душе угодно  

А если попробовать Terminate, а потом опять креате? не пробовал, но почему бы нет?
Записан
Kern
Гость
« Ответ #18 : 16-12-2003 08:41 » 

Дикий,
Цитата
А если попробовать Terminate
Это SQL-комманда или метод ADO компоненты или еще что? Или это нечто вроде отмененной транзакции (а ведь многие БД не поддерживают вложенных транзакций)?
Цитата
а потом опять креате
это SQL комманда CREATE или опять нечто иное?

З.Ы. В общем я не понял тебя Улыбаюсь
Записан
Дикий
Гость
« Ответ #19 : 16-12-2003 11:32 » 

Kern, фигню написал, но судя по методам можно сделать Close() АДОконнекшену и Open(), но уже с новыми параметрами

кому есть с чем попробовать - пробуйте Отлично
Записан
FoxVID
Гость
« Ответ #20 : 13-01-2004 11:04 » 

Цитата

А такой вариант: пользователь клацает кнопку в приложении "режим безболезненной демонстрации" - прога переключается в демо-БД и пользователь творит все что душе угодно

Попробовал. Лучше бы не пробовал.  Ха-ха-ха  Только user-ов запутал. Забывают выйти из "режима безболезненной демонстрации", заносят документы, а ты их потом ищи.  Так больше нельзя...
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #21 : 13-01-2004 11:31 » 

Может в демо-режиме при занесениии документа в базу постоянно предупреждать об этом (демо-режим) )пользователей?
Тогда не должны забыть
Записан

I Have Nine Lives You Have One Only
THINK!
FoxVID
Гость
« Ответ #22 : 13-01-2004 12:59 » new

Цитата

Может в демо-режиме при занесениии документа в базу постоянно предупреждать об этом (демо-режим) )пользователей?

Тоже верно, но как представлю, сколько надо вносить изменений в код программы  Вот такой я вот Проще убрать демо-режим. Жжешь
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines