C++用ADO访问数据库 表无效 错误 用C++来访问SQL2005 时出现这样的错误: 对象名 “ XXXXX "无效 (XXXXX为数据库中表的名字)接在后面还有一个 “对象关闭时,不允许操作” 的错误....在前面估计已经用connection的对象正常连接上了SQL的了......!希望各位大侠不吝赐教!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 程序里的表和数据库的表不一致,SQL2005好像有个设置区分大小写的。 单步调试一下,定位出错代码,如果你找不到出错原因,把出错代码附近的几行代码都发到论坛上来..另外,所有对数据库对象属性的设置都必须在调用open打开数据库之前执行.. void CTest111Dlg::OnInsert() { // TODO: Add your control notification handler code here UpdateData(false); CString RECstr="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Data Source=XIE"; pcon.CreateInstance("ADODB.Connection"); pcon->Open((_bstr_t)RECstr,"","",adModeUnknown); CString SQLstr="insert into [student](SNO,Sname,Ssex)values('";// UpdateData(TRUE); SQLstr+=m_NO; SQLstr+="','"; SQLstr+=m_name; SQLstr+="','"; SQLstr+=m_sex; SQLstr+="')"; UpdateData(TRUE); AfxMessageBox(SQLstr); if(FAILED(prec.CreateInstance("ADODB.Recordset"))) //链接数据库 { AfxMessageBox("Create Instance failed!"); return; } try { prec->Open((_variant_t)SQLstr,pcon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); } catch(_com_error e) { AfxMessageBox(e.Description()); }}这是我对话框中按钮的响应函数,红色字段是错误的语句。pcon为Connection的对象prec是RecdorSet的对象。 执行插入语句应该是:_variant_t RecordsAffected;try{if(m_pConnection==NULL) OnInitADOConn(); m_pConnection->Execute(bstrSQL,NULL,adCmdText);return true;}catch(_com_error e){ e.Description(); return false;} CString SQLstr="insert into [student](SNO,Sname,Ssex)values('";后面就没有了?? 这条SQL语句拼写不全啊~~~ 后面有啊,SQLstr+=m_NO;SQLstr+="','";SQLstr+=m_name;SQLstr+="','";SQLstr+=m_sex;SQLstr+="')"; 楼主,可以把你的sql打出来看看是否正确另外如果是插入语句,没必要打开记录集的 sql查询语句是没问题的,我直接从SQL2005那里直接copy过来的语句还是这样的错误!!然后您说的记录集是不是RecordSet对象的实例化啊?假如是不打开有什么办法执行我的SQL语句啊?Connection的对象只能连接到数据库而已吧?thank you .. 那语句全了,而且我换了从SQL2005 能执行的语句过去还是那样的错误....... 1.你用m_pConnection->Execute执行插入语句2.可能不一定是这错,你是不是后面写了记录集的关闭操作?? 还是不行!!也不知道是不是我操作出错了!!我也没用过关闭的操作...现在也不知道是不是没连接上了,将SQL的命令语句改为创建数据库的时候,说是我go的地方有语法错误了!!我在SQL2005里面那语句是没问题的...我的C++和SQL2005都是在虚拟机里面的,不知道这样会不会对连接有影响!?还有一个问题是我在用 odbc 来编程时选择的数据库的表时在 classView 中没有看见我的表的 各属性 的,但一样的操作在我同学的电脑上可以看到的!!这两天都在忙着一些其他活动,没有及时回帖了!对不起!期待您的回帖!!谢谢! vc截取固定像素宽度的字符串方法 用VC做一个简易画图板都需要什么知识 Win32 SDK. 在资源创建的对话框上添加一个ListControl 为什么导致对话框无法显示. 关于导入位图后最小化程序位图消失? LPCTSTR怎么转化为char类型? 这是什么意思 SysDateTimePick32 的奇怪问题 关于多个submit按钮事件如何识别 如何把 char* 转换成CString??(char * 不是普通的char*,而是宽字符的) 如何使自己做的浏览器的滚动条成为平的? EnumChildWindows如何使用? 关于wpe 修改封包的问题
另外,所有对数据库对象属性的设置都必须在调用open打开数据库之前执行..
{
// TODO: Add your control notification handler code here
UpdateData(false);
CString RECstr="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Data Source=XIE";
pcon.CreateInstance("ADODB.Connection");
pcon->Open((_bstr_t)RECstr,"","",adModeUnknown); CString SQLstr="insert into [student](SNO,Sname,Ssex)values('";
// UpdateData(TRUE);
SQLstr+=m_NO;
SQLstr+="','";
SQLstr+=m_name;
SQLstr+="','";
SQLstr+=m_sex;
SQLstr+="')";
UpdateData(TRUE);
AfxMessageBox(SQLstr);
if(FAILED(prec.CreateInstance("ADODB.Recordset"))) //链接数据库
{
AfxMessageBox("Create Instance failed!");
return;
}
try
{
prec->Open((_variant_t)SQLstr,pcon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
}
}这是我对话框中按钮的响应函数,红色字段是错误的语句。pcon为Connection的对象prec是RecdorSet的对象。
_variant_t RecordsAffected;
try
{
if(m_pConnection==NULL)
OnInitADOConn();
m_pConnection->Execute(bstrSQL,NULL,adCmdText);return true;
}
catch(_com_error e)
{
e.Description();
return false;
}
SQLstr+=m_NO;
SQLstr+="','";
SQLstr+=m_name;
SQLstr+="','";
SQLstr+=m_sex;
SQLstr+="')"; 楼主,可以把你的sql打出来看看是否正确
另外如果是插入语句,没必要打开记录集的
然后您说的记录集是不是RecordSet对象的实例化啊?
假如是不打开有什么办法执行我的SQL语句啊?Connection的对象只能连接到数据库而已吧?thank you ..
2.可能不一定是这错,你是不是后面写了记录集的关闭操作??
我也没用过关闭的操作...
现在也不知道是不是没连接上了,将SQL的命令语句改为创建数据库的时候,说是我go的地方有语法错误了!!我在SQL2005里面那语句是没问题的...
我的C++和SQL2005都是在虚拟机里面的,不知道这样会不会对连接有影响!?
还有一个问题是我在用 odbc 来编程时选择的数据库的表时在 classView 中没有看见我的表的 各属性 的,但一样的操作在我同学的电脑上可以看到的!!
这两天都在忙着一些其他活动,没有及时回帖了!对不起!期待您的回帖!!谢谢!