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

Вниз

Глюк TStoredProc   Найти похожие ветки 

 
tomek   (2004-02-15 11:03) [0]

Вопрос по Interbase такой.
Пуская я использую стандартные компоненты для доступа к БД Interbase (TStoredProc, TQuery, TDatabase). Конечно, так делать не вполне корректно, но все же.
У меня есть база 1.gdb, в ней 3 таблицы и одна хранимая процедура, которая имеет вид :

СREATE PROCEDURE SUMSALARY (IPMIN FLOAT)
RETURNS (OPSUM FLOAT)
AS
declare variable summ float;
declare variable n float;
begin
summ=0;
for select salary from customers
where salary>=:ipMin into n
do summ = summ + n;
opSum=summ;
end ^

В общем, обычная процедура подсчета суммы зарплаты для сотрудников.
На формочке экземпляры TDataBase, TQuery и TStoredProc связаны соответствующим образом.
Я регинюсь к базе через обработчик OnLogin, и данные отображаются в Gridе. Теперь пишу такой обработчик для Button1 :

with storedproc1 do begin
parambyname("IPMIN").value:=20;
prepare;
execProc;
label1.Caption:=inttostr(parambyname("opsum").value);
end;

И вот тут-то какая-то лажа получается. Входной параметр IPMIN не найден. Хотя у меня свойства компоненты TStoredProc настроены правильно (SessionName, StoredProcName и DataBaseName) - сомневаться не приходится. Далее самое забавное. После хитрых манипуляций - типа переконнект к базе, а также повторного выбора значения параметра StoredProcName компоненты TStoredProc, мне все-таки удается без ошибки получить в Label1 значение вожделенной суммы. Кстати, в свойтве Params компоненты TStoredProc все ОК, есть два параметры - один входной, другой - выходной.
В ЧЕМ ГЛЮК ?????????


 
jack128   (2004-02-15 11:32) [1]

Помоему тут можно обойтись и без ХП
select sum(salary) from customers
where salary>=:ipMin

А по вопросу вроде все нормально.
Для комплекта добавь StoredProcName := "SUMSALARY"; авось на мысли наведет


 
Deniz   (2004-02-16 09:41) [2]

И еще:
with storedproc1 do begin
StoredProcName := "SUMSALARY";
prepare;
parambyname("IPMIN").value:=20;
execProc;
label1.Caption:=inttostr(parambyname("opsum").value);
end;


 
Zacho   (2004-02-16 09:48) [3]

И еще еще :)
Можешь поставить в конце ХП suspend и вызывать ее не с помощью TStoredProc, а с помощью TQuery запросом SELECT * FROM SUMSALARY(:IPMIN)
А вообще, присоединяюсь к jack128 © (15.02.04 11:32) [1] - зачем городить ХП если достаточно одного простого запроса ?



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

Форум: "Базы";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.012 c
1-43504
Troy
2004-02-28 18:04
2004.03.14
Паскаль. в чем ошибка?


6-43727
axx
2003-12-30 13:56
2004.03.14
Помогите с TServerClientThread в TServerSocket


1-43547
Adil Aliyev
2004-02-27 19:34
2004.03.14
dat файл.


1-43577
TestUser
2004-02-27 15:25
2004.03.14
Сообщение и строка


14-43874
ИМХО
2004-02-19 05:07
2004.03.14
---|Ветка была без названия|---





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский