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

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

Зачем очистка параметров?... [D7, MS Access]


databaser ©   (2007-03-10 09:53:00) 

При установке CommandText в TADODataSet'e имеем следующее:


 if (CommandType = cmdText) and (Value <> '') and ParamCheck then
   InitParameters
 else
 begin
   CommandObject.CommandText := Value;
   if not Loading then Parameters.Clear; // зачем?!
 end; // (с) Borland


Использую я cmdStoredProc. В итоге при смене имени процедуры имею очистку параметров. Делать "бэкап" оных перед присвоением и восстанавливать после? Писать наследника и перекрывать AssignCommandText - изврат полный.


Desdechado   (2007-03-12 11:42:00) [1]

Johnmen ©   (11.03.07 01:35) [5]
Я не знаток ADO, но в дизайне у ADODataset при CommandType=cmdStoredProc параметры подчитываются автоматом. Видимо, можно настроить это и в runtime.

databaser   (11.03.07 22:32) [8]
Ищущий да обрящет. Однако я предпочитаю форум.


databaser   (2007-03-11 22:32:00) [2]

Desdechado ©   (11.03.07 18:08) [7]
Я прошу прощение, можно ли с вами каким-либо образом связаться вне форума? Просто есть пара небольших вопросов, которые не хотелось бы задавать в контексте форума по ряду причин. Лучше, если бы это был ICQ. Обещаю не отнять много времени.

С этой веткой можно завязывать. Остальные продолжим.


Desdechado   (2007-03-11 18:08:00) [3]

Все зависит от задачи. Если ты их не будешь вызывать сотни раз и заботишься о ресурсах клиентской части, то достаточно одного компонента. Если есть какие-то взаимосвязи, то бывает необходимо несколько одновременно. Но на каждый запрос лепить свой - глупость, имхо.

Я обычно держу открытыми несколько справочников, а все остальные нужные вещи запускаю через пару-тройку-пятерку дополнительных запросов.


databaser   (2007-03-11 09:58:00) [4]

Johnmen ©   (11.03.07 01:35) [5]
Спасибо, разобрался.

Посмотрел на поведение TADODataSet, TADOStoredProc и задался вопросом. Что оптимальнее использовать 1 DataSet и каждый раз закрывать -> указывать имя процедуры -> открывать или же использовать множество DataSet'ов, каждый из которых уже заточен под свою задачу?

Просто посмотрел сколько времени тратится на Close. Проверял в цикле (2000 раз) на одном из параметризированных запросов (меняя параметр, понятное дело). Вариант со сменой процедур и соответственно Close - 25 секунд(!), вариант "под ключ" < 100 мс(!).


Johnmen   (2007-03-11 01:35:00) [5]

Desdechado ©  имел в виду TADOStoredProc.


databaser   (2007-03-10 22:14:00) [6]

Desdechado ©   (10.03.07 18:35) [3]
поясните пожалуйста! как это работает? в справке не видел подобного. это действительно было бы удобно.

Я видел как можно получить параметры через ParseSQL, но ведь это немного не то (я имею в виду в моем случае использования StoredProc)


Desdechado   (2007-03-10 18:35:00) [7]

> это, имхо, удобнее генерации параметров в run-time для каждой
> sp в отдельности.
Удобнее пользоваться встроенной автосчитывалкой параметров из БД, которая срабатывает при присваивании имени процедуры.


databaser   (2007-03-10 11:58:00) [8]

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

Попробовал сохранять текущие параметры следующим образом:


var
 List: TParameters;
begin
 ...
 List := TParameters.Create(dsBase{nil}, TParameter);
 List.Assign(dsBase.Parameters);
 dsBase.CommandText := 'MY_STORED_PROC';
 dsBase.Parameters.Assign(List);
 List.Free;
 ...
end;


Натыкаюсь на AV (все проверил вроде, так и не понял откуда берется).


DrPass   (2007-03-10 11:36:00) [9]

Такое поведение в общем-то логично. Твоя ситуация, в которой разные процедуры имеют одинаковый набор параметров - весьма частный случай. А во всех остальных случаях неочистка параметров при смене запроса может привести к весьма нехорошим граблям


Наверх

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