![]() |
|
![]() ![]() ![]() |
|
Medved |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 1 Всего: 154 |
Привет всем.
Когда-то давно, в 2002 году написал одну программу на Delphi 7 для автоматизации приема платежей за аренду торговых мест для крупного торгового центра. Сейчас сделал для этого программного комплекса электронную карту торговых мест, на C# (VS2008) но возникла необходимость внести в старую программу небольшие изменения, так как она до сих пор вполне справляется со своими задачами, и писать новую нет смысла. На дельфи я уже давно не программировал, поэтому немного забыл этот язык. Ну плюс еще, когда я программировал на Дельфи, код писал по методу лапши, и более профессиональные приемы программирования тогда еще не знал. Вопрос следующий. Вот на С# для использования хранимых процедур MS SQL сервера я использую следующий код. Хранимая процедура:
Код на C#:
Я в свое время в Дельфи 7 использовал компоненты TADOStoredProc. Создавал модуль унаследованный от TDataModule, бросал на него компоненты TADOStoredProc и связывал их с хранимыми процедурами через свойства в Object Inspector в режиме Design Mode. Я не хочу так реализовывать доступ к БД и непосредственно к ХП на сервере. Мне бы желательно создавать программно компоненты для доступа к ХП. Какой наименее кодозатратный и мышкотыкательный способ, использования ХП в дельфи? Как например я это делаю c помощью С# в VS2008. Благодарю. Это сообщение отредактировал(а) Medved - 11.9.2009, 01:08 -------------------- |
||||
|
|||||
Frees |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 23 Всего: 54 |
обычный адо квери и выполняеш в нем запрос типа
или просто
-------------------- Кольцов Виктор Владимирович |
||||
|
|||||
Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 1 Всего: 154 |
Это понятно.
Мне нужно именно хранимые процедуры. Я не хочу писать SQL команды в коде приложения. Пусть они будут вынесены на сервер. Тогда при их изменении, или изменении полей, не надо будет перекомпилировать приложение. -------------------- |
|||
|
||||
Vas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: 23 Всего: 28 |
Всегда интересно было если вы в программе передаете параметры по имени
то как при изменении процедуры с добавление еще одного параметра вы собираетесь без перекомпиляции установить новому параметру значение? -------------------- И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин) |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
![]() |
|||
|
||||
Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 1 Всего: 154 |
Приемущество использования хп давно известны и если ты не используешь такой подход - то тебе минус, как профессионалу. К примеру вот http://morozilnik.blog.ru/78249731.html
For Vas, Akella - смотрите шире.
А если изменено имя поля? Приложение на Delphi 7 у меня написано как с использованием хранимых процедур (для манипуляции с данными), и в коде запросы писал.... на строк 30-40... так что опыт использования запросов SQL в коде имеется... и не очень положительный... Если с этим еще не столкнулись - значит не пришло еще ваше время... Желаю удачи! И давайте пожалуйста не отходить от темы топика... Это сообщение отредактировал(а) Medved - 11.9.2009, 20:15 -------------------- |
|||
|
||||
Akella |
|
||||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
а если в процедуре ты поменял список входных и/или выходных параметров? Очень редко бывает, что меняешь код хранимки так, что не меняются параметры. Добавлено через 7 минут и 57 секунд
SQL кода нет |
||||||
|
|||||||
Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 1 Всего: 154 |
По разному бывает. Те ХП, которые выполняют манипуляции с данными (INSERT, UPDATE) - там да, обычно меняются только параметры. Однако это как правило 30% хранимых процедур, используемых в приложении, построенном с их помощью. Для выборки данных тоже используются ХП, их приходиться менять гораздо чаще в ходе отладки и тестирования, чем команды манипуляции. К тому же, если писать запросы в коде приложения, то узнать, рабочий запрос ты написал, или нет, можно только после компиляции приложения (на серьезных проектах это занимает достаточно много времени), в случае с ХП, запрос тестируется по горячему. Т.е. тут же написал, тут же на сервере оттестировал, и не надо компилить все приложение целиком и использовать этот запрос из приложения, чтобы узнать верный он или нет. Кроме того, при ХП соблюдается принцип централизованности. Т.е. бывает зачастую так, что один и тот же запрос, используется в разных частях приложения. Если в коде его писать, то происходит дублирование кода. И в случае изменения такого запроса, его надо везде изменять, где он используется. В случае с ХП - его достаточно изменить лишь один раз - на сервере БД. -------------------- |
|||
|
||||
Vas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: 23 Всего: 28 |
Для выборки данных обычно хватает вьюх на сервере. -------------------- И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин) |
|||
|
||||
Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 1 Всего: 154 |
Как задавать свойства объекту TADOStoredProc я и так знаю... Вот пример из соседней темы: http://forum.vingrad.ru/s/c54310447a961add...pic-158388.html
Тоже не рабочий. Пришлось разбираться. Прежде чем использовать параметры хранимой процедуры, их надо еще создать. Или в режиме Design Mode, или если программно создается объект TADOStoredProc, то программно. Добавлено @ 07:31 Вот немного о хранимых процедурах, и их использовании: StoredProc становится удобнее Использование хранимых процедур. Сервер InterBase. Это сообщение отредактировал(а) Medved - 14.9.2009, 08:22 -------------------- |
|||
|
||||
Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 1 Всего: 154 |
А код запроса к этим вьюхам все равно пишешь в коде... Не противопоставляй представления и хранимые процедуры. Они не исключают друг друга - а взаимодополняют. Для чего нужны ХП я уже давал ссылку выше: 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 Это сообщение отредактировал(а) Medved - 14.9.2009, 08:44 -------------------- |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |