Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > ODBC


Автор: Гость_vasya 7.10.2005, 16:13
Народ подскажите пожалуйста! Как получить список ODBC источников данных?
Или как проверить, если у меня есть имя источника данных ( char* pStr ), есть ли источник с таким именем в системе? smile smile smile

Автор: chaos 7.10.2005, 17:58
если я тебя правельно понял то тебе поможет это
(кусок кода из моей программы)
Код

void CFinishPage::FillDrvList()
{
    while (LB_ERR != m_oDrvList.DeleteString(0));

    CString soSubKey = "SOFTWARE\\ODBC\\ODBCINST.INI";
    DWORD dwIndex = 0, dwSizeBuf, dwType1, dwType2 = REG_SZ, dwSizeData1, dwSizeData2;
    HKEY hKey1, hKey2;
    char *szBuf = new char[MAX_PATH];
    BYTE *szData1 = new BYTE[MAX_PATH];
    BYTE *szData2 = new BYTE[MAX_PATH];

    if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
                                        soSubKey + "\\ODBC Drivers",
                                        NULL, KEY_ALL_ACCESS, &hKey1))
    {
        while (ERROR_SUCCESS == RegEnumValue(hKey1, dwIndex, szBuf, 
                                            &dwSizeBuf, NULL, 
                                            &dwType1, szData1, &dwSizeData1))
        {
            if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
                                            soSubKey + CString("\\") + szBuf, 
                                            NULL, KEY_ALL_ACCESS, 
                                            &hKey2))
            {
                if (ERROR_SUCCESS == RegQueryValueEx(hKey2, 
                                                    "FileExtns", NULL, 
                                                    &dwType2, 
                                                    szData2, &dwSizeData2))
                    m_oDrvList.AddString(szBuf);
                RegCloseKey(hKey2);
            }

            dwIndex++;
            dwSizeBuf = MAX_PATH;
            dwSizeData2 = MAX_PATH;
        }
        RegCloseKey(hKey1);
    }

    delete[] szBuf;
    delete[] szData1;
    delete[] szData2;
}



правда надо немного подшаманить)))

Автор: threef 21.2.2006, 12:20
Это список драйверов. А где взять список зарегистрированных источников ?( User DSN, System DSN ?)

Автор: bas 21.2.2006, 14:53
Цитата(threef @ 21.2.2006, 12:20 Найти цитируемый пост)
User DSN

Common Files\ODBC\Data Sources\

Цитата(threef @ 21.2.2006, 12:20 Найти цитируемый пост)
System DSN

В реестре.

Автор: threef 21.2.2006, 20:48
Спасибо, уже нашел, немного подшаманил:
Код

    while (LB_ERR != m_oDrvList.DeleteString(0));

    CString soSubKey = "SOFTWARE\\ODBC\\ODBC.INI";
    DWORD dwIndex = 0, dwSizeBuf, 
        dwType2 = REG_SZ,dwSizeData2;
    HKEY hKey1, hKey2;
    char *szBuf = new char[MAX_PATH];
    BYTE *szData2 = new BYTE[MAX_PATH];
    FILETIME ftime;

    if (ERROR_SUCCESS == 
        RegOpenKeyEx(HKEY_CURRENT_USER,soSubKey,
             NULL, KEY_ALL_ACCESS, &hKey1))
    {
        while (ERROR_SUCCESS == 
            RegEnumKey(hKey1, dwIndex, szBuf, dwSizeBuf))
        {
            
           if (ERROR_SUCCESS == 
               RegOpenKeyEx(HKEY_CURRENT_USER, 
               soSubKey + CString("\\") + szBuf, 
               NULL, KEY_ALL_ACCESS,&hKey2))
            {
              if (ERROR_SUCCESS == RegQueryValueEx(hKey2, 
                                                    "Driver", NULL, 
                                                    &dwType2, 
                                                    szData2, &dwSizeData2))
                m_oDrvList.AddString(szBuf);
                    RegCloseKey(hKey2);
            }
            
            dwIndex++;
            dwSizeBuf = MAX_PATH;
            dwSizeData2 = MAX_PATH;
        }
        RegCloseKey(hKey1);
    }

    delete[] szBuf;
    delete[] szData2;

Скопировано у chaos

Автор: КУБ 9.8.2006, 16:07
А как программно зарегистрировать источник данных ? ( User DSN)  smile 

Автор: bas 9.8.2006, 17:08
Создать в \Common Files\ODBC\Data Source\ файл с расширением dsn.

Цитата

[ODBC]
DRIVER=Microsoft dBase VFP Driver (*.dbf)
UID=
Deleted=Yes
Null=Yes
Collate=Machine
BackgroundFetch=Yes
Exclusive=No
SourceType=DBF
SourceDB=e:\TMP

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)