Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 28.07.2019
Сообщений: 4

Авторизация и права доступа через ADOQuery: анализ ошибок

28.07.2019, 12:25. Показов 2490. Ответов 7

Студворк — интернет-сервис помощи студентам
Добрый день, форумчане!

У меня есть база данных в Access, в которой я создал таблицу Sotrudniki. Всех сотрудников я поделил на 5 ролей в зависимости от прав доступа (привилегий) к тем или иным базам. Попробовал создать в Делфи 7 форму авторизации (по нажатию кнопки после введения логина и пароля) для каждого из пяти типов сотрудников (в таблице это столбец Роль). После нахождения нужного значения столбца "Роль" процедура должна соединять с нужной формой через ADOQuery1 в DataModule2.
Попытался скомпилировать. И увидел, что где-то не верно понял логику ADOQuery, т.к. после написания проги система выдала сразу два типа ошибок: 1) Incompatible types: 'String' and 'TADOQuery' и 2) Missing operator or semicolon.
Вопрос: в каком символе, операторе или типе данных я допустил ошибку?

Привожу листинг процедуры:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
procedure TForm1.Button1Click(Sender: TObject);
begin
if (Edit1.Text<>'') and (Edit2.Text<>'') then
DataModule2.ADOQuery1.SQL.Clear;
DataModule2.ADOQuery1.SQL.Add('SELECT Отдел, ФИО сотрудника, Должность, Телефон, Разрешение на вход, ID сотрудника, Логин, Пароль, Роль FROM Sotrudniki WHERE Логин='+#39+Edit1.Text+#39);
DataModule2.ADOQuery1.Open;
if DataModule2.ADOQuery1.IsEmpty
  then ShowMessage('Пользователь '+Edit1.Text+' не зарегистрирован ')
  else DataModule2.ADOQuery1.FieldByName('Разрешение на вход')
    if DataModule2.ADOQuery1.FieldByName('Пароль').Value <> Edit2.Text
      then
           ShowMessage('Вы ввели неверный пароль!')
      else
if DataModule2.ADOQuery1('Роль') = 'user' then UserAutorize(Form3)
else
if DataModule2.ADOQuery1('Роль') = 'adm' then UserAutorize(Form4)
else
if DataModule2.ADOQuery1('Роль') = 'dir' then UserAutorize(Form5)
else
if DataModule2.ADOQuery1('Роль') = 'rukotd' then UserAutorize(Form6)
else
if DataModule2.ADOQuery1('Роль') = 'kadry' then UserAutorize(Form7)
end;
Спасибо за внимание.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.07.2019, 12:25
Ответы с готовыми решениями:

Авторизация, права доступа
Добрый день, есть база в Аксесе где есть таблица RAB с полями id_rab, FIO, tip(1-слесарь, 2-бригадир, 3-слесарь не допущенный к работе,...

Авторизация и права доступа (ASP+IIS)
Помогите! Есть задача: База данных пользователей (username/password итд), нужно обеспечить вход в папку 'download' только тем, кто...

C# & SQL авторизация и разные права доступа
Добрый день, Уважаемые форумчане! Делаю БД и надо сделать авторизацию и разные права доступа, т.е. бухгалтер может смотреть финансовые...

7
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
28.07.2019, 12:32
Лучший ответ Сообщение было отмечено AlexZhiv как решение

Решение

Видимо, так:
- в строке 9 нет точки с запятой;
- обращение к значениям полей надо делать след. образом DataModule2.ADOQuery1['Роль']. В этом случае компонент возвращает вариантное значение, которое можно сравнивать со строковыми значениями.
0
0 / 0 / 0
Регистрация: 28.07.2019
Сообщений: 4
28.07.2019, 13:07  [ТС]
Ага. Понял. Большое спасибо! Исправил. После перекомпиляции нашел еще одну ошибку:

Undeclared identifier: 'UserAutorize'

Делфи нашел необъявленный идентификатор. Как и где его объявить? Правильно ли такое объявление? -
Delphi
1
UserAutorize: TForm
Если да, то где это сделать? Если указываешь в скобках
Delphi
1
procedure TForm1.Button1Click(Sender: TObject; UserAutorize: TForm),
появляются новые ошибки.
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
28.07.2019, 13:15
Цитата Сообщение от AlexZhiv Посмотреть сообщение
UserAutorize
Что это за зверь такой (компонент, форма, процедура)? Где он создан и создан ли вообще?
1
0 / 0 / 0
Регистрация: 28.07.2019
Сообщений: 4
28.07.2019, 13:36  [ТС]
Это я пытался ранее создать процедуру авторизации, но потом удалил её, т.к. она работала некорректно. "Но осадок остался".))

