|
Как получить список всех ADODB провайдеров? | ☑ | ||
---|---|---|---|---|
0
igwtbox
09.07.20
✎
17:44
|
Как получить список всех ADODB провайдеров, установленных в системе?
Connection = Новый COMОбъект("ADODB.Connection"); Connection.??? Дальше какой метод? |
|||
1
acht
09.07.20
✎
18:04
|
А дальше засучиваешь рукава и выгребаешь ветки из "HKCR\CLSID\{<произвольный гуид>}" у которых есть подключ "\OLEDB_SERVICES". Там будет имя провайдера и где-то в подключе "\OLE DB Provider" его описание. Надеешся, что это не битые записи.
Любители халявы... |
|||
2
igwtbox
09.07.20
✎
18:05
|
(1) Любитель
|
|||
3
Дык ё
09.07.20
✎
18:06
|
CoInitialize(NULL);
{ CEnumerator rs; rs.Open(); while (rs.MoveNext() == S_OK) printf("%ls\n", rs.m_szName); } CoUninitialize(); |
|||
4
acht
09.07.20
✎
18:11
|
(3) Эта чо за?
|
|||
5
Дык ё
09.07.20
✎
18:15
|
(4) CEnumerator это класс из ATL OLEDB consumer templates, как раз для этого. я так думаю, он работает примерно как (1)
|
|||
6
Дык ё
09.07.20
✎
18:16
|
+ (5) ну или так:
CComPtr<ISourcesRowset> spSourcesRowset = NULL; CCommand<CDynamicAccessor> rs; HRESULT hr; // Create the enumerator hr = spSourcesRowset.CoCreateInstance(CLSID_OLEDB_ENUMERATOR, NULL, CLSCTX_INPROC_SERVER); // Get the rowset so we can enumerate the data sources hr = spSourcesRowset->GetSourcesRowset(NULL, IID_IRowset, 0, NULL, (IUnknown**)&rs.m_spRowset); hr = rs.Bind(); while (rs.MoveNext() == S_OK) printf("%ls\n", rs.GetValue(1L)); |
|||
7
acht
09.07.20
✎
18:18
|
(6) > я так думаю
А ну-ну |
|||
8
spectre1978
09.07.20
✎
18:31
|
(0) А для какой цели? Есть такая штука как Microsoft Data Link файл (*.udl) и встроенный в Винду редактор таких файлов, где уже есть диалог выбора провайдеров. Если вам нужно организовать настройку соединения с базой, то не нужно самому городить редактор, штатное все есть...
|
|||
9
rsv
09.07.20
✎
18:56
|
+(8) и если после выбора провайдера открыть это файл редактором -
Там будет строка для ado |
|||
10
rsv
09.07.20
✎
18:57
|
Или ado просто предусматривает путь к файлику udl
|
|||
11
МихаилМ
09.07.20
✎
20:40
|
adox Вам в помощь
|
|||
12
NorthWind
09.07.20
✎
21:51
|
(11) а каким образом ADOX позволяет дернуть список установленных в системе провайдеров? Я был бы тоже непрочь узнать - для общего развития. Пока я с его помощью читал только схему данных базы.
|
|||
13
МихаилМ
09.07.20
✎
22:11
|
(12)
да. опять обманул. в adox нет такой коллекции https://docs.microsoft.com/ru-RU/sql/ado/reference/adox-api/adox-object-model?view=aps-pdw-2016 |
|||
14
NorthWind
09.07.20
✎
22:26
|
(1) правда, тут есть нюанс - надо каким-то образом различать x32 и x64 провайдеры. Дело в том, что в зависимости от битности вызывающего процесса редактор строки соединений может показывать совершенно разный набор провайдеров. Скажем, под x32 провайдер Jet 4.0 есть почти всегда, а под x64 его не бывает в принципе, не написали. Приложение пользователя по идее должно быть готово к таким разночтениям.
|
|||
15
acht
09.07.20
✎
22:53
|
(14) Да, там по хорошему надо еще в обоих HKLM\SOFTWARE\Classes\ и HKCU\SOFTWARE\Classes\ поковырятся, которые WOW, по тому же принципу.
Тыщу лет назад я похожее делал - тормозило нещадно из-за того, что там все доступное АПИ доступа к реестру только на переборах и доступно. На количествах "получений следущего ключа" через границу процесса все и вешалось. Может сейчас в каком-нибудь WQL что и запилили - не знаю и выяснять не хочу =) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |