Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > Delphi 7 использование хранимых процедур |
Автор: Medved 11.9.2009, 00:51 | ||||
Привет всем. Когда-то давно, в 2002 году написал одну программу на Delphi 7 для автоматизации приема платежей за аренду торговых мест для крупного торгового центра. Сейчас сделал для этого программного комплекса электронную карту торговых мест, на C# (VS2008) но возникла необходимость внести в старую программу небольшие изменения, так как она до сих пор вполне справляется со своими задачами, и писать новую нет смысла. На дельфи я уже давно не программировал, поэтому немного забыл этот язык. Ну плюс еще, когда я программировал на Дельфи, код писал по методу лапши, и более профессиональные приемы программирования тогда еще не знал. Вопрос следующий. Вот на С# для использования хранимых процедур MS SQL сервера я использую следующий код. Хранимая процедура:
Код на C#:
Я в свое время в Дельфи 7 использовал компоненты TADOStoredProc. Создавал модуль унаследованный от TDataModule, бросал на него компоненты TADOStoredProc и связывал их с хранимыми процедурами через свойства в Object Inspector в режиме Design Mode. Я не хочу так реализовывать доступ к БД и непосредственно к ХП на сервере. Мне бы желательно создавать программно компоненты для доступа к ХП. Какой наименее кодозатратный и мышкотыкательный способ, использования ХП в дельфи? Как например я это делаю c помощью С# в VS2008. Благодарю. |
Автор: Frees 11.9.2009, 06:21 | ||||
обычный адо квери и выполняеш в нем запрос типа
или просто
|
Автор: Medved 11.9.2009, 12:32 |
Это понятно. Мне нужно именно хранимые процедуры. Я не хочу писать SQL команды в коде приложения. Пусть они будут вынесены на сервер. Тогда при их изменении, или изменении полей, не надо будет перекомпилировать приложение. |
Автор: Akella 11.9.2009, 16:10 |
![]() |
Автор: Medved 11.9.2009, 20:07 | ||
Приемущество использования хп давно известны и если ты не используешь такой подход - то тебе минус, как профессионалу. К примеру вот http://morozilnik.blog.ru/78249731.html For Vas, Akella - смотрите шире.
А если изменено имя поля? Приложение на Delphi 7 у меня написано как с использованием хранимых процедур (для манипуляции с данными), и в коде запросы писал.... на строк 30-40... так что опыт использования запросов SQL в коде имеется... и не очень положительный... Если с этим еще не столкнулись - значит не пришло еще ваше время... Желаю удачи! И давайте пожалуйста не отходить от темы топика... |
Автор: Akella 11.9.2009, 21:04 | ||||||
а если в процедуре ты поменял список входных и/или выходных параметров? Очень редко бывает, что меняешь код хранимки так, что не меняются параметры. Добавлено через 7 минут и 57 секунд
SQL кода нет |
Автор: Medved 12.9.2009, 11:05 | ||
По разному бывает. Те ХП, которые выполняют манипуляции с данными (INSERT, UPDATE) - там да, обычно меняются только параметры. Однако это как правило 30% хранимых процедур, используемых в приложении, построенном с их помощью. Для выборки данных тоже используются ХП, их приходиться менять гораздо чаще в ходе отладки и тестирования, чем команды манипуляции. К тому же, если писать запросы в коде приложения, то узнать, рабочий запрос ты написал, или нет, можно только после компиляции приложения (на серьезных проектах это занимает достаточно много времени), в случае с ХП, запрос тестируется по горячему. Т.е. тут же написал, тут же на сервере оттестировал, и не надо компилить все приложение целиком и использовать этот запрос из приложения, чтобы узнать верный он или нет. Кроме того, при ХП соблюдается принцип централизованности. Т.е. бывает зачастую так, что один и тот же запрос, используется в разных частях приложения. Если в коде его писать, то происходит дублирование кода. И в случае изменения такого запроса, его надо везде изменять, где он используется. В случае с ХП - его достаточно изменить лишь один раз - на сервере БД. |
Автор: Vas 14.9.2009, 07:10 | ||
Для выборки данных обычно хватает вьюх на сервере. |
Автор: Medved 14.9.2009, 07:17 | ||||
Как задавать свойства объекту TADOStoredProc я и так знаю... Вот пример из соседней темы: http://forum.vingrad.ru/s/c54310447a961add22a6f24a29f7c22e/topic-158388.html
Тоже не рабочий. Пришлось разбираться. Прежде чем использовать параметры хранимой процедуры, их надо еще создать. Или в режиме Design Mode, или если программно создается объект TADOStoredProc, то программно. Добавлено @ 07:31 Вот немного о хранимых процедурах, и их использовании: http://www.delphisources.ru/pages/faq/base/storedproc_better.html http://base.vingrad.ru/view/348-Ispolzovanie-hranimyih-protsedur-Server-InterBase |
Автор: Medved 14.9.2009, 08:42 |
А код запроса к этим вьюхам все равно пишешь в коде... Не противопоставляй представления и хранимые процедуры. Они не исключают друг друга - а взаимодополняют. Для чего нужны ХП я уже давал ссылку выше: http://morozilnik.blog.ru/78249731.html А вот для чего нужны представления: http://msdn.microsoft.com/ru-ru/library/ms188250.aspx Ну еще вот, более понятным языком: http://www.opennet.ru/docs/RUS/sql_kg/5-4-4.html См. также: О представлениях: http://msdn.microsoft.com/ru-ru/library/ms191428.aspx и http://msdn.microsoft.com/ru-ru/library/ms190174.aspx О хранимых процедурах: http://msdn.microsoft.com/ru-ru/library/ms191436.aspx |