Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2012, 13:02   #11
Dandy777
Пользователь
 
Регистрация: 04.09.2012
Сообщений: 25
По умолчанию

Продвигаюсь с небольшими костылями или с большими

Я плохо знаком с возможностями ExecProc и Open посему код на 99.9% кривой.
ExecProc возвращает RowCount но не возвращает ФИО, а Open получается возвращает ФИО но не возвращает RowCount (если я правильно выразился с терминами);

Посему у меня получается следующая проблема:
Stored Procedure
Код:
USE [PlatSys]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[EXISTS_USER] 

@LastName nvarchar(20)

AS
BEGIN

	SET NOCOUNT ON;

SELECT LastName, FirstName, MiddleName FROM Users WHERE LastName LIKE '%' + @LastName + '%' 
RETURN @@Rowcount
END
Код Delphi:
Код:
procedure TForm1.Button4Click(Sender: TObject);
var
TXT1,TXT2,TXT3 : String;
begin
DataModule1.ProcExists.Close;
DataModule1.ProcExists.ProcedureName:='EXISTS_USER';
DataModule1.ProcExists.Parameters.Refresh;
DataModule1.ProcExists.Parameters.ParamByName('@LastName').Value:=Edit1.Text;
DataModule1.ProcExists.ExecProc;
if DataModule1.ProcExists.Parameters.ParamByName('@RETURN_VALUE').Value <>0 then
begin
DataModule1.ProcExists.Close;
DataModule1.ProcExists.ProcedureName:='EXISTS_USER';
DataModule1.ProcExists.Parameters.Refresh;
DataModule1.ProcExists.Parameters.ParamByName('@LastName').Value:=Edit1.Text;
DataModule1.ProcExists.Open;
TXT1:=DataModule1.ProcExistsLastName.AsString;
TXT2:=DataModule1.ProcExistsFirstName.AsString;
TXT3:=DataModule1.ProcExistsMiddlename.AsString;
Application.MessageBox(Pchar('В базе существуют следующие пользователи'+' '+TXT1+' '+TXT2+' '+TXT3),'Проверка наличия пользователя',mb_iconWarning or mb_YesNo);


Вот такое предупреждение я вывожу, но как видно в базе таких пользователей существует 2:
1) Можно как-то в сообщении вывести 2-х пользователей или если их будет больше то всех пользователей которые подходят под запрос;
2) Можно как-то сделать так что бы текст "В базе существуют следующие пользователи" был на одной строка, а список пользователей начинался с другой строки.
Dandy777 вне форума Ответить с цитированием
Старый 18.09.2012, 13:17   #12
Dandy777
Пользователь
 
Регистрация: 04.09.2012
Сообщений: 25
По умолчанию

2) Можно как-то сделать так что бы текст "В базе существуют следующие пользователи" был на одной строка, а список пользователей начинался с другой строки.

Остался не решенным пункт 1-й.

Последний раз редактировалось Dandy777; 18.09.2012 в 13:17. Причина: исправил
Dandy777 вне форума Ответить с цитированием
Старый 18.09.2012, 15:52   #13
Dandy777
Пользователь
 
Регистрация: 04.09.2012
Сообщений: 25
По умолчанию

Задачу я решил:

Код:
procedure TForm1.Button4Click(Sender: TObject);
var
text : String;
begin
DataModule1.ProcExists.Close;
DataModule1.ProcExists.ProcedureName:='EXISTS_USER';
DataModule1.ProcExists.Parameters.Refresh;
DataModule1.ProcExists.Parameters.ParamByName('@LastName').Value:=Edit1.Text;
DataModule1.ProcExists.ExecProc;
if DataModule1.ProcExists.Parameters.ParamByName('@RETURN_VALUE').Value <>0 then
begin
DataModule1.ProcExists.Close;
DataModule1.ProcExists.ProcedureName:='EXISTS_USER';
DataModule1.ProcExists.Parameters.Refresh;
DataModule1.ProcExists.Parameters.ParamByName('@LastName').Value:=Edit1.Text;
DataModule1.ProcExists.Open;
DataModule1.ProcExists.First;
text:='В базе существуют следующие пользователи:'+#13#10;
while not DataModule1.ProcExists.Eof DO
begin
text := text +DataModule1.ProcExists.FieldByName('LastName').AsString+' '+
                     DataModule1.ProcExists.FieldByName('FirstName').AsString+' '+
                     DataModule1.ProcExists.FieldByName('Middlename').AsString+' '+#13#10;
DataModule1.ProcExists.Next;
end;
Application.MessageBox(Pchar(text),'Проверка наличия пользователя',mb_iconWarning or mb_YesNo);
end
else
ShowMessage('Пользователь с данной фамилией не обнаружен');
end;
Результат:



Всем спасибо кто откликнулся
Dandy777 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Срипт для дублирования sergunya233 JavaScript, Ajax 1 07.06.2010 12:57
Утилита низкоуровнего копирования(дублирования) дисков 2def Помощь студентам 0 18.12.2009 03:34
Предотвращение отрицательной позиции. Alex Cones Общие вопросы Delphi 4 27.07.2009 13:43
Предотвращение ошибки Vladya Помощь студентам 5 02.06.2009 19:23