Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получение результатов работы SQL-запроса


Kostafey ©   (2006-12-10 20:34:00) 

Уважаемые мастера! Если я кого-то еще не замучил своими вопросами то TSQL, то окажите содействие в следующем:
Если посылать запрос из SQL Managment Studio (СУБД SQL Server 2005), то помимо результата выполнения запроса
(например таблицы, если это оператор select) он выводит сообщение (например '(359 row(s) affected)').

ВОПРОС: А как в Delphi получить текст этого сообщения при подключении к СУБД через ADO ?


Kostafey   (2006-12-11 02:05:00) [1]

> а чего ты ожидал от "пустышки"? полный отчет по изменениям,
> с логом старых + новых значений полей?...
> нет, данных в нем нет, а значит и структуры под них.

А мне всего-то нужно считать значения RowsAffected для ряда заросов


sniknik   (2006-12-11 01:56:00) [2]

> Так Recordset.Fields.Count будет 0
а чего ты ожидал от "пустышки"? полный отчет по изменениям, с логом старых + новых значений полей?...
нет, данных в нем нет, а значит и структуры под них.


Kostafey   (2006-12-11 01:20:00) [3]

> [8] sniknik ©   (11.12.06 00:58)

Спасибо, теперь стало гораздо понятнее.

Но что-то не получается считать информацию из Recordset.

Так Recordset.Fields.Countбудет 0
Есть еще несколько методов начинающихся с Get...


sniknik   (2006-12-11 00:58:00) [4]

> Есть у ADOCommand несколько интересных перегруженных Execute.
> Наверное сообщения о результатах запроса нужно как-то черпать их них ?
только для первого

> Возвращают эти Execute значение типа _Recordset,
> у которого и метод NextRecordset есть.
нашел :о)

> Но как это работает понаять пока не получается.

var
 Recordset: _Recordset;
 RecAff: Integer;
 RecAff2: OleVariant;

begin
 Recordset:= ADOCommand1.Execute(RecAff, EmptyParam);
 ...
 while Recordset <> nil do begin
    Recordset:= Recordset.NextRecordset(RecAff2);
   ....
 end;


Kostafey   (2006-12-11 00:11:00) [5]


> Есть у ADOCommand несколько интересных перегруженных Execute.


Возвращают эти Execute значение типа _Recordset,
у которого и метод NextRecordset есть. Но как это работает понаять пока не получается.


Kostafey   (2006-12-10 23:47:00) [6]

> у возвращаемого рекордсета ищи, и не свойство, у него это
> параметр у NextRecordset.

Нет, боюсь что не получается самостоятельно разобраться.
ADOCommand1.Parameters.Count;
выдает 0, что наверное и неудивительно.

NextRecordset - что такое ?

Есть у ADOCommand несколько интересных перегруженных Execute.
Наверное сообщения о результатах запроса нужно как-то черпать их них ?


sniknik   (2006-12-10 23:33:00) [7]

> Да, но я что-т о никак не могу найти у ADOCommand аналог RowsAffected property (TADOQuery)
у возвращаемого рекордсета ищи, и не свойство, у него это параметр у NextRecordset.


Kostafey   (2006-12-10 23:13:00) [8]

> если же нужны именно "пустышки" (от инсертов, апдейтов всяких
> там где рекордсеты без данных)

Да-да, именно они-то и нужны


> то надо пользоваться не ADODataSet а ADOCommand

Да, но я что-т о никак не могу найти у ADOCommand аналог RowsAffected property (TADOQuery)


> ADOQuery(ADOTable, ADOStoredProc) выкинь в корзину, и больше
> не используй.

Даже в практике такого ламера как я случалось, что ADOTable генерил ошибку там
где ADODataSet успешно справлялся с задачей.


sniknik   (2006-12-10 22:34:00) [9]

> то я получается смогу получить только сообщение о выполнении последнего запроса ?
наоборот первого отображаемого, т.к. ADODataSet "прокручивает" "пустышки" спереди до первого с данными.
следующие можно получить после перехода к следующему по NextRecordset.

если же нужны именно "пустышки" (от инсертов, апдейтов всяких там где рекордсеты без данных) то надо пользоваться не ADODataSet а ADOCommand у него нет функциональности по обрезанию пустых/неотображаемых рекордсетов.

ADOQuery(ADOTable, ADOStoredProc) выкинь в корзину, и больше не используй.


Kostafey   (2006-12-10 20:59:00) [10]

> RowsAffected property (TADOQuery)

Угу, а если посылается сразу ряд запросов в TADOQuery.SQL и выполняются одним ExecSQL,
то я получается смогу получить только сообщение о выполнении последнего запроса ?


Desdechado   (2006-12-10 20:47:00) [11]

RowsAffected property (TADOQuery)
неужели тяжело догадаться?


Наверх

Титульная страница Поиск, карта сайта Написать письмо