Help. Как получить список имеющихся Odbc?
Заранее всем спасибо.
С уважением,
М. Шатуров
Раньше сталкивался с подобным, даже видел примеры, но не помню, как сделать. Задача такая: нужно получить список всех имеющихся на машине имён DSN. Скиньте, пожалуйста, примерчик. Работаю в среде VBA под Access.
Заранее всем спасибо.
С уважением,
М. Шатуров
Это нашёл. Но теперь другой вопрос. Как считать из реестра имена ODBC. Так же сталкивался, видел пример, но как из реестра читать - не помню - не приходилось. (Нужно считать имена веток из HCLM/Softvare/ODBC.INI). HELP, плз.
Заранее всем спасибо.
С уважением,
М. Шатуров
Это нашёл. Но теперь другой вопрос. Как ститать из реестра имена ODBC. Так же сталкивался, видел пример, но как из реестра читать - не помню - не приходилось. (Нужно считать имена веток из HCLM/Softvare/ODBC.INI). HELP, плз.
Заранее всем спасибо.
С уважением,
М. Шатуров
Кроме того, (этим тоже занимался, но тоже не помню, как) как определить, какого семейства Винда на машине пользователя. И ещё беда - на той машине, которую мне в работу выделили у API Text Viewer нет базы данных :{ Поэтому, пожалуйста, если кто может, скиньте ссылку, или вышлите, если не трудно. А то уже погибаю!!!
Заранее всем спасибо.
С уважением,
М. Шатуров
У меня есть база, но она сюда не влезет...
Огромное спасибо всем, кто озаботился моей проблемой с БД API, но я тут только что нарыл базу эту (текстовики), так что необходимость в БД для API Text Viewer отпала :) .
Остаётся проблема с получением списка ODBC, либо чтением их из реестра.
Заранее всем благодарен.
С уважением,
М.Шатуров
Нужно сделать срочно, иначе заставят вместо красивого кода писать уродливый.:{
Public Declare Function GetVersion Lib "kernel32" Alias "GetVersion" () As Long
Функция GetVersion
Описание:
function GetVersion: Word;
Считывает номеp текущей веpсии Windows.
Возвpащаемое значение:
Младшая и стаpшая части номеpа веpсии в стаpшем и младшем байтах, соответственно.
функция находится в файле kernel32.dll
Вота:
Public Declare Function GetVersion Lib "kernel32" Alias "GetVersion" () As Long
Функция GetVersion
Описание:
function GetVersion: Word;
Считывает номеp текущей веpсии Windows.
Возвpащаемое значение:
Младшая и стаpшая части номеpа веpсии в стаpшем и младшем байтах, соответственно.
функция находится в файле kernel32.dll
Огромное спасибо!
Вспомнил, как ей пользоваться, всё описал, написал процедуру опроса... Но... Из среды VB я подключал библиотеку без проблем (по-моему Microsoft Windows API WinSysPath/sistem32/kernel32.dll). VBA from MS Access просто не видит этой библиотеки, а когда пытаюсь явно указать (в Options/Refesrences/Browse...) - ругается "Can't add a reference to th specified file.:( . Может, подскажете, в чём беда???
Кроме того, никто не знает чего-нибудь по поводу ODBC (определение версии Windows мне нужно только для того, чтобы знать "на лету", какие библиотеки дальше использовать, т.к. пользовательские машины есть как под W2000, так и под W9ХХ.)
GetVersion заработала, но это не совсем то. Нужно определить версию, в смысле, это Win2000, Win 98, или Win 95. Блин, не помню, как это делать, а MSDN нет.:{
ВСПОМНИЛ!!! Версия Виндов не нужна!!! Чего-то я притормозил. Остаётся только вопрос по определению ODBC
ВСПОМНИЛ!!! Версия Виндов не нужна!!! Чего-то я притормозил. Остаётся только вопрос по определению ODBC
Всё. Задача решена. Вопрос отпал.:)
Всё. Задача решена. Вопрос отпал.:)
Мой вариант процедуры для чтения имён ODBC из ODBC.INI
Public Function CngODBCNmes(ByVal Separat As String) As String
'МАХ ищет имена ODBC в файла ODBC.INI и возвращает в виде строки (получает на вход разделитель)
Dim Fso As Object 'МАХ ссылка на объект библиотеки рабоы с файлами
Dim ODBC_INI_FILE As File 'МАХ ссылка на файл ODBC.INI
Dim FlrName As String 'МАХ хранит имя папки
Dim ResultString As String 'МАХ хранит результирующую строку имён ODBC
Dim Ts As TextStream 'МАХ сслка на поток данных из файла
Dim I As Long 'МАХ счётчик циклов
Dim BoolIn As Boolean
Const FilNam = "ODBC.INI" 'МАХ хранит тимя файла ODBC.INI
Set Fso = CreateObject("Scripting.FileSystemObject")
CngODBCNmes = vbNullString
'МАХ ищем путь к файлу ODBC.INI
'МАХ ищем путь к папке c Windows
FlrName = Mid$(Environ(21), Len("SystemRoot=") + 1, Len(Environ(21)))
'МАХ в этой папке находим файл ODBC.INI и открываем его на чтение
ResultString = vbNullString
Set ODBC_INI_FILE = Fso.GetFile(FlrName & "\" & FilNam) 'МАХ открываем файл (получаем его)
Set Ts = ODBC_INI_FILE.OpenAsTextStream(ForReading)
ResultString = Ts.ReadAll
Ts.Close
BoolIn = False
If ResultString <> vbNullString Then
For I = 1 To Len(ResultString)
If BoolIn Then
If Mid$(ResultString, I, 1) = "]" Then
CngODBCNmes = CngODBCNmes & Separat
BoolIn = False
Else
CngODBCNmes = CngODBCNmes & Mid$(ResultString, I, 1)
End If
End If
If Mid$(ResultString, I, 1) = "[" Then
BoolIn = True
End If
Next
End If
'МАХ отсекаю последний разделитель
CngODBCNmes = Mid$(CngODBCNmes, 1, Len(CngODBCNmes) - Len(Separat))
End Function
Мой вариант процедуры для чтения имён ODBC из ODBC.INI
Public Function CngODBCNmes(ByVal Separat As String) As String
'МАХ ищет имена ODBC в файла ODBC.INI и возвращает в виде строки (получает на вход разделитель)
Dim Fso As Object 'МАХ ссылка на объект библиотеки рабоы с файлами
Dim ODBC_INI_FILE As File 'МАХ ссылка на файл ODBC.INI
Dim FlrName As String 'МАХ хранит имя папки
Dim ResultString As String 'МАХ хранит результирующую строку имён ODBC
Dim Ts As TextStream 'МАХ сслка на поток данных из файла
Dim I As Long 'МАХ счётчик циклов
Dim BoolIn As Boolean
Const FilNam = "ODBC.INI" 'МАХ хранит тимя файла ODBC.INI
Set Fso = CreateObject("Scripting.FileSystemObject")
CngODBCNmes = vbNullString
'МАХ ищем путь к файлу ODBC.INI
'МАХ ищем путь к папке c Windows
FlrName = Mid$(Environ(21), Len("SystemRoot=") + 1, Len(Environ(21)))
'МАХ в этой папке находим файл ODBC.INI и открываем его на чтение
ResultString = vbNullString
Set ODBC_INI_FILE = Fso.GetFile(FlrName & "\" & FilNam) 'МАХ открываем файл (получаем его)
Set Ts = ODBC_INI_FILE.OpenAsTextStream(ForReading)
ResultString = Ts.ReadAll
Ts.Close
BoolIn = False
If ResultString <> vbNullString Then
For I = 1 To Len(ResultString)
If BoolIn Then
If Mid$(ResultString, I, 1) = "]" Then
CngODBCNmes = CngODBCNmes & Separat
BoolIn = False
Else
CngODBCNmes = CngODBCNmes & Mid$(ResultString, I, 1)
End If
End If
If Mid$(ResultString, I, 1) = "[" Then
BoolIn = True
End If
Next
End If
'МАХ отсекаю последний разделитель
CngODBCNmes = Mid$(CngODBCNmes, 1, Len(CngODBCNmes) - Len(Separat))
End Function
Признаю свою ошибку - для поределения имён ключей INI-файла проще воспользоваться GetProfileSectionNames, если я правильно помню ;)
Признаю свою ошибку - для поределения имён ключей INI-файла проще воспользоваться GetProfileSectionNames, если я правильно помню ;)
Блин, вот это прикол!
Значит так:
1. В проекте "кликаем" правой кнопкой в броузере проекта.
2. Выбираем Add Form
3. Выбираем в качестве формы ODBC Log In.
И... всё!
Если нужно выкинуть лишнее, или использовать получение списка ODBC в другом месте - просто достаточно вырезать сгенерированный код и вставить туда, где надо!!! Среда всё делает сама. Плюс, генерируемый ею код довольно оптимален.:D :D :D
А я-то мучался!:D :D :D