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

Вниз

Возврат параметров из хр. процедуры MSSQL   Найти похожие ветки 

 
LionMen ©   (2005-12-30 08:51) [0]

Здравствуйте! У меня такой вопрос. Как в программе написать коды, чтобы при запуска хр. процедуры возвращали параметры, то есть отфильтрованные. У меня возвращает только один параметр.
Программу я не дописал, так как не знаю что дальше писать. Примерно так:
 procedure TForm1.FormCreate(Sender: TObject);
begin
 with ADOStoredProc1 do
  begin
   Parameters.Items[0].Value:="31.0001-05";  // Передает параметр  в процедуру
   ExecProc;
  end;
end;

а в MSSQL процедуру:

CREATE PROCEDURE ASR_TC_ROUT_STR_IZV

@obozn varchar (20)

AS
Declare @name int
DECLARE CT CURSOR FOR SELECT f_key from TC_ROUTE_STRING_IZV where izv = @obozn
OPEN CT
WHILE 1=1 BEGIN
 FETCH FROM CT INTO @name

 IF @@fetch_status=-1
     BREAK
 IF @@fetch_status=-2
     CONTINUE
RETURN @Name
END
DEALLOCATE CT
GO

Я вот не знаю , думаю, что надо использовать DataSet, подскажите пожалуйста!! Буду благодарен!

А вапще я хотел бы вывести все параметры в ListBox!!!


 
evvcom ©   (2005-12-30 09:12) [1]


> У меня возвращает только один параметр.

В твоем коде нет возвращаемых параметров, только входной один.

> CREATE PROCEDURE

и

> RETURN @Name

Ты @Name что ли хочешь получить назад? Я точно не помню, но по-моему то, что ты написал безсмысленно. У тебя процедура и ты хочешь вернуть что-то через return. Это же не функция. В процедуре параметры возвращаются так:
CREATE PROCEDURE ASR_TC_ROUT_STR_IZV
@obozn varchar (20)
@name int OUT
AS

Посмотри синтаксис, вроде там я указал OUT


 
Ega23 ©   (2005-12-30 09:14) [2]

1. На каждый Open Cursor должен быть свой Close Cursor.
2. Читай про output-параметры.
3. Лучше воспользуйся DataSet"ом


 
Begin   (2005-12-30 10:32) [3]

procedure TForm1.FormCreate(Sender: TObject);
begin
with ADOStoredProc1 do
 begin
  Parameters.Items[0].Value:="31.0001-05";  // Передает параметр  в процедуру
  Parameters.AddParameter;
  proc.Parameters[1].Direction := pdOutput;
  ExecProc;
 end;
end;


в MSSQL

CREATE PROCEDURE ASR_TC_ROUT_STR_IZV
@obozn varchar (20),
@name int OUTPUT
AS
select @name = (select f_key from TC_ROUTE_STRING_IZV where izv = @obozn)
GO


 
LionMen ©   (2005-12-30 11:40) [4]

2 All

В делфи есть демо-прога ADODBTest, я смотрел, там в основном DataSetом используется, я бы хотел поподробнее об этом функции, т к в учебниках мало написано. Дело в том, что это прога  выводит все записи в DBGrid, а мне надо в Excel. Так вот, для пробы хотел в ListBox выводил хотя бы одно поле, т е F_KEY из таблицы, отфильтрованные, например, только "31.0001-05".
Я писал программу напрямую с таблицами, только долго работает, полминуты ждать пока прога обрабатывает, т е фильтрует и выводит список F_key в Excel. Я думаю, вы поняли, хочу немного быстрее, какими функциями лучше использовать? Я использую с компонентами ADO. Плиз, опишите все, буду благодарен!


 
MOA ©   (2005-12-30 12:09) [5]

