Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.01.13;
Скачать: [xml.tar.bz2];

Вниз

Хранимые процедуры в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.035 c
1-37698
Tumcoat
2003-12-26 03:53
2004.01.13
Выравнивание столбцов таблицы в Word-е


3-37531
mva
2003-12-16 10:16
2004.01.13
Формат даты


3-37538
Pako
2003-12-16 11:00
2004.01.13
QReport


14-37914
BKGG
2003-12-20 21:40
2004.01.13
У моего друга задержка родов.


14-37899
Shluz
2003-12-21 20:56
2004.01.13
line2003.ru





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский