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

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

Редактирование записи (без сохранения) ADOStoredProc. [D5, MSSQL]


Jony ©   (2002-10-16 13:41:00) 

Помогите решить проблему(?).
Необходимо отредактировать одну запись ADOStoredProc. Сохранять не нужно (будет сохраняться другими средствами). Напрямую запись для редактирования закрыта, и, как я понимаю, сделать ее редактируемой нельзя. Не хочется связываться с Editами - уж больно много писанины. К сожалению, не работал с временными таблицами или компонентами типа ТMemoryTable из RX-библиотеки.
Подскажите выход, и если можно, поподробней.


sniknik   (2002-10-16 18:54:00) [1]

передавать ему параметры, и зачем все впихивать в один квери можно хоть каждую команду отдельно (хотя для MSSQL можно и все и несколько селектов подряд).

ADOCommand.CommandText:= "CREATE TABLE #Table (Catalog_Name Char(30), Column1 Char(30))";
ADOCommand.Execute;

ADOCommand.CommandText:= "insert into #Table EXEC sp_catalogs ""DBF"""; //специально взял в нее параметр передается (у вас не сработает у вас линка DBF нет, скорее всего, я его сам делал)
ADOCommand.Execute;
или тоже через параметр
ADOCommand.CommandText:= "insert into #Table EXEC sp_catalogs :MyLinkSrv";
ADOCommand.ParamByName("MyLinkSrv").Value:= "DBF";
ADOCommand.Execute;

и наконец
ADOQuery.SQL.Text:= "select * from #table";
ADOQuery.Open;


Jony   (2002-10-16 18:16:00) [2]

Рано радовался.
Процедура то с параметрами. А как в конструкцию
insert into #table exec sp_databases
которая в свою очередь вставляется в ADOQuery, вставить параметры?


Jony   (2002-10-16 17:23:00) [3]

Спасибо большое! Сейчас буду пробовать. О результатах отчитаюсь.


sniknik   (2002-10-16 17:14:00) [4]

ну если через временную таблицу самый простой путь то можно так
(для примера я взял стандартную процедуру)
создаем временную таблицу (поля как процедура возвращает)
CREATE TABLE #table (Database_Name Char(30), Database_Size Char(30),Remarks Char(30))
заполняем (в селекте нельзя в инсерте почемуто можно, вопрос почему? я неправильно селекты задаю?)
insert into #table exec sp_databases
ну и выбираем
select * from #table (и редактируем редактируем .... до посинения :о)))


Jony   (2002-10-16 15:25:00) [5]

Подробнее.
Данные, с которыми мне нужно работать, иначе, как через ХП не достать (идет разворачивание простой таблицы в большую шахматку, по существу в куб, потому что в каждую ячейку шахматки вытягивается несколько совершенно разных данных - числовое значение, дата, строка). Одна запись ХП представляет несколько записей из исходной таблицы. Так вот, мне нужно отредактировать значения в записи ХП и сохранить в соответствующих записях исходной таблицы. Вторая часть трудности не представляет - через ADOQuery с Insert или Update все получается хорошо. А вот как изменить значения в записи ХП - не знаю. Непосредственно в ХП или через временную таблицу с информацией - самый простой способ. Выкидывать информацию в Editы - очень трудоемко.


sniknik   (2002-10-16 14:59:00) [6]

не ты не понял. я не прикалывался, просто повторил тебя и привел пример работы с временной таблицей, скорее этот пример для работы в процедуре.
а вот указать в селекте вместо таблици процедуру? не пройдет. надо как то по другому.
перефразируй задачу, как ты хочеш редактировать но не записывать? может проше перегнать данные в слиентдатасет? и редактируй себе на здоровье.
или взять данные из таблици (как в примере) а не через процедуру, или они там формируются?.
в общем подробнее pls.


Jony   (2002-10-16 14:06:00) [7]

И указывать ту, что на сервере, или ADOStoredProc из приложения?


Jony   (2002-10-16 13:58:00) [8]

>sniknik
Я ж говорил, что не работал с временными таблицами.
Мне нужно вытащить одну запись с довольно навороченной хранимой процедуры. Значит в качестве приведенного Invoicesмне нужно указать свою ХП и условие выборки?


sniknik   (2002-10-16 13:46:00) [9]

не работал с временными таблицами? это просто! делаеш
select * into #InvoicesDouble from Invoices
потом можно
select * from #InvoicesDouble
и все, ни о чем заботится не надо. таблица автоуничтожится после засершения сессии.


Наверх

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