Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.05.17;
Скачать: CL | DM;

Вниз

ADO + TDBGrid + результат хранимой процедуры   Найти похожие ветки 

 
plastic   (2009-04-03 13:44) [0]

Сильно не бейте, пытаюсь научиться... :)
Есть желание показать в 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;


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


 
clickmaker ©   (2009-04-03 13:47) [1]

не тот DataSource.

ADOConnection1.Connected := True;
SomeDataSource.DataSet := ADOStoredProc1;
DBGrid1.DataSource := SomeDataSource;
DBGrid1.DataSource.DataSet.Open;


 
Ega23 ©   (2009-04-03 13:48) [2]

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


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

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


 
MsGuns ©   (2009-04-03 15:17) [4]

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

DBGrid.DataSource.DataSet := ADOCommand.Execute


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


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


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


 
clickmaker ©   (2009-04-03 17:28) [6]

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


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


> 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;


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

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

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

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


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


 
clickmaker ©   (2009-04-03 18:25) [9]

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

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


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

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


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


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


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


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

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

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

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


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

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


 
sniknik ©   (2009-04-03 19:09) [14]

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


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


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

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


 
Ega23 ©   (2009-04-03 19:43) [16]


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


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


 
Немо ©   (2009-04-03 19:51) [17]

А чем плох TADOquery


 
Ega23 ©   (2009-04-03 20:24) [18]


> А чем плох TADOquery


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


 
sniknik ©   (2009-04-03 20:57) [19]

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

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


 
MsGuns ©   (2009-04-04 17:43) [20]

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

RowAffects ?


 
sniknik ©   (2009-04-04 18:28) [21]

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



Страницы: 1 вся ветка

Текущий архив: 2009.05.17;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.011 c
2-1238564521
DDR2
2009-04-01 09:42
2009.05.17
Как узнать, что windows завершает работу?


15-1237192051
test
2009-03-16 11:27
2009.05.17
Орешник


15-1236707812
PEAKTOP
2009-03-10 20:56
2009.05.17
Семинар по Delphi2009 в Москве и Питере


11-1200570250
Rocket
2008-01-17 14:44
2009.05.17
OpenDirDialog.InitialPath при UNICODE_CTRLS...


2-1238773381
Andrey K
2009-04-03 19:43
2009.05.17
Undo в TMemo