Access数据库设计问题,急……
我VC++6.0中使用了Access数据库,可是编译时没有错误,但是在执行时却不能执行。请个路高手帮忙看看。不甚感激。
#import"C:\Program Files\Common Files\System\ado\msado15.dll"no_namespace \
rename("EOF","ado_EOF")rename("BOF","ado_BOF")
下面是使用原码:
void CVc_accessDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CString strText;
CFileDialog file(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,\
"Access(*.mdb)|*.mdb| |",AfxGetMainWnd());
if(file.DoModal()==IDOK)
{
m_List.ResetContent();
strText=file.GetPathName();
m_Edit.SetWindowText(strText);
CString str_name,strTable;
str_name.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;\
Persist Security Info=False",strText);
try
{
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConnect=str_name;
m_pConnection->Open(strConnect,"","",adModeUnknown);
}//try
catch(_com_error e)
{
AfxMessageBox(e.Description());
}//catch
m_pRecordset=m_pConnection->OpenSchema(adSchemaTables);
while(!m_pRecordset->ado_EOF)
{
strTable=(char*)(_bstr_t)\
m_pRecordset->GetFields()->GetItem("TABLE_TYPE")->Value;
if(strTable=="TABLE")
{
m_List.AddString((char*)(_bstr_t)\
m_pRecordset->GetFields()->GetItem("TABLE_NAME")->Value);
}//if
m_pRecordset->MoveNext();
}//while
}//if
}
void CVc_accessDlg::OnDblclkList()
{
// TODO: Add your control notification handler code here
m_Grid.DeleteAllItems();
CString sql,str;
m_List.GetText(m_List.GetCurSel(),str);
sql.Format("select* from %s",str);
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open((_bstr_t)sql,m_pConnection.GetInterfacePtr(),\
adOpenDynamic,adLockOptimistic,adCmdText);
Fields* fields=NULL;
long countl,sizel;
BSTR bstr;
enum DataTypeEnum stype;
m_pRecordset->get_Fields(&fields);
countl=fields->Count;
for(long i=countl-1;i>=0;i--)
{
fields->Item[i]->get_Name(&bstr);
fields->Item[i]->get_Type(&stype);
fields->Item[i]->get_DefinedSize(&sizel);
m_Grid.InsertItem(0,0);
m_Grid.SetItemText(0,0,(CString)bstr);
m_Grid.SetItemText(0,1,(char*)(_bstr_t)(long)stype);
m_Grid.SetItemText(0,2,(char*)(_bstr_t)sizel);
}//for
fields->Release();
}