Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.05.17;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.005 c
2-1238668101
Den
2009-04-02 14:28
2009.05.17
Туплю с ini-файлом. Чтение значений


15-1237130340
DillerXX
2009-03-15 18:19
2009.05.17
В чём может быть причина? (установка .NET Framework 3.5)


3-1220613409
Razrab7
2008-09-05 15:16
2009.05.17
Вопрос по работе с ADOStoredProc для СУБД Oracle


3-1220965928
kaif
2008-09-09 17:12
2009.05.17
ADO Delphi и транзакции MSSQL


2-1238584314
DmitriyR
2009-04-01 15:11
2009.05.17
TFileStream





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский