powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Подключение к Access с авторизацией
7 сообщений из 7, страница 1 из 1
Подключение к Access с авторизацией
    #38287205
trickster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Требуется организовать подключение к базе через авторизацию пользователя. Идеально - с учетом всех профилей БД, минимум - простой админский вход. Подключение происходит через ini. Используется РВ 11.5 и Аксесс 2003.
Основное руководство: урок в мануале .
Извините за многабукв, но, в надежде на помощь, постаралась предварить возможные вопросы)

Случай 1 : защищенная БД, простое подключение.
Application open() :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
n_diplom2_connectservice lnv_connectserv

this.ToolBarFrameTitle = "MDI Application Toolbar"
this.ToolBarSheetTitle = "MDI Application Toolbar"

lnv_connectserv = Create using "n_diplom2_connectservice"

 If lnv_connectserv.of_ConnectDB ( ) = 0 Then
	Open ( w_diplom_frame  )
End if

Destroy lnv_connectserv


Database profile:

SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN=medinfo_access;UID=UZER;PWD=therapy'"
Строка DBParm в n_diplom2_connectservice для ini-файла:
Код: plaintext
1.
as_dbparm = ProfileString ( ls_inifile, "Database", "DBParm", "ConnectString='DSN=medinfo_access;UID=UZER;PWD=therapy'")


Результат:

и т.д. для остальных таблиц. Т.е., авторизацию не проходит (или не распознает права?), хотя в профиле БД соединение установлено. Если база открытая - всё работает.

Случай 2: Открытая БД + авторизация из мануала.
Application open() :

Код: plaintext
1.
2.
3.
4.
this.ToolBarFrameTitle = "MDI Application Toolbar"
this.ToolBarSheetTitle = "MDI Application Toolbar"

Open ( w_diplom_frame  )


Код кнопки подключения в окнe авторизации:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
gnv_connect = CREATE n_diplom_connectservice

string ls_database, ls_userid, ls_password

ls_userid = Trim ( sle_userid.text )
ls_password = Trim ( sle_password.text )
ls_database="ConnectString='DSN=medinfo_access;"

SQLCA.userid = ls_userid
SQLCA.dbpass = ls_password
SQLCA.DBParm = ls_database + "UID=" + &
			ls_userid + ";PWD=" + ls_password + "'"

IF gnv_connect.of_ConnectDB ( ) = 0 THEN
			Close (parent)
END IF

Строки as_userid, as_dbpass, as_dbparm в n_diplom_connectservice для ini-файла закомментированы, как и в мануале.
Результат: окно входа успешно закрывается, БД подключается в любом случае, не зависимо от того, что введено/не введено.

Случай 3 : Закрытая БД + предыдущий код.
Результат: не зависимо от введенных данных, окно авторизации закрывается, а при вызове DW появляется та же ошибка (см. скрин).

Что я упускаю? За что, в конечном итоге, отвечают логин и пароль в профиле БД? Буду благодарна за пинок в нужном направлении.
...
Рейтинг: 0 / 0
Подключение к Access с авторизацией
    #38287441
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что за код в of_ConnectDB()?
У вас наверное пользователь что-то читает при открытии, скажем в таблице dept.
Должно быть что-то вроде
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
string DBMS,DSN,UID,PWD,ls_connect
boolean ac
DBMS = ProfileString(env.IniFile,"Connect","DBMS","ODBC")
ac = (upper(ProfileString(env.IniFile,"Connect","AutoCommit","False"))="TRUE")
DSN = ProfileString(env.IniFile,"Connect","DSN","medinfo_access")
UID = sle_user.text
PWD = sle_pass.text
SetProfileString(env.IniFile,"Connect","UID",UID)
ls_connect = "'DSN=" + DSN+";UID="+UID+";PWD="+PWD+"', "+"ConnectOption='SQL_DRIVER_NOPROMPT'"
SQLCA.DBMS = DBMS
SQLCA.AutoCommit = ac
SQLCA.DBParm = "ConnectString="+ls_connect
SQLCA.logid = UID
sqlca.logpass = PWD
connect using sqlca;


И не забудьте зайти и создать своего пользователя UZER, а также дать ему необходимые права
...
Рейтинг: 0 / 0
Подключение к Access с авторизацией
    #38287504
trickster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spas2001 ,
да, ошибка возникает при попытке получить данные из DW, которое использует эту таблицу.
Код of_ConnectDB() - стандартный, сгенерированный при создании connectservice.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Connect using SQLCA;

If SQLCA.SQLCode <> 0 Then
	MessageBox ("Ошибка при подключении к базе данных", SQLCA.SQLErrText )
End If

Return SQLCA.SQLCode


А Ваш структурно похож на код для окна авторизации, только использует ini-файл. Получается, он должен быть в этой функции?

авторИ не забудьте зайти и создать своего пользователя UZER, а также дать ему необходимые права
Уточните, пожалуйста: Вы имеете в виду БД, или права дублируются в программе?
...
Рейтинг: 0 / 0
Подключение к Access с авторизацией
    #38287843
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Права пользователю даются в БД. Соответственно тот пользователь который подключается должен иметь возможность читать данные как минимум и подключаться к БД. Через DatabasePainter у вас какой пользователь забит? Вот того и попробуйте вписать.
...
Рейтинг: 0 / 0
Подключение к Access с авторизацией
    #38287940
trickster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spas2001 , пользователь с правами в БД есть, в DatabasePainter указан он же, при чистом подключении без запроса пароля (как в случае 1) та же ошибка. Получается, что, при заведомо работающей в БД учетке пользователя, неверно происходит получение его данных в РВ.
Добавила информацию о подключении в of_ConnectDB() - результат тот же.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
ls_connect = "'DSN=med"+";UID=Admin"+";PWD=123"+"', "+"ConnectOption='SQL_DRIVER_NOPROMPT'"
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = True
SQLCA.DBParm = "ConnectString="+ls_connect
SQLCA.logid = "Admin"
sqlca.logpass = "123"

Connect using SQLCA;

If SQLCA.SQLCode <> 0 Then
	MessageBox ("Cannot Connect to Database", SQLCA.SQLErrText )
End If

Return SQLCA.SQLCode


Скажите, а РВ при подключении всё-таки использует данные _ofGetConnectionInfo() или of_ConnectDB()?
...
Рейтинг: 0 / 0
Подключение к Access с авторизацией
    #38287964
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело скорее всего в том как вы настроили ODBC. У вас указана системная база данных?
В ней как раз все сведения о пользователях.
...
Рейтинг: 0 / 0
Подключение к Access с авторизацией
    #38288033
trickster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
о, действительно. Подключение системной базы решило проблему; скрипт с чтением логина/пароля в of_ConnectDB() работает. Спасибо Вам за помощь и время!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Подключение к Access с авторизацией
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]