Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как получить список всех ADODB провайдеров?

Как получить список всех ADODB провайдеров?
Я
   igwtbox
 
09.07.20 - 17:44
Как получить список всех ADODB провайдеров, установленных в системе?

Connection = Новый COMОбъект("ADODB.Connection");
Connection.???

Дальше какой метод?
   acht
 
1 - 09.07.20 - 18:04
А дальше засучиваешь рукава и выгребаешь ветки из "HKCR\CLSID\{<произвольный гуид>}" у которых есть подключ "\OLEDB_SERVICES". Там будет имя провайдера и где-то в подключе "\OLE DB Provider" его описание. Надеешся, что это не битые записи.

Любители халявы...
   igwtbox
 
2 - 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();
   acht
 
4 - 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));
   acht
 
7 - 09.07.20 - 18:18
(6) >  я так думаю
А ну-ну
   spectre1978
 
8 - 09.07.20 - 18:31
(0) А для какой цели? Есть такая штука как Microsoft Data Link файл (*.udl) и встроенный в Винду редактор таких файлов, где уже есть диалог выбора провайдеров. Если вам нужно организовать настройку соединения с базой, то не нужно самому городить редактор, штатное все есть...
   rsv
 
9 - 09.07.20 - 18:56
+(8) и если после выбора провайдера открыть это файл редактором -
Там будет строка для ado
   rsv
 
10 - 09.07.20 - 18:57
Или ado просто предусматривает путь к файлику udl
   МихаилМ
 
11 - 09.07.20 - 20:40
adox Вам в помощь
   NorthWind
 
12 - 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
   NorthWind
 
14 - 09.07.20 - 22:26
(1) правда, тут есть нюанс - надо каким-то образом различать x32 и x64 провайдеры. Дело в том, что в зависимости от битности вызывающего процесса редактор строки соединений может показывать совершенно разный набор провайдеров. Скажем, под x32 провайдер Jet 4.0 есть почти всегда, а под x64 его не бывает в принципе, не написали. Приложение пользователя по идее должно быть готово к таким разночтениям.
   acht
 
15 - 09.07.20 - 22:53
(14) Да, там по хорошему надо еще в обоих HKLM\SOFTWARE\Classes\ и HKCU\SOFTWARE\Classes\ поковырятся, которые WOW, по тому же принципу.

Тыщу лет назад я похожее делал - тормозило нещадно из-за того, что там все доступное АПИ доступа к реестру только на переборах и доступно. На количествах "получений следущего ключа" через границу процесса все и вешалось. Может сейчас в каком-нибудь WQL что и запилили - не знаю и выяснять не хочу =)

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.