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

Вниз

Зачем очистка параметров?...   Найти похожие ветки 

 
databaser   (2007-03-10 09:53) [0]

При установке 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 - изврат полный.


 
DrPass ©   (2007-03-10 11:36) [1]

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


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

Так в принципе и подумал, но ведь существует ситуация, когда набор параметров расширен (учитываются параметры всех возможных 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 (все проверил вроде, так и не понял откуда берется).


 
Desdechado ©   (2007-03-10 18:35) [3]

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


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

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

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


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

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


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

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

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

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


 
Desdechado ©   (2007-03-11 18:08) [7]

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

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


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

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

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


 
Desdechado ©   (2007-03-12 11:42) [9]

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

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



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

Форум: "Базы";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.04 c
1-1174929830
Express
2007-03-26 21:23
2007.05.27
Как программно закрыть 1С:Предприятие?


4-1166796037
AMS
2006-12-22 17:00
2007.05.27
про CreateProcess


2-1178394905
RedBanner
2007-05-05 23:55
2007.05.27
компонент дерево


1-1175194336
dreamse
2007-03-29 22:52
2007.05.27
Как запустить ярлык созданый с сетевого подключения ?


2-1178865815
Wood
2007-05-11 10:43
2007.05.27
Помогите с SQL - INSERT,





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский