Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Множественый выбор из хранимой процедуры (Bogdan_Dima) 10/02/2009 - 14:54:06
      Re: Множественый выбор из хранимой процедуры (vfvtnjd) 30/11/2011 - 12:00:55

> Original message text:
> From: Bogdan_Dima - 10/02/2009 - 14:54:06
> Subject:Множественый выбор из хранимой процедуры
> -----------------
> Работаю со следующей связкой delphi7 + mysql5 + zeos 6.6.4 выбираю данные в delphi при помощи хранимых процедур и
> возник следующий вопрос.
> Для выборки одиночных данных разобрался получается такой код
>
> таблица people
>
> id_people| surname | name |
> 0 | Иванов | Иван |
> 1 | Петров | Петр |
> 2 | Артемов | Артем |
>
> хранимая процедура:
>
> Допустим для получения общего количества людей
>
> CREATE DEFINER=`root`@`%` PROCEDURE `proc_count`(In param1 TEXT, Out res text)
> BEGIN
> SELECT count(*) INTO res FROM `people`;
> END
>
>
> Вот выборка в delphi
>
> procedure TMainForm.Button6Click(Sender: TObject);
> var LQuery: TZQuery;
> res:string;
> begin
> LQuery:=TZQuery.Create(self);
> With LQuery do
> begin
> Connection:=DataModule6.ZConnection1;
> SQL.Text:='call proc_count(:p1, @v)';
> ShowMessage(LQuery.SQL.Text);
> ExecSQL;
> SQL.Text:='select @v';
> open;
> res:=(FieldByName('@v').Value);
> Edit_Count_People.Text:=res;
> end;
> end;
>
> А вот как быть если множественная выборка допустим для выборки всех фамилий
>
> CREATE DEFINER=`root`@`%` PROCEDURE `all_surname`(In param1 TEXT, Out res text, Out kol text)
> BEGIN
> SELECT Count(Surname) Into kol FROM `people`;
> SELECT Surname INTO res FROM `people`;
> END
>
>
> Как выбрать их в delphi допустим все значения записать в тот же edit.text?
> если бы был аналог php mysql_fetch_array то было бы замечательно а тут даже не знаю
>
> procedure TMainForm.Button6Click(Sender: TObject);
> var LQuery: TZQuery;
> //Наверно следует сделать массив для будущей выборки
> res:array [0..100] of string; //хотя в принципе лучше использовать динамический массив но в примере не столь важно
> i,kolich:integer;
> begin
> LQuery:=TZQuery.Create(self);
> With LQuery do
> begin
> Connection:=DataModule6.ZConnection1;
> SQL.Text:='call all_surname(:p1, @v, @kol)';
> ShowMessage(LQuery.SQL.Text);
> open //кстати я так понял что при выборке нужно использовать open а в запросах не возвращающих данные используется разъясните так или не так ExecSQL;
>
> SQL.Text:='select @kol';//для того чтобы узнать количество записей
> open;
> kolich:=strtoint(FieldByName('@kol').Value);
> close;// вопрос надо или нет
>
> SQL.Text:='select @v';//для того чтобы выбрать фамилии
> open;
> //теперь запустить цикл и заполнить массив
> for i:=0 to kolich do
> begin
> res[i]:=(FieldByName('@v').Value); // вот здесь как то не так делать надо потому что получается что
> я пытаюсь всю выборку в каждый элемент запихнуть. Соответственно выдается ошибка что выбрано больше одной записи
> Edit_Select_People.Text:=Edit_Select_People.Text+' '+res[i];
> end;
> end;
> end;
>
>
> В php проще
> $Result:=mysql_query('Select * from People');
>
> while ($Row = mysql_fetch_array ($Result))
> {
> echo "$Row['name']";
> echo "$Row['surname']";
> }
>
> а как в delphi чего-то не догадаюсь никак
>


From: vfvtnjd - 30/11/2011 - 12:00:55
Subject:Множественый выбор из хранимой процедуры
-----------------
Множественные операторы SELECT генерируют и множествен­ные наборы результатов, поэтому клиенту следует использовать клиентскую библиотеку MySQL, поддерживающую множественные наборы результатов. Это означает, что кли­ентская библиотека должна быть из версии MySQL, по крайней мере, не ниже 4.1.


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
40774



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |