请教一下VC该怎样访问数据库?我已经连接成功,为什么老是访问不成功?
头文件里定义了:#import"C:\ProgramFiles\CommonFiles\System\ado\msado15.dll"named_guidsrename(...
头文件里定义了:
#import "C:\Program Files\Common Files\System\ado\msado15.dll" named_guids rename("EOF","adoEOF"), rename("BOF","adoBOF")
文件头部定义了:
_ConnectionPtr m_pConnection;
_CommandPtr m_pCommand;
_RecordsetPtr m_pRecordset;
对话框初始化里有:
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr))
{
hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
然后在一个OnButton事件里放入了访问数据库的语句,就是简单的一句SQL:
// m_AccessList.ResetContent();
m_pConnection.CreateInstance(_uuidof(Connection)); //初始化Connection指针
m_pRecordset.CreateInstance(_uuidof(Recordset));//初始化Recordset指针
try
{
//m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);
m_pConnection->Open("DSN=test.mdb","","",0);
CString strSql="insert into 定位信息 values('20','30','40')";
BSTR bstrSQL = strSql.AllocSysString();
m_pRecordset->Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
m_pRecordset->Close();
m_pConnection->Close();
}
catch (_com_error e)//异常处理
{
AfxMessageBox(e.ErrorMessage());
}
// m_pRecordset->Close();
// m_pConnection->Close();
m_pRecordset = NULL;
m_pConnection = NULL;
编译没错,为什么执行这个button时老是有错误:弹出对话框“未知的错误”。经多次反复改动均不行,请大虾们不吝赐教!
若能帮我解决,追加100分。请大侠们指教啊!
一楼:试过了,还是不行,问题应该不在这儿 展开
#import "C:\Program Files\Common Files\System\ado\msado15.dll" named_guids rename("EOF","adoEOF"), rename("BOF","adoBOF")
文件头部定义了:
_ConnectionPtr m_pConnection;
_CommandPtr m_pCommand;
_RecordsetPtr m_pRecordset;
对话框初始化里有:
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr))
{
hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
然后在一个OnButton事件里放入了访问数据库的语句,就是简单的一句SQL:
// m_AccessList.ResetContent();
m_pConnection.CreateInstance(_uuidof(Connection)); //初始化Connection指针
m_pRecordset.CreateInstance(_uuidof(Recordset));//初始化Recordset指针
try
{
//m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);
m_pConnection->Open("DSN=test.mdb","","",0);
CString strSql="insert into 定位信息 values('20','30','40')";
BSTR bstrSQL = strSql.AllocSysString();
m_pRecordset->Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
m_pRecordset->Close();
m_pConnection->Close();
}
catch (_com_error e)//异常处理
{
AfxMessageBox(e.ErrorMessage());
}
// m_pRecordset->Close();
// m_pConnection->Close();
m_pRecordset = NULL;
m_pConnection = NULL;
编译没错,为什么执行这个button时老是有错误:弹出对话框“未知的错误”。经多次反复改动均不行,请大虾们不吝赐教!
若能帮我解决,追加100分。请大侠们指教啊!
一楼:试过了,还是不行,问题应该不在这儿 展开
4个回答
展开全部
这句估计是错的。下个断言试试:
ASSERT(m_pConnection->Open("DSN=test.mdb","","",0) == S_OK);
估计通不过。
楼主知道DSN是什么东西吗?
DSN==DATA SOURCE NAME即数据源名称。连接数据局库一般通过数据源来告知ADO我们感兴趣的数据库。在程序中特指数据源又是依靠DSN来表示的。DSN不是随数据库的创建默认就存在的。一般是创建了数据库,然后到WINDOWS控制面板中找到"数据源(ODBC)"工具,通过"数据源(ODBC)"工具来创建自己的数据源。依操作系统版本不同,"数据源(ODBC)"工具也可能存在于控制面板中“管理工具”项目下。
数据源(ODBC)工具双击之后就能看见已经被注册了的DSN列表。楼主看下有没有叫做“test.mdb”的数据源?应该没有吧,这个只是文件名而已。然后需要添加数据源,选择ACCESS数据库驱动程序引擎,然后选择自己的数据库文件(即test.mdb)。还可以设置用户名和密码等其他和数据源相关联的设置.
P.S.当然不通过数据源,而直接通过磁盘文件名连接数据库也可以。但几乎没人这样做的,什么理由,楼主有兴趣网上搜一下就知道了。
ASSERT(m_pConnection->Open("DSN=test.mdb","","",0) == S_OK);
估计通不过。
楼主知道DSN是什么东西吗?
DSN==DATA SOURCE NAME即数据源名称。连接数据局库一般通过数据源来告知ADO我们感兴趣的数据库。在程序中特指数据源又是依靠DSN来表示的。DSN不是随数据库的创建默认就存在的。一般是创建了数据库,然后到WINDOWS控制面板中找到"数据源(ODBC)"工具,通过"数据源(ODBC)"工具来创建自己的数据源。依操作系统版本不同,"数据源(ODBC)"工具也可能存在于控制面板中“管理工具”项目下。
数据源(ODBC)工具双击之后就能看见已经被注册了的DSN列表。楼主看下有没有叫做“test.mdb”的数据源?应该没有吧,这个只是文件名而已。然后需要添加数据源,选择ACCESS数据库驱动程序引擎,然后选择自己的数据库文件(即test.mdb)。还可以设置用户名和密码等其他和数据源相关联的设置.
P.S.当然不通过数据源,而直接通过磁盘文件名连接数据库也可以。但几乎没人这样做的,什么理由,楼主有兴趣网上搜一下就知道了。
展开全部
按钮操作里面不需要重新调用
m_pConnection.CreateInstance
也不需要重新调用
m_pConnection->Open
m_pConnection.CreateInstance
也不需要重新调用
m_pConnection->Open
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
CString strSql="insert into 定位信息 values('20','30','40')";
中间表名 改成 英文的 试试
中间表名 改成 英文的 试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数据库的表有问题不?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询