Здравствуйте, 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);
}
Вот и все спосок таблиц готов!