Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / можно ли узнать DSN по DBHandle? / 9 сообщений из 9, страница 1 из 1
31.10.2007, 18:13
    #34908567
craftyman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать DSN по DBHandle?
Привет всем!
Озадачился вопросом, можно ли как-нибудь по значению, которое возвращает функция DBHandle() объекта транзакции узнать DSN базы, к которой коннектимся? (например, с помощью ODBC API)

Спрашиваете зачем? =)
Значит, есть операция выгрузки данных в пользовательскую базу. При коннекте драйвер ODBC открывает окно ODBC-менеджера с предложением выбрать источник данных (DSN).
Происходит это, как все наверное знают, потому что я не указываю конкретно базу в параметрах транзакции.
Ну так вот, после того, как пользователь выбирает DSN, происходит коннект и данные выгружаются, тут всё правильно. Но на выходе я не имею ничего, кроме DBHandle, кода ошибки (если есть) и типа драйвера. В параметрах транзакции остается всё без изменений. Собственно, хотелось бы понять - что же выбрал юзер (какой DSN).
Собственное окно для выбора источника делать не предлагать, т.к. слишком просто =)
Хотелось бы решение покрасивее =)
...
Рейтинг: 0 / 0
31.10.2007, 18:33
    #34908603
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать DSN по DBHandle?
craftymanЗначит, есть операция выгрузки данных в пользовательскую базу. При коннекте драйвер ODBC открывает окно ODBC-менеджера с предложением выбрать источник данных (DSN).
Происходит это, как все наверное знают, потому что я не указываю конкретно базу в параметрах транзакции. А почему ты его не указываешь? Юзер может там выбрать все что угодно. Твоя программа готова работать с базами абсолютно любого типа? :)

craftymanСобственно, хотелось бы понять - что же выбрал юзер (какой DSN).Юзер может вообще сконструировать свой собственный DSN. В том самом окне выбрать любые другие параметры и усё.
Теоретически, можно натравить на хендл коннекта SQLGetConnectAttr и по результатам пытаться догадаться, но...
...
Рейтинг: 0 / 0
31.10.2007, 18:39
    #34908618
craftyman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать DSN по DBHandle?
ну пайплайну, по сути, пофигу куда сливать =)
мне просто надо запомнить в реестр название DSN на конкретной машине пользователя, чтобы в последующем коннектиться по-умолчанию именно к этому источнику.
...
Рейтинг: 0 / 0
31.10.2007, 18:53
    #34908647
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать DSN по DBHandle?
craftymanмне просто надо запомнить в реестр название DSN на конкретной машине пользователя, чтобы в последующем коннектиться по-умолчанию именно к этому источнику.
Составить список DSN и показать его юзеру, потом после выбора коннектиться.
...
Рейтинг: 0 / 0
31.10.2007, 18:57
    #34908656
craftyman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать DSN по DBHandle?
Anatoly MoskovskyСоставить список DSN и показать его юзеру, потом после выбора коннектиться.

писал же вначале =)

craftymanСобственное окно для выбора источника делать не предлагать, т.к. слишком просто =)

видимо, это будет самым разумным решением, но я всё же подожду, может кто ченить подскажет =)
...
Рейтинг: 0 / 0
31.10.2007, 19:28
    #34908726
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать DSN по DBHandle?
craftymanписал же вначале =)
Я видел. Просто я не дописал предложение.
Полное предложение такое:
Составить список DSN и показать его юзеру, потом после выбора коннектиться и не ###ть тут всем мозги.
:)
...
Рейтинг: 0 / 0
01.11.2007, 09:56
    #34909318
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать DSN по DBHandle?
Интересно в параметрах транзакции нет имени DSN? Прикольно...
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
01.11.2007, 11:33
    #34909669
craftyman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать DSN по DBHandle?
spas2001Интересно в параметрах транзакции нет имени DSN? Прикольно...
ну, типа DNS-less конекшн =)

в общем, решил вчера проблему. спасибо White Owl за полезные идеи в других топиках.
воспользовался ODBC API-шной функцией SQLDriverConnect .

описание external-функций:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
constant integer SQL_DRIVER_NOPROMPT            =  0 
constant integer SQL_DRIVER_COMPLETE            =  1 
constant integer SQL_DRIVER_PROMPT              =  2 
constant integer SQL_DRIVER_COMPLETE_REQUIRED   =  3 

FUNCTION integer SQLAllocEnv (REF ulong henv) LIBRARY "ODBC32.DLL";

FUNCTION integer SQLAllocConnect( ulong henv,  ref ulong phdbc) LIBRARY "ODBC32.DLL";

FUNCTION integer SQLDriverConnect( &
	UnsignedLong ConnectionHandle, &
	UnsignedLong WindowHandle, &
	ref string InConnectionString, &
	Integer StringLength1, &
	ref string OutConnectionString, &
	Integer BufferLength, &
	ref Integer StringLength2Ptr, &
	Integer DriverCompletion) &
	LIBRARY "ODBC32.DLL";

пример вызова:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
ulong henv,hdbc 
integer li_len_attrib, li_ret, lul_len_Buffer
string sIn, sOut, ls
integer iSizeOfInputString, iSizeOfOutputString

SQLAllocEnv (henv)
SQLAllocConnect( henv,   hdbc) 

sIn = ""
iSizeOfInputString = len(sIn)+ 1 
sOut = space( 1024 )

ldw.of_getparentwindow(ref lw)

li_ret = SQLDriverConnect(hDbc, Handle(lw) , sIn, iSizeOfInputString, sOut,  1024 , iSizeOfOutputString, SQL_DRIVER_PROMPT)

ls = "ConnectString='" + Trim(sOut) + "'"

в переменной sOut на выходе получаем нужную строку ConnectString.
В моем случае переменная sOut содержала в себе
Код: plaintext
DSN=dbffoxpro

Всем спасибо!
Истина, как всегда, была где-то рядом =)
...
Рейтинг: 0 / 0
01.11.2007, 11:37
    #34909689
craftyman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать DSN по DBHandle?
craftymanну, типа DNS-less конекшн
конечно DSN-less =) опечатко вышло =)
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / можно ли узнать DSN по DBHandle? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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