1. Процедура может вернуть только целое значение (Integer) - обычно код завершения удачно/неудачно
2. Чтобы вернуть датасет из процедуры
SELECT @Name
3. Если SQL2000 или 2005 и в процедуре нет модификаций таблиц БД - лучше воспользоваться User defined Function
4. Если хотите вернуть именно входной параметр - evvcom ©   (30.12.05 09:12) [1], Ega23 ©   (30.12.05 09:14) [2], Begin   (30.12.05 10:32) [3]
Удачи!


 
LionMen ©   (2005-12-30 14:29) [6]

Я вижу , вы меня не поняли, или я неправильно сформулировал вопрос.
Вот прога, которую я написал напрямую с таблицей: Медленее работает!!!


procedure TForm1.FormCreate(Sender: TObject);
Var j:integer;
begin
ADOTable1.Active:=true;
ADOTable1.Locate("izv","31.0001-05", [loPartialKey]);

j:=0;
ExcelApplication1.Workbooks.Add(EmptyParam,0);
  repeat
  if  ADOTable1.FieldValues["izv"] = "31.0001-05" then
    begin
      ExcelApplication1.Cells.Item[j+1,1]:=IntToStr(ADOTable1.FieldValues["f_key"]);
      j:=j+1;
    end;
     ADOTable1.Next;
  until ADOTable1.Eof = true;

ADOTable1.Active:=false;

with ExcelApplication1 do
begin
 Connect;
 Visible[1]:=true;
 Disconnect;
end;

end;

Думаю, если вы проанализируете в чем моя проблема, то вы можете мне подсказать лучший вариант! Я хочу, чтобы в SQL тоже работала процедура или функция с возвратом. А у меня их нет.


 
sniknik ©   (2005-12-30 15:06) [7]

датасет однозначно лучше, на все тейблы/сторедпроцы забей.

то что ты хочеш (выборка и перенос в ексель) делается так (если не ошибся гденибудь в букве другой ;)
ADODataSet.CommandText:= "SELECT f_key FROM TC_ROUTE_STRING_IZV WHERE izv=:obozn ORDER BY f_key";
ADODataSet.Parameters.ParamByName("obozn").Value:="31.0001-05";
ADODataSet.Open;

ExcelApplication1.Workbooks.Add(EmptyParam,0);
ExcelApplication1.Cells[1,1].CopyFromRecordset(ADODataSet.Recordset);

> Я хочу, чтобы в SQL тоже работала процедура или функция с возвратом. А у меня их нет.
она сдесь и не нужна.
но если хочется...
CREATE PROCEDURE ASR_TC_ROUT_STR_IZV @obozn varchar (20)
AS
SELECT f_key AS Name FROM TC_ROUTE_STRING_IZV WHERE izv=@obozn ORDER BY f_key
вот это то что ты пытался в [0] "изобразить"


 
LionMen ©   (2006-01-09 09:29) [8]

Здравствуйте! С Новым Годом и Рождеством Христовым!

Для sniknik! Я вижу вы правильно поняли мой вопрос!

ADODataSet.CommandText:= "SELECT f_key FROM TC_ROUTE_STRINGS_IZV WHERE izv=:obozn ORDER BY f_key";
ADODataSet.Parameters.ParamByName("obozn").Value:="31.0001-05";
ADODataSet.Open;

ExcelApplication1.Workbooks.Add(EmptyParam,0);
//Вместо Cells я поменял на Range, добавил параметры в CopyFromRecordset
ExcelApplication1.Cells[1,1].CopyFromRecordset(ADODataSet.Recordset, 1, 1);

Программка вроде ниче, токо вот выдается ошибка "OLE error 800A03EC"!!! (((



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

Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.041 c
4-1131198903
Navi
2005-11-05 16:55
2006.01.22
Как "прикрутить" HTML Help?


14-1135881866
SourseStr
2005-12-29 21:44
2006.01.22
Шифрование и дешифрование текстов по принципу S-Coder ...


3-1132744770
oleggar
2005-11-23 14:19
2006.01.22
ADO+dbf


5-1122596203
Fedja2003
2005-07-29 04:16
2006.01.22
Редактор компонентов 2


3-1132648756
SmileCoder
2005-11-22 11:39
2006.01.22
Иерархическая база данных, с возможностью вставки записий ...





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