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

Ваш аккаунт

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

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

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

FAQ - Вопросы - ответы - советы - Базы данных

Вопрос:

Как работать из DELPHI напрямую с MS ADO (MICROSOFT ACTIVE DATA OBJECTS)?

Ответ:

Итак, хочу поделиться некоторыми достижениями... так на всякий случай. Если у вас вдруг потребуется сделать в своей программке доступ к базе данных, а BDE использовать будет неохота (или невозможно) - то есть довольно приятный вариант: использовать ACTIVEX DATA OBJECTS. Однако с их использованием есть некоторые проблемы, и одна из них это как передавать OPTIONAL параметры, которые вроде как можно не указывать. Однако, если вы работаете с ADO по-человечески, а не через тормозной IDISPATCH.INVOKE то это превращается в головную боль. Вот как от нее избавляться:

VAR
  OPTIONALPARAM: OLEVARIANT;
  VARDATA: PVARDATA;
BEGIN
  OPTIONALPARAM := DISP_E_PARAMNOTFOUND;
  VARDATA := @OPTIONALPARAM;
  VARDATA^.VTYPE := VARERROR;

после этого переменную OPTIONALPARAM можно передавать вместо неиспользуемого аргумента.

Далее, самый приятный способ получения RESULT SETS:

Там есть масса вариантов, но как выяснилось оптимальным является следующий вариант, который позволяет получить любой желаемый вид курсора (как клиентский так и серверный)

VAR
 MYCONN: _CONNECTION;
 MYCOMM: _COMMAND;
 MYRECSET: _RECORDSET;
 PRM1: _PARAMETER;
BEGIN
 MYCONN := COCONNECTION.CREATE;
 MYCONN.CONNECTIONSTRING := 'DSN=PUBS;UID=SA;PWD=;';
 MYCONN.OPEN('','','',-1);
 MYCOMMAND := COCOMMAND.CREATE;
 MYCOMMAND.ACTIVECONNECTION := MYCONN;
 MYCOMMAND.COMMANDTEXT := 'SELECT * FROM BLAHBLAH WHERE BLAHID=?'
 PRM1 := MYCOMMAND.CREATEPARAMETER('ID',
                        ADINTEGER.ADPARAMINPUT,-1,);
 MYCOMMAND.APPENDPARAMETER(PRM1);
 MYRECSET := CORECORDSET.CREATE;
 MYRECSET.OPEN(MYCOMMAND,OPTIONALPARAM,ADOPENDYNAMIC,
                                  ADLOCKREADONLY,ADCMDTEXT);

... теперь можно фетчить записи. Работает шустро и классно. Меня радует. Особенно радуют серверные курсоры.

Проверялось на DELPHI 3.02 + ADO 1.5 + MS SQL 6.5 SP4. Пашет как зверь. Из вкусностей ADO - их легко можно использовать во всяких многопоточных приложениях где BDE порой сбоит, если, конечно, ODBC драйвер грамотно сделан... ну и еще можно использовать для доступа к данным всяких там "нестандартных" баз типа MS INDEX SERVER или MS ACTIVE DIRECTORY SERVICES.

Оставить комментарий

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