Re: получение списка таблиц БД через OLEDB
От: -ViGOur- Россия www.vigour.fromru.com
Дата: 06.02.04 10:26
Оценка:
Здравствуйте, DENIVA, Вы писали:

DEN>Если знаете ссылочки о OLEDB (как правильнее использовать, диаграмма классов...) буду признателен.


Вот пример того, как добавить список таблиц в CComboBox:
1. Создаем AppWizard'ом класс производный от CRecordset:

class CTables : public CRecordset
{
    virtual CString GetDefaultConnect() { return ""; }
    virtual CString GetDefaultSQL() { return ""; }
    virtual void    DoFieldExchange(CFieldExchange*);

    void CheckRowsetError(RETCODE nRetCode);

public:
                    CTables(CDatabase* pDatabase);
    BOOL            Open(LPCSTR pszTableQualifier = NULL,
                         LPCSTR pszTableOwner = NULL,
                         LPCSTR pszTableName = NULL,
                         LPCSTR pszTableType = NULL,
                         UINT   nOpenType = forwardOnly);

    CString            m_strTableQualifier;
    CString            m_strTableOwner;
    CString            m_strTableName;
    CString            m_strTableType;
    CString            m_strRemarks;
};

2. В какой-то функции вызываем:
    CDatabase mBase;
    if (!mBase.IsOpen())
    {

try
{
        if (!mBase.Open( _T(""), 
                         FALSE, 
                         FALSE,
                         m_szDefaultConnection, 
                         FALSE))
        {
                return TRUE;
        }
        else

        GetDlgItem( IDC_CB_TABLES)->EnableWindow( TRUE);
        FillTables( &mBase);
        int selitem=m_ComboTables.FindString( 0, m_szTable);
        m_ComboTables.SetCurSel( selitem);
}
catch(CDBException e)
{
    MessageBox( e.m_strError);
}
    }


void COdbcSettings::FillTables( CDatabase *pBase)
{
    char lpszType[]="'TABLE'";
    //strcpy(lpszType, "'TABLE'");

    int nCountCB=m_ComboTables.GetCount();
    if( nCountCB!=0)
    {
        for (int i=0;i < nCountCB;i++)
        {
            m_ComboTables.DeleteString( 0);
        }
    }

    CTables *pTableset = new CTables( pBase);;
    pTableset->Open( NULL,NULL,NULL,lpszType, CRecordset::snapshot);

    int    item = 0;
    pTableset->MoveFirst();
    while (!pTableset->IsEOF())
    {
        m_ComboTables.AddString( pTableset->m_strTableName);
        TRACE("TableName = %s\n", pTableset->m_strTableName);
        item++;
        pTableset->MoveNext();
    }

    if ( pTableset!=NULL)
    {
        if ( pTableset->IsOpen())
             pTableset->Close();
        delete pTableset;
        pTableset = NULL;
    }

    m_ComboTables.SetCurSel( 0);
}

Вот и все спосок таблиц готов!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.