Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хранимая пр., параметры и все все все, MS SQL SERVER2000+ADO+DELPHI 
:(
    Опции темы
1grib
  Дата 26.4.2005, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.2.2005

Репутация: нет
Всего: нет



начитавшись книг, FAQ'ов написал хранимую процедуру для добавления записей:

Код

CREATE PROCEDURE dbo.proc1
@Name char(20)='unknow',
@Number int=0
AS
IF @Name='unknow' RETURN(1)
ELSE IF @Number=0 RETURN(2)
ELSE INSERT Base.dbo.table1
(Name,Number)
VALUES
(@Name, @Number)
RETURN (SELECT @@IDENTITY AS 'Identity')
IF @@ERROR <>0 RETURN (3)
GO


Вот. А дальше в книге вызывают эту процедуру из Query Analyzer'a :

Код

DECLARE @r_Code int
EXECUTE @r_Code=dbo.proc1
@Name char(20),
@Number int,
IF @r_Code=1 PRINT 'ошибка'
IF @r_Code=@@IDENTITY
SELECT ID='ID равен: '+ CONVERT (CHAR(4),@r_Code)


Как мне теперь тоже самое сделать, только из своей проги?? Подозреваю что надо пользовать ADOCommand или может быть ADODataSet? и в выходном параметре выдавать: "ошибка"

Т.е. вообще-то я хочу понять как сделать:
1.Как в приложении получить код возврата первой процедуры Proc1.
2.Что можно и чего нельзя писать в ADOCommand.CommandText , и как там выходному параметру присваивать значение
3.В хранимой процедуре, на серваке выходные параметры можно заполнить только с помощью SELECT'а, т.е. нельзя написать @Parametr='что-нибудь' так или нет??

smile smile
PM MAIL   Вверх
Vit
Дата 1.5.2005, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 5
Всего: 207



Язык я так понимаю Дельфи? Хех... хреново там реализованы компоненты для работы с sp.

Я лично делаю так:

Код

CREATE PROCEDURE dbo.proc1
@Name char(20)='unknow',
@Number int=0
Declare r int
IF @Name='unknow' Set r=1
ELSE IF @Number=0 Set r=2
ELSE INSERT Base.dbo.table1
(Name,Number)
VALUES
(@Name, @Number)
IF @@ERROR <>0 Set r=3
Select r as "Return", @@IDENTITY AS 'Identity'


Дальше выполняем обычный запрос с помощью ADOQuery

Exec dbo.proc1 "Name", 0

И после открытия квери берём нужное значение полей Return и Identity


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
1grib
Дата 2.5.2005, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.2.2005

Репутация: нет
Всего: нет



Vit, спасибо большое! я уже не надеяля что кто-нибудь ответит.

PM MAIL   Вверх
Vit
Дата 2.5.2005, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 5
Всего: 207



Звиняюсь, в отпуске был smile


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
AntonSaburov
Дата 4.5.2005, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Цитата(Vit @ 1.5.2005, 21:10)
Select r as "Return", @@IDENTITY AS 'Identity'

Я бы использовал не @@IDENTITY а SCOPE_IDENTITY() - это более верное решение. @@IDENTITY возвращает самый последний IDENTITY, который может появиться в каком-нибудь триггере на вставку. Т.е. ты в триггере на добавление добавляешь записи в еще одну таблицу. В этом случае @@IDENTITY отдаст тебе ИД из второй таблицы.
А SCOPE_IDENTITY() вернет ИД именно для первой.
PM MAIL WWW ICQ   Вверх
1grib
Дата 5.5.2005, 05:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.2.2005

Репутация: нет
Всего: нет



Код

CREATE PROCEDURE dbo.proc1
@Name char(20)='unknow',
@Number int=0
Declare r int
IF @Name='unknow' Set r=1
ELSE IF @Number=0 Set r=2
ELSE INSERT Base.dbo.table1
(Name,Number)
VALUES
(@Name, @Number)
IF @@ERROR <>0 Set r=3
Select r as "Return", @@IDENTITY AS 'Identity'

У меня почему то сервак не дает создать эту процедуру
Error 156 Incorrect syntax near the keyword 'Declare'
'int' is not a recogniszed CURSOR option
и на каждый "Set r=" ругается: incorrect syntax near '='

PM MAIL   Вверх
AntonSaburov
Дата 5.5.2005, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Ты AS забыл
Код

CREATE PROCEDURE dbo.proc1
@Name char(20)='unknow',
@Number int=0
AS
Declare r int
IF @Name='unknow' Set r=1
ELSE IF @Number=0 Set r=2
ELSE INSERT Base.dbo.table1
(Name,Number)
VALUES
(@Name, @Number)
IF @@ERROR <>0 Set r=3
Select r as "Return", @@IDENTITY AS 'Identity'

PM MAIL WWW ICQ   Вверх
1grib
Дата 5.5.2005, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.2.2005

Репутация: нет
Всего: нет



правда из-за этого ???smile smile
завтра проверю.
да это ты сам забыл! smile я просто скопировал твой ответ

Это сообщение отредактировал(а) 1grib - 5.5.2005, 15:04
PM MAIL   Вверх
AntonSaburov
Дата 5.5.2005, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Цитата(1grib @ 5.5.2005, 15:04)
да это ты сам забыл! smile я просто скопировал твой ответ

Я такое не писал - ты у Vit'а такое скопировал. Но ошибка-то вообщем из-за невнимательности - такие делают все. Особенно, когда на вскидку отвечают.
PM MAIL WWW ICQ   Вверх
1grib
Дата 5.5.2005, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 26.2.2005

Репутация: нет
Всего: нет



ой, действительно! Вот, опять невнимательность! Спасибо и Vit'у и тебе.
PM MAIL   Вверх
Vit
Дата 13.5.2005, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 5
Всего: 207



P.S. Это форум, и ответы - это не задания которые делаются под заказ. Внимательно относитесь к приводимым ответам, в 90% случаев Вам дают вовсе не готовые решения, а подсказки в каком направлении надо идти... Вместо Copy/Paste моего кода надо было к нему приглядется и понять ЧТО именно я хотел изменить, и САМОМУ сделать изменения


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0610 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.