Имя: Пароль:
1C
1С v8
Как получить список всех 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 что и запилили - не знаю и выяснять не хочу =)