Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создание логина и пароля для входа в БД 
:(
    Опции темы
unc
Дата 30.12.2013, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 26.12.2010

Репутация: нет
Всего: нет



Есть БД написанная в msq server 10.50.1600.
В делфи создается интерфейс. для входа в БД в делфи создается окно для ввода логина и пароля.
В БД на msq server есть 2 таблицы (НЕ ОДНА) откуда берутся логин и пароль.
Создана отдельная хранимая процедура, которая выбирает из эттих 2-х таблиц поля, которые определяются процедурой как логин и пароль для входа в БД. то есть чтобы при вводе логина и пароля делфи было понятно к каким таблицам обращаться. Вот эта процедура:

Код

USE [new49]
GO
-- ================================================
-- Template generated from Template Explorer using:
-- Create Procedure (New Menu).SQL
--
-- Use the Specify Values for Template Parameters 
-- command (Ctrl-Shift-M) to fill in the parameter 
-- values below.
--
-- This block of comments will not be included in
-- the definition of the procedure.
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:     <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
CREATE PROCEDURE sp_CheckPassword

@Login varchar(max),
@Password varchar(max),
@Result int OUTPUT
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
select @Result = case when exists(
select * from [dbo].[Gos_organ] g 
join [dbo].[Tipi_gos_organov] t on t.Kod_tipa_organa = g.Kod_tipa_organa
where t.Rasshifrovka_koda_tipa_organa = @Login and g.Parol_dlia_vxoda_v_IS = @Password) 
then 1 else 0 end

END


теперь что не получается. 
В делфи когда созданы все нужные компоненты, среди них есть компонентADOQuery. У него есть свойство SQL.
В свойстве SQL в Wide string list Editor нужно прописать запрос на выбор логина и пароля из БД. Простым SELECT * Tipi_gos_organov не отделаешься т к таблицы две, в одной находится логин , в другой пароль. 
Есть еще хранимая процедура которая присвоила полям 2-х таблиц логин и пароль.
Вопрос такой. в свойстве SQL нужно делать запрос к хранимой процедуре либо отдельно к каждой таблице SQL?
и как сделать запрос к процедуре?




PM MAIL   Вверх
Akella
  Дата 30.12.2013, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(unc @  30.12.2013,  01:13 Найти цитируемый пост)
 Простым SELECT * Tipi_gos_organov не отделаешься т к таблицы две, в одной находится логин , в другой пароль. 

Так в чём проблема? Делай к двум таблицам? Или проблема в познаниях SQL?

Добавлено через 42 секунды
Цитата(unc @  30.12.2013,  01:13 Найти цитируемый пост)
и как сделать запрос к процедуре?


К процедуре, как правило, не делают запрос. Процедуру выполняют.
PM MAIL   Вверх
unc
Дата 5.1.2014, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 26.12.2010

Репутация: нет
Всего: нет



Цитата(Akella @ 30.12.2013,  10:41)
Цитата(unc @  30.12.2013,  01:13 Найти цитируемый пост)
 Простым SELECT * Tipi_gos_organov не отделаешься т к таблицы две, в одной находится логин , в другой пароль. 

Так в чём проблема? Делай к двум таблицам? Или проблема в познаниях SQL?

Добавлено @ 10:42
Цитата(unc @  30.12.2013,  01:13 Найти цитируемый пост)
и как сделать запрос к процедуре?


К процедуре, как правило, не делают запрос. Процедуру выполняют.

То есть в свойстве SQL в Wide string list Editor компонента ADOQuery пишу запрос на 2 таблицы?

а что делать с процедурой? она тут не нужна? или остается?
PM MAIL   Вверх
kami
Дата 5.1.2014, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 72



Цитата(unc @  30.12.2013,  01:13 Найти цитируемый пост)
среди них есть компонентADOQuery....и как сделать запрос к процедуре?

А еще есть компонент ADOStoredProc, у которого есть метод ExecProc.

Вряд ли логин выполняется очень часто, так что можно сделать как-то так:
Код

sp1.ProcedureName:='sp_CheckPassword';
sp1.Parameters.Refresh;
sp1.Parameters.ParamByName('@Login').Value:=...;
...
sp1.ExecProc;
IsUserLogIn:=sp1.Parameters.ParamByName('@Result').Value<>0;


Добавлено через 2 минуты и 21 секунду
Кстати, а разве параметр Result не включен неявно в любую хранимку? Не возникнут коллизии с именованием явного и неявного параметров?
PM MAIL WWW   Вверх
unc
Дата 8.1.2014, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 26.12.2010

Репутация: нет
Всего: нет



Цитата(unc @  30.12.2013,  01:13 Найти цитируемый пост)
среди них есть компонентADOQuery....и как сделать запрос к процедуре?
А еще есть компонент ADOStoredProc, у которого есть метод ExecProc.

Вряд ли логин выполняется очень часто, так что можно сделать как-то так:
Код

sp1.ProcedureName:='sp_CheckPassword';
sp1.Parameters.Refresh;
sp1.Parameters.ParamByName('@Login').Value:=...;
...
sp1.ExecProc;
IsUserLogIn:=sp1.Parameters.ParamByName('@Result').Value<>0;



ok. это делается в методе ExecProc компонента ADOStoredProc. и что означает вот эта фраза "Вряд ли логин выполняется очень часто", расшифруйте пожалуста. 

sp1.Parameters.ParamByName('@Login').Value:=...;
... - значения у меня определены в 1-ой таблице. Хранимка делалась, чтобы определить в какой таблице логин в какой пароль. а вот 
эту строчку как понять?  

в свойстве SQL ADOQuery не делать запрос? 


Цитата(unc @  30.12.2013,  01:13 Найти цитируемый пост)

Добавлено @ 23:58
Кстати, а разве параметр Result не включен неявно в любую хранимку? Не возникнут коллизии с именованием явного и неявного параметров?

включен в хранимку. 

PM MAIL   Вверх
kami
Дата 8.1.2014, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 72



Цитата(unc @  8.1.2014,  01:46 Найти цитируемый пост)
и что означает вот эта фраза "Вряд ли логин выполняется очень часто", расшифруйте пожалуста.

Parameters.Refresh - достаточно затратная операция.

Цитата(unc @  8.1.2014,  01:46 Найти цитируемый пост)
Хранимка делалась, чтобы определить в какой таблице логин в какой пароль

Неправда. Хранимка делалась, чтобы определить - соответствует ли пароль логину и вернуть 1 - если да и 0 - в противном случае.
В данном контексте рассматривайте хранимку как "обычную" функцию. На вход ей подаются параметры (логин и пароль), на выходе получается результат.

Цитата(unc @  8.1.2014,  01:46 Найти цитируемый пост)
включен в хранимку. 

Вот и я об этом.

Это сообщение отредактировал(а) kami - 8.1.2014, 13:27
PM MAIL WWW   Вверх
unc
Дата 9.1.2014, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 26.12.2010

Репутация: нет
Всего: нет



Цитата(unc @  8.1.2014,  01:46 Найти цитируемый пост)
Цитата(unc @  30.12.2013,  01:13 Найти цитируемый пост)
среди них есть компонентADOQuery....и как сделать запрос к процедуре?
А еще есть компонент ADOStoredProc, у которого есть метод ExecProc.

Вряд ли логин выполняется очень часто, так что можно сделать как-то так:
Выделить всёкод Pascal/Delphi
1:
2:
3:
4:
5:
6:
sp1.ProcedureName:='sp_CheckPassword';
sp1.Parameters.Refresh;
sp1.Parameters.ParamByName('@Login').Value:=...;
...
sp1.ExecProc;
IsUserLogIn:=sp1.Parameters.ParamByName('@Result').Value<>0;

ok. это делается в методе ExecProc компонента ADOStoredProc. и что означает вот эта фраза "Вряд ли логин выполняется очень часто", расшифруйте пожалуста. 

sp1.Parameters.ParamByName('@Login').Value:=...;
... - значения у меня определены в 1-ой таблице. Хранимка делалась, чтобы определить в какой таблице логин в какой пароль. а вот 
эту строчку как понять?  

в свойстве SQL ADOQuery не делать запрос? 


Цитата(unc @  8.1.2014,  01:46 Найти цитируемый пост)
и что означает вот эта фраза "Вряд ли логин выполняется очень часто", расшифруйте пожалуста.
Parameters.Refresh - достаточно затратная операция.

как вы закрутили. логин выполняется при каждом входе.

Цитата(unc @  8.1.2014,  01:46 Найти цитируемый пост)
Хранимка делалась, чтобы определить в какой таблице логин в какой пароль
Неправда. Хранимка делалась, чтобы определить - соответствует ли пароль логину и вернуть 1 - если да и 0 - в противном случае.

святая правда.

Цитата(unc @  8.1.2014,  01:46 Найти цитируемый пост)

В данном контексте рассматривайте хранимку как "обычную" функцию. На вход ей подаются параметры (логин и пароль), на выходе получается результат.

Цитата(unc @  8.1.2014,  01:46 Найти цитируемый пост)
включен в хранимку. 
Вот и я об этом.

есть ли методы лечения "коллизии с именованием явного и неявного параметров" и чем мне это грозит при выполнении?
все таки запрос в свойстве SQL компонента ADOQuery остается пустым? - никак не могу понять главного...

PM MAIL   Вверх
kami
Дата 9.1.2014, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 72



Цитата(unc @  9.1.2014,  00:45 Найти цитируемый пост)
как вы закрутили. логин выполняется при каждом входе.

А сколько раз в секунду производится вход? Не думаю, что часто, посему - и обращать внимания на это не надо.

Цитата(unc @  9.1.2014,  00:45 Найти цитируемый пост)
святая правда.

Правда - что? Мое или ваше высказывание?

Цитата(unc @  9.1.2014,  00:45 Найти цитируемый пост)
есть ли методы лечения "коллизии с именованием явного и неявного параметров" и чем мне это грозит при выполнении?

Не знаю. Может, и всё гладко будет: практика - критерий истины.

Цитата(unc @  9.1.2014,  00:45 Найти цитируемый пост)
все таки запрос в свойстве SQL компонента ADOQuery остается пустым? - никак не могу понять главного...

Да не главное это. Отстранитесь вы на минуту от всех этих ADO, SQL и тому подобных, и посмотрите ширше:

есть процедура проверки пароля, уже реализованная. Как - не суть важно сейчас.
Есть (вернее - должен быть) запрос, который еще написать надо нормально. Выполнять этот запрос по сути должен то же самое - проверять пароль.

Итоговый код должен выглядывать так:
  ввод логина и пароля пользователем
  если (логин и пароль валидны) - продолжаем работу, иначе - не продолжаем.

Вот в принципе и всё. Вместо "логин и пароль валидны" подставляем либо результат, полученный через хранимку, либо через запрос. Использовать и то и другое - избыточно, не так ли?
PM MAIL WWW   Вверх
unc
Дата 19.2.2014, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 26.12.2010

Репутация: нет
Всего: нет



Цитата(unc @  9.1.2014,  00:45 Найти цитируемый пост)
как вы закрутили. логин выполняется при каждом входе.

Цитата

А сколько раз в секунду производится вход? Не думаю, что часто, посему - и обращать внимания на это не надо.

боюсь спросить если 10 раз в секунду производится вход, какая будет процедура. думаю развертка будет огого.


Цитата(unc @  9.1.2014,  00:45 Найти цитируемый пост)
святая правда.

Цитата

Правда - что? Мое или ваше высказывание?

ваше.

Цитата(unc @  9.1.2014,  00:45 Найти цитируемый пост)
есть ли методы лечения "коллизии с именованием явного и неявного параметров" и чем мне это грозит при выполнении?

Цитата

Не знаю. Может, и всё гладко будет: практика - критерий истины.


Цитата(unc @  9.1.2014,  00:45 Найти цитируемый пост)
все таки запрос в свойстве SQL компонента ADOQuery остается пустым? - никак не могу понять главного...

Цитата

Да не главное это. Отстранитесь вы на минуту от всех этих ADO, SQL и тому подобных, и посмотрите ширше:

есть процедура проверки пароля, уже реализованная. Как - не суть важно сейчас.
Есть (вернее - должен быть) запрос, который еще написать надо нормально. Выполнять этот запрос по сути должен то же самое - проверять пароль.

Итоговый код должен выглядывать так:
  ввод логина и пароля пользователем
  если (логин и пароль валидны) - продолжаем работу, иначе - не продолжаем.

Вот в принципе и всё. Вместо "логин и пароль валидны" подставляем либо результат, полученный через хранимку, либо через запрос. Использовать и то и другое - избыточно, не так ли?

да, избыточно.
почему всегда так сложно получить определенный ответ, всегда все объясняют издалека.smile
Значит я делаю все в методе ExecProc компонента ADOStoredProc и свойство SQL компонента ADOQuery не нужно? По матчасти это свойство SQL надо делать? вот я и не могу понять нужно не нужно...
 
Многоточие в этой строчке как понять: 
sp1.Parameters.ParamByName('@Login').Value:=...;  ????
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1328 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.