powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Источники ODBC
11 сообщений из 11, страница 1 из 1
Источники ODBC
    #33752249
tsiboul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим, я хочу вытащить все источники данных с драйвером "Sql Server". Как получить вообще все источники, понятно (SQLDataSources и вперед). Но! Как определить тип источника? Как прочитать это из реестра (юзерской и системной ветви), понятно, но это как бы не совсем легальный метод и фих его знает, будет ли в дальнейшем работать. А есть ли более фицияльная метода отбора?
...
Рейтинг: 0 / 0
Источники ODBC
    #33752263
Фотография sashka304
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем тебе вытягивать? в в каждой винде походу есть свои драйвера для работы с SQL
...
Рейтинг: 0 / 0
Источники ODBC
    #33752274
tsiboul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sashka304а зачем тебе вытягивать? в в каждой винде походу есть свои драйвера для работы с SQLМне не нужны программы винды, мне нужно вытянуть в свою программу.
...
Рейтинг: 0 / 0
Источники ODBC
    #33752437
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используй SQLBrowseConnect() оно специально для такой задачи и предназначена.
...
Рейтинг: 0 / 0
Источники ODBC
    #33753740
tsiboul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlИспользуй SQLBrowseConnect() оно специально для такой задачи и предназначена.Нет, SQLBrowseConnect() - это совсем другая песня. Конкретизирую: пользователю нужно выдать список ODBC-источников типа Sql Server. Именно список, без проверки доступности и прочего. Похоже, вариант остается только один - лезть непосредственно в реестр (просто, но некультяписто и рискованно в плане будущей совместимости).
...
Рейтинг: 0 / 0
Источники ODBC
    #33754098
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да есть там в API специально функции для перечисления всех datasource, у каждого можно провайдера выдернуть, и по нему отфильтновать.
...
Рейтинг: 0 / 0
Источники ODBC
    #33754237
tsiboul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivДа есть там в API специально функции для перечисления всех datasource, у каждого можно провайдера выдернуть, и по нему отфильтновать.Так корневой вопрос и был - как именно отфильтровать легальными средствами?
...
Рейтинг: 0 / 0
Источники ODBC
    #33755271
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так тебе сами DSN'ы нужны? SQLDataSources() тогда. Вытягиваешь все DSN подряд и сравниваешь второй буффер с нужным именем драйвера.
Код: 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.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
#include <windows.h>
#include <stdio.h>
#include <sql.h>
#include <sqlext.h>

int main(int argc, char **argv) {
	HENV hEnv;
	RETCODE RetCode;
	SQLCHAR SqlState[ 6 ], SqlMessage[SQL_MAX_MESSAGE_LENGTH];
	SQLINTEGER SqlError;
	SQLSMALLINT MessageLen, ServerNameLen, DescriptionLen;
	SQLCHAR ServerName[ 1024 ], Description[ 1024 ];

	int i;
	char FunctionName[ 32 ];
	


	if(argc< 2 ) {
		printf("Usage: List_DSN_for_Driver <driver name>\n\tuse qoutes if driver name has spaces\n");
		exit( 1 );
	}

	RetCode = SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv );
	if (RetCode != SQL_SUCCESS) {
		strcpy(FunctionName, "SQLAllocHandle(ENV)");
ENV_Error:
		for (i= 1 ; SQLGetDiagRec(SQL_HANDLE_ENV, hEnv, i, SqlState, &SqlError,
							SqlMessage, sizeof(SqlMessage), &MessageLen) != SQL_NO_DATA; i++) {
			printf("%s failed: %s %d %s\n", FunctionName, SqlState, SqlError, SqlMessage);
		}
		return  1 ;
	}

	RetCode = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3,  0 );
	if ((RetCode != SQL_SUCCESS) && ((RetCode != SQL_SUCCESS_WITH_INFO))) {
		strcpy(FunctionName, "SQLSetEnvAttr");
		goto ENV_Error;
	}


	RetCode = SQLDataSources(hEnv, SQL_FETCH_FIRST, ServerName, sizeof(ServerName), &ServerNameLen,
										Description, sizeof(Description), &DescriptionLen);
	if (RetCode == SQL_ERROR) {
		strcpy(FunctionName, "SQLDataSources");
		goto ENV_Error;
	}
	while((RetCode==SQL_SUCCESS) || (RetCode==SQL_SUCCESS_WITH_INFO)) {
		if (strcmp(argv[ 1 ], Description)== 0 ) {
			printf("DSN=%s\n", ServerName);
		}
		RetCode = SQLDataSources(hEnv, SQL_FETCH_NEXT, ServerName, sizeof(ServerName), &ServerNameLen,
										Description, sizeof(Description), &DescriptionLen);
		if (RetCode == SQL_ERROR) {
			strcpy(FunctionName, "SQLDataSources");
			goto ENV_Error;
		}
	}


	SQLFreeEnv( hEnv );
	return  0 ;
}
...
Рейтинг: 0 / 0
Источники ODBC
    #33757923
tsiboul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlтак тебе сами DSN'ы нужны?
ААААААААА, НЕЕЕТ!!!
Я прекрасно знаю про SQLDataSources! Я про него сам в корневом сообщении написал! Я не знаю, как вытащить имя драйвера , а не источника - говорю же, нужно отбрать все источники типа "Sql Server" , а мы все вокруг SQLDataSources ходим, которая нифига полезного, кроме имени и описания, не выдает!
...
Рейтинг: 0 / 0
Источники ODBC
    #33758204
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tsiboul

White Owl прав: SQLDataSources возвращает в качестве второй строки имя драйвера ("Microsoft Access Driver (*.mdb)", "SQL Server" и.т.д.)

Можешь сделать поиск в MSDN по Q101519:

ID: Q101519

SUMMARY
SQLDataSources() enumerates ODBC data source names and is implemented by the ODBC Driver Manager. The 'description' it returns through szDescription is the driver description
(as opposed to data source description).


----------------------------------------
С помощью SQLBrowseConnect() мне удалось получить только список имён SQL-серверов , а не имён источников ODBC . Хотя может там есть какой-то ещё более особый синтаксис строки подключения...
...
Рейтинг: 0 / 0
Источники ODBC
    #33758238
tsiboul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой Вэй tsiboul

White Owl прав: SQLDataSources возвращает в качестве второй строки имя драйвера ("Microsoft Access Driver (*.mdb)", "SQL Server" и.т.д.)
Ёёё! Вот спасибо, слона-то (в своем первом сообщении) я и не заметил!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Источники ODBC
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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