|
|
|
unc |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 26.12.2010 Репутация: нет Всего: нет |
Есть БД написанная в msq server 10.50.1600.
В делфи создается интерфейс. для входа в БД в делфи создается окно для ввода логина и пароля. В БД на msq server есть 2 таблицы (НЕ ОДНА) откуда берутся логин и пароль. Создана отдельная хранимая процедура, которая выбирает из эттих 2-х таблиц поля, которые определяются процедурой как логин и пароль для входа в БД. то есть чтобы при вводе логина и пароля делфи было понятно к каким таблицам обращаться. Вот эта процедура:
теперь что не получается. В делфи когда созданы все нужные компоненты, среди них есть компонентADOQuery. У него есть свойство SQL. В свойстве SQL в Wide string list Editor нужно прописать запрос на выбор логина и пароля из БД. Простым SELECT * Tipi_gos_organov не отделаешься т к таблицы две, в одной находится логин , в другой пароль. Есть еще хранимая процедура которая присвоила полям 2-х таблиц логин и пароль. Вопрос такой. в свойстве SQL нужно делать запрос к хранимой процедуре либо отдельно к каждой таблице SQL? и как сделать запрос к процедуре? |
|||
|
||||
Akella |
|
|||
Творец Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
Так в чём проблема? Делай к двум таблицам? Или проблема в познаниях SQL? Добавлено через 42 секунды К процедуре, как правило, не делают запрос. Процедуру выполняют. |
|||
|
||||
unc |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 26.12.2010 Репутация: нет Всего: нет |
То есть в свойстве SQL в Wide string list Editor компонента ADOQuery пишу запрос на 2 таблицы? а что делать с процедурой? она тут не нужна? или остается? |
|||
|
||||
kami |
|
||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 3 Всего: 72 |
А еще есть компонент ADOStoredProc, у которого есть метод ExecProc. Вряд ли логин выполняется очень часто, так что можно сделать как-то так:
Добавлено через 2 минуты и 21 секунду Кстати, а разве параметр Result не включен неявно в любую хранимку? Не возникнут коллизии с именованием явного и неявного параметров? |
||||
|
|||||
unc |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 26.12.2010 Репутация: нет Всего: нет |
ok. это делается в методе ExecProc компонента ADOStoredProc. и что означает вот эта фраза "Вряд ли логин выполняется очень часто", расшифруйте пожалуста. sp1.Parameters.ParamByName('@Login').Value:=...; ... - значения у меня определены в 1-ой таблице. Хранимка делалась, чтобы определить в какой таблице логин в какой пароль. а вот эту строчку как понять? в свойстве SQL ADOQuery не делать запрос?
включен в хранимку. |
||||||
|
|||||||
kami |
|
||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 3 Всего: 72 |
Parameters.Refresh - достаточно затратная операция.
Неправда. Хранимка делалась, чтобы определить - соответствует ли пароль логину и вернуть 1 - если да и 0 - в противном случае. В данном контексте рассматривайте хранимку как "обычную" функцию. На вход ей подаются параметры (логин и пароль), на выходе получается результат. Вот и я об этом. Это сообщение отредактировал(а) kami - 8.1.2014, 13:27 |
||||
|
|||||
unc |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 26.12.2010 Репутация: нет Всего: нет |
как вы закрутили. логин выполняется при каждом входе.
святая правда.
есть ли методы лечения "коллизии с именованием явного и неявного параметров" и чем мне это грозит при выполнении? все таки запрос в свойстве SQL компонента ADOQuery остается пустым? - никак не могу понять главного... |
||||||||
|
|||||||||
kami |
|
||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 3 Всего: 72 |
А сколько раз в секунду производится вход? Не думаю, что часто, посему - и обращать внимания на это не надо. Правда - что? Мое или ваше высказывание?
Не знаю. Может, и всё гладко будет: практика - критерий истины.
Да не главное это. Отстранитесь вы на минуту от всех этих ADO, SQL и тому подобных, и посмотрите ширше: есть процедура проверки пароля, уже реализованная. Как - не суть важно сейчас. Есть (вернее - должен быть) запрос, который еще написать надо нормально. Выполнять этот запрос по сути должен то же самое - проверять пароль. Итоговый код должен выглядывать так: ввод логина и пароля пользователем если (логин и пароль валидны) - продолжаем работу, иначе - не продолжаем. Вот в принципе и всё. Вместо "логин и пароль валидны" подставляем либо результат, полученный через хранимку, либо через запрос. Использовать и то и другое - избыточно, не так ли? |
||||
|
|||||
unc |
|
||||||||||||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 26.12.2010 Репутация: нет Всего: нет |
боюсь спросить если 10 раз в секунду производится вход, какая будет процедура. думаю развертка будет огого.
ваше.
да, избыточно. почему всегда так сложно получить определенный ответ, всегда все объясняют издалека. Значит я делаю все в методе ExecProc компонента ADOStoredProc и свойство SQL компонента ADOQuery не нужно? По матчасти это свойство SQL надо делать? вот я и не могу понять нужно не нужно... Многоточие в этой строчке как понять: sp1.Parameters.ParamByName('@Login').Value:=...; ???? |
||||||||||||
|
|||||||||||||
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |