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

Можно прочитать из реестра, например из HKEY_CURRENT_USER\Software\ODBC\ODBC.INI
...
Рейтинг: 0 / 0
Путь к базе данных.
    #33256028
Прохожий111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. А может кто знает функцию Windows?
...
Рейтинг: 0 / 0
Путь к базе данных.
    #33256115
KOLCHOZ_POSTEVENT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я давно не программировал на РВ по серьёзному,мелкие поделки не в счёт.
Но вот помнится,приходилось клеится к MSSQL тоже через ODBC,но без того,что юзер должен на своём компе,что-либо определять.
Так вот,я тогда присоединялся с помощью connection string,которая целиком сидела,в SQLCA.DBParm,кажись.А синтакс коммандной строки содрал с сайта http://www.connectionstrings.com/
Так вопрос,о том,где,что лежит просто не начинался,т.к.всё было под рукой-имя сервера,базы,тра-ля-ля-зы и прочего.
...
Рейтинг: 0 / 0
Путь к базе данных.
    #33257198
Фотография 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
Путь к базе данных.
    #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
Путь к базе данных.
    #33257885
EYuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну если по-уму то, лучше пользовать ODBC API
...
Рейтинг: 0 / 0
Путь к базе данных.
    #33258228
Guest_10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
EYuriНу если по-уму то, лучше пользовать ODBC API

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

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

Вот только вызвать их напрямую из PB подозреваю что не получится :)
...
Рейтинг: 0 / 0
Путь к базе данных.
    #33259844
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если callbacks в них не нужны, то получится вызвать их напрямую из PB без проблем...
...
Рейтинг: 0 / 0
Путь к базе данных.
    #33260055
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На кой леший там колбеки могут понадобиться? ODBC ж не объектный протокол.
В общем, у меня сегодня все сервера работали, так что я развлекался :)
Как результат развлечений получилась вот такая PBL:
...
Рейтинг: 0 / 0
Путь к базе данных.
    #33260456
EYuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я раньше выкладывал библеотеку для работу с ODBC API. Конечно не все функции реализованы, но многое можно найти. Ну и MSDN не помешает.
...
Рейтинг: 0 / 0
Путь к базе данных.
    #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
Путь к базе данных.
    #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
Путь к базе данных.
    #33262059
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНа кой леший там колбеки могут понадобиться? ODBC ж не объектный протокол.
Это было сказано а ответ на эту безосновательную реплику: White OwlВот только вызвать их напрямую из PB подозреваю что не получится :).
...
Рейтинг: 0 / 0
Путь к базе данных.
    #33262083
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппЭто было сказано а ответ на эту безосновательную реплику: White OwlВот только вызвать их напрямую из PB подозреваю что не получится :).
На эту безосновательную реплику надо было отвечать: "А какие там могут быть сложности? Получится конечно!", а не ссылаться на колбэки которых в стандартном ODBC вообще нет. Колбэки есть только как расширения для некоторых драйверов.
И вообще, я просто на тот момент ни разу не пробовал делать ODBC вызовы напрямою из PB :)
...
Рейтинг: 0 / 0
Путь к базе данных.
    #33262101
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делать мне нечего, проверять, есть колбэки в стандартном ODBC или нет...
Написал при каких условиях получится, и всё.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Путь к базе данных.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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