真的很抱歉!!我这次把你的代码放了进去!全部改了!可是还是报错!!!报error的错,然后显示个提示框: Microsoft Visual c++ Runtime Library!--- Runtime Error!! Program:xxxxxx(此处为可执行文件路径) This application has requested the Runtime to terminate it in an unusual way.please contact the application 's support team for more information. 我于是就在 catch(_com_error &e) { // Notify the user of errors if any. AfxMessageBox(_T("error")); } 里面加了个AfxMessageBox("DF");!!果然在报error前面提示DB两个字母,应该是com组建没有成功,或许是我的电脑有毛病吗??在我机子上不行!可是我昨天去请教一位学长,他的电脑也是报这个错误!! 我是已经在stdafx.h文件里加过了#pragma warning (disable: 4146) #import "C:\Program Files\Common Files\System\ado\msadox.dll" #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "EndOfFile") #import "C:\Program Files\Common Files\System\ado\msjro.dll" #pragma warning (default: 4146) 而且在instance()函数里放置了::AfxOleInit(); 就这么多了,这就是我全部所有的代码了,我的创建动态连接库的代码是放在C**Dlg::OnInitDialog()里的!没了!! 顺便说一句!我已经抓狂了!!大毛麻烦你再帮我看看把!麻烦你了!!
http://blog.csdn.net/World7th/archive/2007/06/02/1635297.aspx
你说的我做了还是有错误!现在我又再次调试了一遍!最后缩小了范围!见代码
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRs;
_variant_t vFieldValue;
CString strFieldValue;
HRESULT hr = S_OK;
CString strcnn(_T("Provider=Microsoft.JET.OLEDB.4.0;Data source = d:\\new.mdb"));
try
{
ADOX::_CatalogPtr m_pCatalog = NULL;
hr=m_pCatalog.CreateInstance(__uuidof(ADOX::Catalog));
if(FAILED(hr))
{
AfxMessageBox("DF");
_com_issue_error(hr);
}
else
{
m_pCatalog->Create(_bstr_t(strcnn)); //Create MDB }
}
catch(_com_error &e)
{
// Notify the user of errors if any.
AfxMessageBox(_T("error"));
}
其余部分我都给注释掉了,发现程序抛出异常,先提示对话框显示“DF”,然后显示error!应该是hr=m_pCatalog.CreateInstance(__uuidof(ADOX::Catalog));这句没有成功!可是该怎样改呢????大家帮帮忙啊!谢谢了
try
{
ADOX::_CatalogPtr m_pCatalog;
hr=m_pCatalog.CreateInstance(__uuidof(ADOX::Catalog));
if(FAILED(hr))
{
_com_issue_error(hr);
}
else
{
m_pCatalog->Create(strcnn); //Create MDB
}
}
catch(_com_error &e)
{
// Notify the user of errors if any.
AfxMessageBox(_T("error"));
} //创建一个连接对象打开刚刚建立的mdb文件 m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\new.mdb;", "", "", adConnectUnspecified);
//创建表
m_pRs.CreateInstance(__uuidof(Recordset));
m_pConnection->Execute("CREATE TABLE users(id int primary key, name text)",0,1); //创建表new
m_pRs->Open("select * from users",m_pConnection.GetInterfacePtr(), adOpenDynamic,adLockOptimistic,adCmdText);
if(VARIANT_FALSE==m_pRs->adoEOF) {
vFieldValue=m_pRs->GetCollect("id");
strFieldValue=(char*)_bstr_t(vFieldValue);
vFieldValue.Clear();
vFieldValue=m_pRs->GetCollect("name");
strFieldValue=(char*)_bstr_t(vFieldValue);
vFieldValue.Clear(); }
UpdateData(FALSE); m_pRs->Close();
m_pConnection->Close(); 可以了
m_pConnection.CreateInstance(__uuidof(Recordset)); //错,改为下句
--------------------------------------------------------
m_pRs.CreateInstance(__uuidof(Recordset)); 你m_pConnection- >Open 用了两次,前面一次去掉
着到底怎么回事啊???
AfxMessageBox("DF");
捕捉的是: if(FALSE(m_pConnection.CreateInstance("ADODB.Connection")))
的错误
而你这句用重了,
重了不止一次
m_pConnection.CreateInstance 你用了5次
m_pConnection.Open 你用了两次
拜托你仔细点
Microsoft Visual c++ Runtime Library!---
Runtime Error!!
Program:xxxxxx(此处为可执行文件路径)
This application has requested the Runtime to terminate it in an unusual way.please contact the application 's support team for more information.
我于是就在
catch(_com_error &e)
{
// Notify the user of errors if any.
AfxMessageBox(_T("error"));
}
里面加了个AfxMessageBox("DF");!!果然在报error前面提示DB两个字母,应该是com组建没有成功,或许是我的电脑有毛病吗??在我机子上不行!可是我昨天去请教一位学长,他的电脑也是报这个错误!!
我是已经在stdafx.h文件里加过了#pragma warning (disable: 4146)
#import "C:\Program Files\Common Files\System\ado\msadox.dll"
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "EndOfFile")
#import "C:\Program Files\Common Files\System\ado\msjro.dll"
#pragma warning (default: 4146)
而且在instance()函数里放置了::AfxOleInit();
就这么多了,这就是我全部所有的代码了,我的创建动态连接库的代码是放在C**Dlg::OnInitDialog()里的!没了!!
顺便说一句!我已经抓狂了!!大毛麻烦你再帮我看看把!麻烦你了!!
{
::CoInitialize(NULL);
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRs;
_variant_t vFieldValue;
CString strFieldValue; HRESULT hr = S_OK;
_bstr_t strcnn(_T("Provider=Microsoft.JET.OLEDB.4.0;Data source=d:\\new.mdb"));
try
{
ADOX::_CatalogPtr m_pCatalog;
hr=m_pCatalog.CreateInstance(__uuidof(ADOX::Catalog));
if(FAILED(hr))
{
_com_issue_error(hr);
}
else
{
m_pCatalog->Create(strcnn); //Create MDB
}
}
catch(_com_error &e)
{
// Notify the user of errors if any.
AfxMessageBox(_T("error"));
} //创建一个连接对象打开刚刚建立的mdb文件 m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\new.mdb;", "", "", adConnectUnspecified);
//创建表
m_pRs.CreateInstance(__uuidof(Recordset));
m_pConnection->Execute("CREATE TABLE users(id int primary key, name text)",0,1); //创建表new
m_pRs->Open("select * from users",m_pConnection.GetInterfacePtr(), adOpenDynamic,adLockOptimistic,adCmdText);
if(VARIANT_FALSE==m_pRs->adoEOF) {
vFieldValue=m_pRs->GetCollect("id");
strFieldValue=(char*)_bstr_t(vFieldValue);
vFieldValue.Clear();
vFieldValue=m_pRs->GetCollect("name");
strFieldValue=(char*)_bstr_t(vFieldValue);
vFieldValue.Clear(); }
UpdateData(FALSE); m_pRs->Close();
m_pConnection->Close();
::CoUninitialize();
}
//---------------------------
//STDAFX.H#import "d:\program files\common files\system\ado\msado15.dll" \
no_namespace \
rename ("EOF", "adoEOF") #import "d:\Program Files\Common Files\System\ADO\msadox.dll"这是我试的代码,VS2003,你试下,如果不行,你可以发给我(如果不涉及保密的话)[email protected] 或QQ 286569729
----------------
送佛送到西