В общем, я заменил
Delphi
1
UserAutorize(Form3)
на
Delphi
1
Form3.Show
- и всё у меня заработало. Только нужно было еще почистить запрос SQL от полей, записанных некорректно (после перекомпиляции прога выдавала ошибку оператора в поле 'ФИО сотрудника').

Всем спасибо! Пошел дальше "пилить" проект.
0
5962 / 4538 / 1094
Регистрация: 29.08.2013
Сообщений: 28,150
Записей в блоге: 3
30.07.2019, 10:34
Цитата Сообщение от AlexZhiv Посмотреть сообщение
if DataModule2.ADOQuery1('Роль') = 'user' then UserAutorize(Form3)
else
if DataModule2.ADOQuery1('Роль') = 'adm' then UserAutorize(Form4)
else
if DataModule2.ADOQuery1('Роль') = 'dir' then UserAutorize(Form5)
else
if DataModule2.ADOQuery1('Роль') = 'rukotd' then UserAutorize(Form6)
else
if DataModule2.ADOQuery1('Роль') = 'kadry' then UserAutorize(Form7)
end;
вот это бред
каждой роли нужно назначить ID, потом можно case'ом обработать - это как минимум
зачем потом 4 формы для авторизации городить? 1 не хватит?
или директору нужны красивости и шелест банкнот?

а если ролей 10?

А сам запрос? Ты передаешь в базу логин и пароль, зачем тебе 100500 колонок в ответ?

Delphi
1
2
3
4
5
6
if Trim(e_Login.Text<>'') and e_Password.Text<>'' then
begin
DataModule2.ADOQuery1.SQL.Text:='SELECT Роль FROM Sotrudniki WHERE Логин='+ QuotedStr(e_Login.Text)+' and Пароль= '+QuotedStr(e_Password.Text);
DataModule2.ADOQuery1.Open;
 
end;
1. не забывай очищать Логин от пробелов, Пароль не нужно - там пробел может быть паролем
2. не забывай назначить НОРМАЛЬНЫЕ имена компонентам
3. НОРМАЛЬНЫЕ имена Таблицам. Какие Sotrudniki???
4. Ты используешь Аксесс - какие русские имена у колонок? как ты будешь дальше запросы писать?
вдобавок ты забыл begin .. end
1
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
30.07.2019, 11:35
Ты используешь Аксесс - какие русские имена у колонок? как ты будешь дальше запросы писать
Русские имена допустимы, но использовать их морока, т.к. весь синтаксис SQL или Delphi использует английские буквы и переключаться туда/сюда удовольствие ниже среднего.
1
0 / 0 / 0
Регистрация: 28.07.2019
Сообщений: 4
30.07.2019, 15:22  [ТС]
Понял ошибки. Буду пытаться исправлять. Спасибо за отзывы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.07.2019, 15:22
Помогаю со студенческими работами здесь

Права доступа через htaccess
У дле есть такая фишка если к примеру не кинуть в папку htaccess (с данними прописями ) то папка не будет доступна . К примеру...

Авторизация через ВК // Много ошибок
Доброго времени суток! Делаю авторизацию через вконтакте &lt;?php $hash_vk = $_GET; $app_id = &quot;4167394&quot;; $secret_key =...

Права доступа к Access через Delphi
есть база данных, в ней, в логическом поле отмечено, что доступно пользователю, а что нет. как в делфи это отобразить? т.е. зашел...

Авторизация через cookies c выводом ошибок
Собственно нужно сделать маленький блок авторизации, который в последствии можно разместить в любом месте сайта. Он должен представлять...

Как устанавливать права доступа через chmod??
У меня к Вам такой вопрос!!! Вот, есть написанное на php голосование. Я все скрипты вставляю в html-код страниц, сохраняю их как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru