Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Путь к базе данных. / 18 сообщений из 18, страница 1 из 1
07.09.2005, 12:10
    #33255931
Прохожий111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путь к базе данных.
В odbc определил источник(dBase файлы), где указал путь к базе. Как можно в PB получить путь к файлам dbf определенном в odbc? В хелпе не нашел (может плохо искал). Сам PB получает этот путь - при выборе таблиц в DW отображаются таблицы из каталога определенного в ODBC.
...
Рейтинг: 0 / 0
07.09.2005, 12:21
    #33255978
Guest_10
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путь к базе данных.
Прохожий111В odbc определил источник(dBase файлы), где указал путь к базе. Как можно в PB получить путь к файлам dbf определенном в odbc? В хелпе не нашел (может плохо искал). Сам PB получает этот путь - при выборе таблиц в DW отображаются таблицы из каталога определенного в ODBC.

Можно прочитать из реестра, например из HKEY_CURRENT_USER\Software\ODBC\ODBC.INI
...
Рейтинг: 0 / 0
07.09.2005, 12:30
    #33256028
Прохожий111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путь к базе данных.
Спасибо. А может кто знает функцию Windows?
...
Рейтинг: 0 / 0
07.09.2005, 12:50
    #33256115
KOLCHOZ_POSTEVENT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путь к базе данных.
Я давно не программировал на РВ по серьёзному,мелкие поделки не в счёт.
Но вот помнится,приходилось клеится к MSSQL тоже через ODBC,но без того,что юзер должен на своём компе,что-либо определять.
Так вот,я тогда присоединялся с помощью connection string,которая целиком сидела,в SQLCA.DBParm,кажись.А синтакс коммандной строки содрал с сайта http://www.connectionstrings.com/
Так вопрос,о том,где,что лежит просто не начинался,т.к.всё было под рукой-имя сервера,базы,тра-ля-ля-зы и прочего.
...
Рейтинг: 0 / 0
07.09.2005, 17:43
    #33257198
ChV
ChV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путь к базе данных.
Можно воспользоваться :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
public function string uf_get_path_from_odbc (string name_bd);string ODBCname, sPath, s_inform
long lPos, lSize, bSign, lPos2
string ls_subkeylist[]
integer li_rtn
//s_inform = "DefaultDir"
s_inform = "Database"
		bSign= 0 
		li_rtn = RegistryValues("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources", ls_subkeylist)
		if li_rtn =  1  then
				lpos= 0  
				lSize=Upperbound(ls_subkeylist)
				do
						lpos ++
						if (Lower(ls_subkeylist[lPos])=Lower(name_bd)) then bSign=lPos
				loop until  lPos=lSize or bSign >  0  
		end if
		if bSign<>  0  and li_rtn =  1  then 
				RegistryGet( "HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\"+ &
				ls_subkeylist[bSign], s_inform, RegString!, sPath)
				if sPath = '' then
						messagebox("Ошибка !","Не указан путь к БД в настройках ODBC "+name_bd,stopsign!)
						RETURN ''
				end if
		else
				li_rtn = RegistryValues("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources", &
												ls_subkeylist)
				if li_rtn =  1  then
						lpos= 0  
						lSize=Upperbound(ls_subkeylist)
						do
								lpos ++
								if (Lower(ls_subkeylist[lPos])=Lower(name_bd)) then bSign=lPos
						loop until  lPos=lSize  or bSign >  0 
						if bSign<>  0  then 
								RegistryGet( "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\"+ &
								ls_subkeylist[bSign], s_inform, RegString!, sPath)
								if sPath = '' then
										messagebox("Ошибка !","Не указан путь к БД в настройках ODBC "+name_bd,stopsign!)
										RETURN ''
								end if 
						else
								messagebox("Ошибка !","Не удалось найти настройки ODBC "+name_bd,stopsign!)
								RETURN ''
						end if
				else
						MessageBox('Ошибка !', 'Ошибка описания ODBC в реестре Windows .' )
						RETURN ''
				end if
		end if
		Return sPath
end function
...
Рейтинг: 0 / 0
07.09.2005, 17:54
    #33257228
boogiman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путь к базе данных.
Можно попробовать создавать ODBS - источник налету! Посмотрите здесь, может поможет:

// так создаём динамически connect к ODBC
transaction SQL
string ls_connect, ls_databasefile, ls_driver,docpath, f_name
integer i, li_cnt, li_rtn, li_filenum
SQL = CREATE transaction
// здесь даём пользователю выбрать в диалоговом режиме имя файла
li_rtn = GetFileOpenName("Выберете файл",docpath,f_name,"XLS","Excel Files (*.XLS),*.XLS,","c:/Test")
ls_DataBaseFile = f_name
ls_Driver = "Microsoft Excel Driver (*.xls)"
ls_connect = "'" + &
"DBQ=" + ls_DataBaseFile + &
";Driver=" + ls_Driver + &
";FIL=MS Excel;" + &
"'"
SQL.DBMS = "ODBC"
SQL.Autocommit = False
SQL.DbParm = "ConnectString=" + ls_connect
connect using SQL;

if( SQL.SQLCode<> 0) then
MessageBox('Test', 'SQLCode = :' + string( SQL.SQLCode) + '~r~n' + SQL.SQLErrText )
end if
// так создаём дату window и заполняем её к примеру из datastore, простым копированием строк.
string error_syntaxfromSQL, error_create, str
int j
string new_sql, new_syntax
// Описание DataStore
datastore my_store
// dw_1 - это единственный контрол, который нам нужен
w_main.dw_1.Reset()
// Создаём DataStore
my_store=Create datastore
// Запрос SQL
new_sql = 'SELECT * from "database"'
//messagebox("",new_sql)
// Полный синтаксис
new_syntax = SQL.SyntaxFromSQL(new_sql, /*"" - по умолчанию*/'Style(Type=Grid)',error_syntaxfromSQL)
IF Len(error_syntaxfromSQL) > 0 THEN
// Выдается ошибка
w_main.st_1.Text = error_syntaxfromSQL
ELSE
// Привязываем DataStore к запросу
my_store.Create(new_syntax, error_create)

// Привязываем контрол к данным
w_main.dw_1.Create(new_syntax)

IF Len(error_create) > 0 THEN
w_main.st_2.Text = error_create
END IF
END IF
// Вытаскиваем данные в DataStore
my_store.SetTransObject (SQL)
my_store.Retrieve()
// Копируем данные из DataStore в Control
my_store.RowsCopy(1,my_store.RowCount(), Primary!, w_main.dw_1,1,Primary!)
Destroy SQL
...
Рейтинг: 0 / 0
08.09.2005, 10:09
    #33257885
EYuri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путь к базе данных.
Ну если по-уму то, лучше пользовать ODBC API
...
Рейтинг: 0 / 0
08.09.2005, 11:49
    #33258228
Guest_10
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путь к базе данных.
EYuriНу если по-уму то, лучше пользовать ODBC API

И почему же это лучше? Всеравно все сведется к чтению реестра или odbc.ini
...
Рейтинг: 0 / 0
08.09.2005, 18:23
    #33259696
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путь к базе данных.
Guest_10 EYuriНу если по-уму то, лучше пользовать ODBC API

И почему же это лучше? Всеравно все сведется к чтению реестра или odbc.ini
Вот именно поэтому и лучше. Как здесь уже обсуждалось, названия registry hives и ключей могут быть зависимы от ОС, API же само знает, какие registry hives и ключи нужно читать, в зависимости от ОС, на которой зовётся...
...
Рейтинг: 0 / 0
08.09.2005, 18:36
    #33259719
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путь к базе данных.
Вообще-то, у ODBC есть возможность расшифровки DSN в строку. Читать реестр совершенно не нужно.
Во первых этим занимается функция SQLDriverConnect() которой на вход даешь полную, не полную или вообще пустую строку описывающую коннект. Функция может вызвать встроенный в ODBC-driver диалог, для запроса недостающих параметров. И подключится к базе, а в одном из параметров будет полная, расшифрованая строка подключения.
Во вторых есть функция SQLBrowseConnect() которая занимается последовательной расшифровкой строки. Примеры использования есть в описании ODBC.

Вот только вызвать их напрямую из PB подозреваю что не получится :)
...
Рейтинг: 0 / 0
08.09.2005, 20:02
    #33259844
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путь к базе данных.
Если callbacks в них не нужны, то получится вызвать их напрямую из PB без проблем...
...
Рейтинг: 0 / 0
09.09.2005, 01:00
    #33260055
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путь к базе данных.
На кой леший там колбеки могут понадобиться? ODBC ж не объектный протокол.
В общем, у меня сегодня все сервера работали, так что я развлекался :)
Как результат развлечений получилась вот такая PBL:
...
Рейтинг: 0 / 0
09.09.2005, 10:28
    #33260456
EYuri
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путь к базе данных.
я раньше выкладывал библеотеку для работу с ODBC API. Конечно не все функции реализованы, но многое можно найти. Ну и MSDN не помешает.
...
Рейтинг: 0 / 0
09.09.2005, 10:39
    #33260511
Black Savage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путь к базе данных.
To White Owl
Глянул на твою pbl -ку. Хм... интересно. Только вот я не врубаюсь, как же все это применить к нормальному sqlca.DBParm ? Думаю, твои советы могли бы нам пригодиться, т.к. развлекаемся который месяц с ODBC и слишком много проблем. Речь идет о связке MS SQL Server 2000 & PowerBuilder 9.0.2 Build 7509 В основном гемор идет, когда есть подключение через Client Network Utility по TCP/IP (клиенты и сервер базы расположены в разных сетях). Когда подключение идет через именованные каналы (клиенты и сервер в одной сетке), то проблем нет. При этом sqlca.DBParm выглядит так:

ConnectString='DRIVER=SQL Server;SERVER=My_Server;DATABASE=SUPPER;
Uid=cerb;Pwd=[eqdfv;Trusted_Connection=no;APP=MY_APP 2005.09.07 13:50 ODBC',PacketSize=65536,CallEscape='No',DisableBind=1,SQLCache=0,
CommitOnDisconnect='No',Async=1,DelimitIdentifier='No',
ConnectOption='SQL_DRIVER_CONNECT,SQL_DRIVER_NOPROMPT',Date=' \''dd.mm.yyyy\'' ',DateTime=' \''dd.mm.yyyy hh:mm:ss.fff\'' '


Ошибки такого рода:
(999)SQLSTATE = 08S01
[Microsoft][ODBC SQL Server Driver]Ошибка связи

(999)Select error: SQLSTATE = S1000
[Microsoft][ODBC SQL Server Driver]Protocol error in TDS stream

(1205)Select error: SQLSTATE = 40001
[Microsoft][ODBC SQL Server Driver][SQL Server]Transaction (Process ID 61) was
deadlocked on lock resources with another process and has chosen as the deadlock
victim. Return the transaction.

И т.д. Некоторые удалось прибить, другие все еще лезут. MDAC - последний установлен у клиентов. Некоторые говорят, что все дело в связи между двумя
сетками (клиенты в одной, сервер в другой сети), но мне кажется это слишком странным, ибо на MSS так сильно клиенты не глючили. Хотелось бы добиться большей стабильности работы, но пока это только мечты. Может, посоветуешь чего-нибудь изменить, прикрутить?..
...
Рейтинг: 0 / 0
09.09.2005, 17:41
    #33261991
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путь к базе данных.
Black Savage To White Owl
Глянул на твою pbl -ку. Хм... интересно. Только вот я не врубаюсь, как же все это применить к нормальному sqlca.DBParm ?
Прикол в том, что применять это в реальности не рекомендуется :) Извращение оно извращение и есть. Но если хочется более низкого взаимодействия с ODBC драйвером то это все таки возможно. Теоретически можно вообще отказаться от использования Transaction объектов PB и работать с ODBC напрямую :)

Black SavageРечь идет о связке MS SQL Server 2000 & PowerBuilder 9.0.2 Build 7509 В основном гемор идет, когда есть подключение через Client Network Utility по TCP/IP (клиенты и сервер базы расположены в разных сетях).
ээээ... я не специалист по MS SQL Server, извините.
...
Рейтинг: 0 / 0
09.09.2005, 18:16
    #33262059
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путь к базе данных.
White OwlНа кой леший там колбеки могут понадобиться? ODBC ж не объектный протокол.
Это было сказано а ответ на эту безосновательную реплику: White OwlВот только вызвать их напрямую из PB подозреваю что не получится :).
...
Рейтинг: 0 / 0
09.09.2005, 18:26
    #33262083
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путь к базе данных.
ФилиппЭто было сказано а ответ на эту безосновательную реплику: White OwlВот только вызвать их напрямую из PB подозреваю что не получится :).
На эту безосновательную реплику надо было отвечать: "А какие там могут быть сложности? Получится конечно!", а не ссылаться на колбэки которых в стандартном ODBC вообще нет. Колбэки есть только как расширения для некоторых драйверов.
И вообще, я просто на тот момент ни разу не пробовал делать ODBC вызовы напрямою из PB :)
...
Рейтинг: 0 / 0
09.09.2005, 18:37
    #33262101
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Путь к базе данных.
Делать мне нечего, проверять, есть колбэки в стандартном ODBC или нет...
Написал при каких условиях получится, и всё.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Путь к базе данных. / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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