Konstantine |
Отправлено: 14.11.2005, 17:51 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
MS SQL 2000
скажите плиз:
для чего нужны хранимые процедуры? что ими можно сделать? и как их писать?
можно ссылку...
|
|
Kuks |
Отправлено: 15.11.2005, 09:34 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 108
|
Все что угодно. Работа с таблицами, представлениями и т.д.
Только выполняются они на стороне сервера, в отличие от
функции CPP.
|
|
Gedeon |
Отправлено: 15.11.2005, 12:28 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Да тут так просто и не напишешь, надо книги почитать да и не поймешь пока не поработаешь с ними.
|
|
olegenty |
Отправлено: 15.11.2005, 16:35 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
я ими (+ UDF + простмотры) делаю всё. клиентское приложение даже близко не представляет, что являет собой структура БД.
основное, в моём случае, назначение
1. Логика БД, если присутствуют отличные от реляционных связи между объектами БД.
2. Интерфейс разработчика, в конечном итоге обеспечивающий информацией пользовательский интерфейс.
|
|
exp |
Отправлено: 14.05.2006, 12:05 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
Здравствуйте.
Вот тоже приспичило сделать хранимую процедуру. Покопал хэлп, а там пример "времён очаковских и покоренья Крыма", который не работает .
Моя процедура просто выбирает из таблицы записи, где опред. поле равно параметру процедуры. Но как её вызвать из билдера и нарисовать в сетке ?
Если можно примерчик небольшой. Очень прошу
Использую MS SQL Server, TADOStoredProc через TADOConnection
Отредактировано exp — 14/05/2006, 12:08
|
|
olegenty |
Отправлено: 14.05.2006, 13:44 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
вот простейшая процедура с одним параметром типа int, возвращающая все значения из таблицы dbo.SomeTable, у которой значения некоторого целого поля SomeIntField равно значению параметра @IntParam
SQL | SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
create procedute dbo.usps_Something
@IntParam int
as select * from dbo.SomeTable where SomeIntField = @IntParam
go
|
у своей TADOStoredProc в ProcedureName пишешь dbo.usps_Something, проверяешь Parameters, если там нет @IntParam — добавь. параметры появляются автоматически только при наличии активного соединения с БД.
затем в коде программы пишешь
CODE |
YoursProcedure->Parameters->ParamByName("@IntParam")->Value = SomeIntValue;
YoursProcedure->Open();
|
вуаля, набор данных открыт.
для отображения можешь воспользоваться TDBGrid. Для этого кидаешь на форму TDataSource *YoursSource, настраиваешь его на YoursProcedure, кидаешь на форму TDBGrid, настраиваешь на YoursSource и видишь результат в гриде.
|
|
exp |
Отправлено: 14.05.2006, 15:44 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
Большое спасибо !!!! Аккурат то, что нужно!
Оказалось, что я писал параметры без '@'...... не вовремя..... и не туда )
Отредактировано exp — 14/05/2006, 16:15
|
|
olegenty |
Отправлено: 15.05.2006, 07:42 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
на клиентской стороне имя параметра и его вид — не критичны. важен только порядок следования параметров — он должен совпадать с порядком следования в реализации хранимой процедуры на стороне сервера.
ну и при попытке воспользоваться хранимой процедурой посредством TADOQuery всё будет чуть-чуть иначе. в SQL пишешь:
CODE |
exec dbo.usps_Something :IntParam
|
как видишь, наличие "@" — не обязательно. а можно было и с ним:
CODE |
exec dbo.usps_Something :@IntParam
|
это скорее дело вкуса, чем чего-то ещё. да и само имя можно написать, как Бог на душу положит:
CODE |
exec dbo.usps_Something :SomeMotherfuckingIntParam
|
- так тоже всё будет корректно работать. разница будет лишь в обращении к параметру из программы.
в первом случае — ParamByName("IntParam")
во втором — ParamByName("@IntParam")
в третьем — ParamByName("SomeMotherfuckingIntParam")
конечный результат будет тот же.
|
|