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

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

ADO + TDBGrid + результат хранимой процедуры [D7, XP]


Страницы:   1 2

plastic ©   (2009-04-03 13:44:00) 

Сильно не бейте, пытаюсь научиться... :)
Есть желание показать в DBGrid набор данных, возвращаемый хранимой процедурой (MSSQL Server). Хранимка из одной строки - select * from mytable

К серверу подключаюсь через ADO. Коннект проходит, далее вызываю:

procedure TForm1.Button1Click(Sender: TObject);
begin
 ADOConnection1.Connected := True;
 ADOStoredProc1.ExecProc;
 DBGrid1.DataSource := ADOStoredProc1.DataSource;
 DBGrid1.DataSource.DataSet.Open;
end;


Грид остается пустой...
Подскажите, плиз, как победить... :)


sniknik   (2009-04-04 18:28:00) [1]

> RowAffects ?
о да... вся обертка ради того чтобы это возвращала функция вместо var параметра в процедуре.  ценное качество, как это я забыл про это... все, бросаю все и теперь буду использовать только TADOQuery из-за этого... :)


MsGuns   (2009-04-04 17:43:00) [2]

>sniknik ©   (03.04.09 20:57) [19]
>чаще всего? да никогда. точнее будет.

RowAffects ?


sniknik   (2009-04-03 20:57:00) [3]

> Иногда бывает, что надо. Чаще всего - нет.
чаще всего? да никогда. точнее будет.

только у людей с исковерканным пониманием ADO может возникнуть подобная необходимость... имхо. а исковеркать понимание можно как раз используя... ;)


Ega23   (2009-04-03 20:24:00) [4]


> А чем плох TADOquery


Есть кран, есть бульдозер.
Нужно ли каждый раз использовать кранобульдозер?
Иногда бывает, что надо. Чаще всего - нет.


Немо   (2009-04-03 19:51:00) [5]

А чем плох TADOquery


Ega23   (2009-04-03 19:43:00) [6]


> Т.е. в общем случае для взаимодействия с БД через ADO достаточно
> ADOConnection + ADOCommand ? И для выполнения запросов,
> и для вызова хранимок, и вообще ?


В самом-самом общем случае достаточно вообще одного TADOConnection. Ибо у него есть методы Execute.
Но с одим - крайне неудобно работать.
Поэтому, если ты новичок, если ты не сопровождаешь старый проект и если ты не экстремальный кодер - на вкладке ADO оставь TADOConnection, TADOCommand и TADODataSet. Остальное просто убери, чтобы не отображалось.


plastic   (2009-04-03 19:20:00) [7]


> (+ аналоги TADOTable, TADOQuery. для того же)

Т.е. в общем случае для взаимодействия с БД через ADO достаточно ADOConnection + ADOCommand ? И для выполнения запросов, и для вызова хранимок, и вообще ?


sniknik   (2009-04-03 19:09:00) [8]

> Для чего то же этот компонент предназначен ?
афтавизм оставшийся от BDE-шной логики, по идее борланда "для упрощения перехода с него". но по факту это мина ловушка для новичков в ADO. (+ аналоги TADOTable, TADOQuery. для того же)


Медвежонок Пятачок   (2009-04-03 19:08:00) [9]

Для мигрирующих с бде на адо.
Чтобы не все и не сразу переделывать.


plastic   (2009-04-03 19:00:00) [10]

Спасибо еще раз.
Если можно, общетеоретический вопрос (если это не ХВ) - почему

> MsGuns ©   (03.04.09 15:17) [4]
> Правильнее не использовать TADOStoredProc вообще:

???
Для чего то же этот компонент предназначен ?


Ega23   (2009-04-03 18:49:00) [11]


> Напрямую передать ADOCommand1.Execute в DBGrid не получится
> ?


Нет. DBGrid работает с TDataSource. О природе набора данных DBGrid ничего не знает.


plastic   (2009-04-03 18:47:00) [12]

т.е. DataSource1 по любому обязателен ?
Напрямую передать ADOCommand1.Execute в DBGrid не получится ?
:)


clickmaker   (2009-04-03 18:25:00) [13]

>   DataSource1.DataSet        := ADODataSet1;
>   DBGrid1.DataSource         := DataSource1;

если это лежит на форме, то можно в дизайнере все назначить


plastic   (2009-04-03 18:21:00) [14]

Вот так получилось с ADOCommand...

   ADOCommand1.Connection     := ADOConnection1;
   ADOConnection1.Connected   := True;

   ADODataSet1.Recordset      := ADOCommand1.Execute;
   DataSource1.DataSet        := ADODataSet1;
   DBGrid1.DataSource         := DataSource1;


Это правильно ? Или я с DataSource1 лишнего накрутил ? :)


plastic   (2009-04-03 18:14:00) [15]


> clickmaker ©   (03.04.09 17:28) [6]
> ADODataSet1.Recordset := ADOCommand1.Execute;
> DBGrid.DataSource.DataSet := ADODataSet1;


Спасибо, но получился AV на последней строке...
Присвоение не проходит.

   ADOCommand1.Connection     := ADOConnection1;
   ADOConnection1.Connected   := True;
   ADODataSet1.Recordset      := ADOCommand1.Execute;
   DBGrid1.DataSource.DataSet := ADODataSet1;


clickmaker   (2009-04-03 17:28:00) [16]

ADODataSet1.Recordset := ADOCommand1.Execute;
DBGrid.DataSource.DataSet := ADODataSet1;


plastic   (2009-04-03 17:25:00) [17]


> MsGuns ©   (03.04.09 15:17) [4]
> Правильнее не использовать TADOStoredProc вообще:
>
> DBGrid.DataSource.DataSet := ADOCommand.Execute


Не заработало...
Не хочет присваивать DataSet'у значение типа _Recordset


MsGuns   (2009-04-03 15:17:00) [18]

Правильнее не использовать TADOStoredProc вообще:

DBGrid.DataSource.DataSet := ADOCommand.Execute


plastic   (2009-04-03 14:38:00) [19]

Спасибо, заработало... :)


Ega23   (2009-04-03 13:48:00) [20]

ADOStoredProc1.Connection := ADOConnection1;
DataSource1.DataSet := ADOStoredProc1;
DBGrid1.DataSource := DataSource1;
ADOConnection1.Connected := True;
ADOStoredProc1.ExecProc;


Страницы:   1 2

Наверх

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