Определить наличие пользователя в FB 2.1

Администирование клиентской и серверной части InterBase, Firebird, Yaffil. Настройка файла конфигурации и т.п.

Модераторы: kdv, Alexey Kovyazin

Ответить
mult
Сообщения: 5
Зарегистрирован: 15 апр 2010, 11:22

Определить наличие пользователя в FB 2.1

Сообщение mult » 15 апр 2010, 12:10

Зарегистрированы пользователи в FB 2.1 через IBExpert. Как из программы (D2007) определить наличие этих пользователей в базе? Говорят существуют какие-то API сервисы через которые можно получить подобную информацию, где бы это прочитать?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: Определить наличие пользователя в FB 2.1

Сообщение Dimitry Sibiryakov » 15 апр 2010, 13:57

Про "API сервисы" было бы логично читать в API Guide. Разве нет?


mult
Сообщения: 5
Зарегистрирован: 15 апр 2010, 11:22

Re: Определить наличие пользователя в FB 2.1

Сообщение mult » 16 апр 2010, 13:48

Скачал указанную программку, подключил к учебной базе. При попытке вести имя и пароль существующего пользователя выдала такое сообщение "Table unknown RDB$USERS" ? Но ведь она существует ! И gsec.exe работает, в чём же дело?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Определить наличие пользователя в FB 2.1

Сообщение kdv » 16 апр 2010, 14:51

используйте отладчик Delphi. У меня такой проблемы нет. ФБ 2.1 + admin.exe. Разве что при логине выдает feature not supported, но это относится к ServerProperties и т.п., что ФБ не поддерживает.

Или просто ищите примеры использования TIBSecurityService, в частности они однозначно есть на sql.ru.

mult
Сообщения: 5
Зарегистрирован: 15 апр 2010, 11:22

Re: Определить наличие пользователя в FB 2.1

Сообщение mult » 16 апр 2010, 16:14

Ошибка возникает в процедуре FetchUserInfo, описанная в модуле IBServices. В принципе там всё довольно просто. Если сервер Local, то DataBaseName:= UserDatabase, прописанный в IBSecurityService и запрос FIBSQL.SQL.Text := 'SELECT * FROM RDB$USERS'; Если возникает ошибка "Table unknown RDB$USERS", то выходит, что DataBaseName:= UserDatabase не проходит. Но выяснить это не могу, потому как IBServices модуль откомпилированный и поставить там точку прерывания нельзя. Что делать?
А на SQL.RU примеров использования весьма скудно и мою проблему не решают. Что делать ?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Определить наличие пользователя в FB 2.1

Сообщение kdv » 16 апр 2010, 22:02

Вообще-то в procedure TIBSecurityService.FetchUserInfo; написано

Код: Выделить всё

if UserDatabase = '' then
  begin
указывать свойство UserDatabase никто не заставлял. Может, зачем-то это делается в коде примера admin, но обычно это никто не делает.

А в Firebird с версии 2.0 не разрешает явный коннект к БД пользователей, отсюда и ошибка у Вас.

mult
Сообщения: 5
Зарегистрирован: 15 апр 2010, 11:22

Re: Определить наличие пользователя в FB 2.1

Сообщение mult » 17 апр 2010, 08:26

Невероятно, получилось. Столько времени угрохал из-за такой ерунды, и даже мысли не возникло убрать эту UserDataBase. Единственное смутное подозрение всвё-таки терзало, почему UserDataBase, а не как всегда DataBase. И на тебе, как всё просто. Огромное спасибо тебе, kdv.
Но попутно возник маленький вопрос. Когда получил в Memo список пользователей FirstName почему-то не отображает русские буквы. В свойствах фонта поставил RUSSIAN_CHARSET, шрифт самый, что ни на есть, русский Times New Roman. Да вот ни хрена, пишет на албанском и всё. В IBExpert всё нормально, а здесь нет. Что я ещё упустил? К стати, в примере AdminTool тоже русские не пишет.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Определить наличие пользователя в FB 2.1

Сообщение kdv » 17 апр 2010, 16:46

В свойствах фонта поставил RUSSIAN_CHARSET
убиться можно. каким боком связаны кодировка символов и шрифт? :-) я всю жизнь работаю с ansi_charset в IBE, и никогда не трогал эту настройку.

А русских букв в именах пользователя не будет, потому что там (в rdb$users) столбцы с charset none. Посмотрите структуру этой таблицы, если интересно.

mult
Сообщения: 5
Зарегистрирован: 15 апр 2010, 11:22

Re: Определить наличие пользователя в FB 2.1

Сообщение mult » 18 апр 2010, 07:42

каким боком связаны кодировка символов и шрифт?
Просто у меня в Memo стоял шрифт system, а он не всегда отображает русские символы, поэтому и поcтавил Times. А заодно и RUSSIAN_CHARSET. Я ведь пробовал. :wink:
А русских букв в именах пользователя не будет
Не будет так не будет. Придётся эту информацию хранить в отдельной таблице. Спасибо за всё.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: Определить наличие пользователя в FB 2.1

Сообщение Dimitry Sibiryakov » 18 апр 2010, 13:59

kdv писал(а):убиться можно. каким боком связаны кодировка символов и шрифт? :-) я всю жизнь работаю с ansi_charset в IBE, и никогда не трогал эту настройку.
Держу пари, при этом ты всегда работал с локализованной Windows или ставил "Язык для non-unicode программ" (который и определяет какая кодовая страница будет иметь титул "ANSI") в "Русский", что эффективно приводит ANSI_CHARSET к RUSSIAN_CHARSET.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Определить наличие пользователя в FB 2.1

Сообщение kdv » 21 апр 2010, 01:33

возможно. хотя до определенного момента работал с английскими виндами (с 1251 локалью). Использовал-ли я в те года IBE - не помню.

Ответить