Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.13;
Скачать: CL | DM;

Вниз

Хранимые процедуры в MS SQL   Найти похожие ветки 

 
____Nikolay   (2003-12-16 18:13) [0]

Не могу использовать хранимую процедуру, точнее функцию
Идея проста: в качестве входного параметра передаю ID учителя,
и получаю его оклад. Код такой:

CREATE FUNCTION dbo.FUNC_GET_TEACHERS_SALARY (@ITEACHERS_ID int)
RETURNS decimal(15,2) AS
BEGIN
DECLARE @FTEACHERS_SALARY decimal(15,2);

SELECT @FTEACHERS_SALARY = T.SALARY
from TEACHERS T
where T.ID = @ITEACHERS_ID;

RETURN @FTEACHERS_SALARY;
END


Использовать пытаюсь сначала в SQL Query Analyzer"e

SELECT *
FROM TEST.dbo.FUNC_GET_TEACHERS_SALARY(2)


TEST - имя БД
На что выдается ошибка: "Invalid object name "TEST.dbo.GET_TEACHERS_SALARY""
Если за место процедуры поставить имя таблицы - все нормально будет отрабатываться

И при работе в Delphi тоже не могу воспользоваться этой функцией:

// Получить зарплату преподавателя
function TForm1.GetTeachersSalary(ITEACHERS_ID: integer): double;
begin
with ADOStoredProc1 do
begin
ProcedureName := "FUNC_GET_TEACHERS_SALARY;1";
Parameters.Clear;

with Parameters.AddParameter do
begin
Name := "@ITEACHERS_ID";
DataType := ftInteger;
Direction := pdInput;
Precision := 10;
end;

with Parameters.AddParameter do
begin
Name := "@RETURN_VALUE";
DataType := ftBCD;
Direction := pdReturnValue;
NumericScale := 2;
Precision := 15;
end;

Parameters[0].Value := ITEACHERS_ID;
ExecProc;
Result := Parameters[1].Value;
end;
end;


В момент выполнения процедуры, говорит, что определено слишком
много параметров "Procedure or function FUNC_GET_TEACHERS_SALARY
has too many arguments specified"

1. Как быть в первом случае, когда процедуру нужно выполнить в SQL Query Analyzer"e
2. Почему в Delphi при работе с хранимыми процедурами с использованием ADO возникает ошибка

a. Почему такие сложности с параметрами (каждый нужно программно добавлять). В Interbase
при присвоении новой процедуры, ее параметры сразу известны

b. Как можно обращаться к параметрам по имени, а не по индексу?


 
JibSkeart ©   (2003-12-16 18:22) [1]

случай 2
хмм а он тебе случаем не ставит параметры автоматом
всмысле TAdostoredproc
попробуй не добовлять сам параметры .


 
kostik78ua   (2003-12-16 18:39) [2]

SELECT * FROM TEST.dbo.FUNC_GET_TEACHERS_SALARY(2) ????
Если у тебя функция возвращает decimal(15,2), то как можно ее подставлять во FROM ????
Могу предположить что нужно было сделать:
SELECT ID, FUNC_GET_TEACHERS_SALARY(ID) FROM TEACHERS


 
ZrenBy ©   (2003-12-16 18:50) [3]

1. SELECT TEST.dbo.FUNC_GET_TEACHERS_SALARY(2)
2. Используй TADOCommand

a. Никаих сложностей. Работа с ADO оптимизирована не для Delphi

b. ADOSP.Parameters[2].Value
ADOSP.Parameters.Items[3].Value


 
ZrenBy ©   (2003-12-16 18:53) [4]

сорри

b. ADOSP.Parameters.ParamValues["@I_PAR"] := 123


 
____Nikolay   (2003-12-16 19:01) [5]

Спасибо!


 
____Nikolay   (2003-12-16 20:55) [6]

Следуя совету, пробую использовать ADOCommand вместо ADOStoredProc
Почему-то выходной параметр всегда NULL

// Получить зарплату преподавателя (способ 3)
function TForm1.GetTeachersSalary3(ITEACHERS_ID: integer): double;
begin
with ADOCommand1 do
begin
CommandText := "SELECT :SAL = dbo.FUNC_GET_TEACHERS_SALARY(:ITEACHERS_ID)";
Parameters.Clear;

with Parameters.AddParameter do
begin
Name := "@ITEACHERS_ID";
DataType := ftInteger;
Direction := pdInput;
Precision := 10;
end;

with Parameters.AddParameter do
begin
Name := "@SAL";
DataType := ftBCD;
Direction := pdOutput;
NumericScale := 2;
Precision := 15;
end;

Parameters.ParamValues["@ITEACHERS_ID"] := ITEACHERS_ID;
Execute;
if VarIsNull(Parameters.ParamValues["@SAL"]) then
Result := 0 // <- Всегда NULL !!!
else
Result := double(Parameters.ParamValues["@SAL"]);
end;
end;


Подскажите, пожалуйста, где ошибка
или закиньте кусочек кода из какого-нибудь проекта с использованием ADOCommand



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

Текущий архив: 2004.01.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
14-37900
Viktor Kushnir
2003-12-15 14:03
2004.01.13
Redirect


3-37586
___Nikolay
2003-12-13 10:45
2004.01.13
В MSSQL


3-37565
User_OKA
2003-12-15 12:53
2004.01.13
Поля


14-37857
Flar
2003-12-23 03:23
2004.01.13
Hook мне винда а Я ей в ответ НИЧЕГО


3-37571
Stas
2003-12-11 10:41
2004.01.13
dll и Ado