Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Источники ODBC / 11 сообщений из 11, страница 1 из 1
25.05.2006, 17:18
    #33752249
tsiboul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Источники ODBC
Допустим, я хочу вытащить все источники данных с драйвером "Sql Server". Как получить вообще все источники, понятно (SQLDataSources и вперед). Но! Как определить тип источника? Как прочитать это из реестра (юзерской и системной ветви), понятно, но это как бы не совсем легальный метод и фих его знает, будет ли в дальнейшем работать. А есть ли более фицияльная метода отбора?
...
Рейтинг: 0 / 0
25.05.2006, 17:23
    #33752263
sashka304
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Источники ODBC
а зачем тебе вытягивать? в в каждой винде походу есть свои драйвера для работы с SQL
...
Рейтинг: 0 / 0
25.05.2006, 17:27
    #33752274
tsiboul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Источники ODBC
sashka304а зачем тебе вытягивать? в в каждой винде походу есть свои драйвера для работы с SQLМне не нужны программы винды, мне нужно вытянуть в свою программу.
...
Рейтинг: 0 / 0
25.05.2006, 18:18
    #33752437
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Источники ODBC
Используй SQLBrowseConnect() оно специально для такой задачи и предназначена.
...
Рейтинг: 0 / 0
26.05.2006, 12:06
    #33753740
tsiboul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Источники ODBC
White OwlИспользуй SQLBrowseConnect() оно специально для такой задачи и предназначена.Нет, SQLBrowseConnect() - это совсем другая песня. Конкретизирую: пользователю нужно выдать список ODBC-источников типа Sql Server. Именно список, без проверки доступности и прочего. Похоже, вариант остается только один - лезть непосредственно в реестр (просто, но некультяписто и рискованно в плане будущей совместимости).
...
Рейтинг: 0 / 0
26.05.2006, 13:17
    #33754098
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Источники ODBC
Да есть там в API специально функции для перечисления всех datasource, у каждого можно провайдера выдернуть, и по нему отфильтновать.
...
Рейтинг: 0 / 0
26.05.2006, 13:44
    #33754237
tsiboul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Источники ODBC
MasterZivДа есть там в API специально функции для перечисления всех datasource, у каждого можно провайдера выдернуть, и по нему отфильтновать.Так корневой вопрос и был - как именно отфильтровать легальными средствами?
...
Рейтинг: 0 / 0
26.05.2006, 18:17
    #33755271
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Источники ODBC
так тебе сами 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
29.05.2006, 12:54
    #33757923
tsiboul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Источники ODBC
White Owlтак тебе сами DSN'ы нужны?
ААААААААА, НЕЕЕТ!!!
Я прекрасно знаю про SQLDataSources! Я про него сам в корневом сообщении написал! Я не знаю, как вытащить имя драйвера , а не источника - говорю же, нужно отбрать все источники типа "Sql Server" , а мы все вокруг SQLDataSources ходим, которая нифига полезного, кроме имени и описания, не выдает!
...
Рейтинг: 0 / 0
29.05.2006, 14:09
    #33758204
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Источники ODBC
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
29.05.2006, 14:19
    #33758238
tsiboul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Источники ODBC
Ой Вэй tsiboul

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


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