#需要数据库编程获取/处理错误集合,各位大侠请多多指点.

abcbit 2003-06-24 05:10:40
最近从网上下的例子发觉还是嫌有点不够,比如错误处理
数据库用的ACCESS

1.创建表单,对于已经存在的表单名,如何处理,或者覆盖,或者取消.
2.对于不存在的表单,Select后的错误
4.对于不存在的记录,Select后的错误
3.对于一个不存在的字段,而添加记录到此字段的错误
这些错误的出现,如何处理

4.用SQL语句创建一个表时,好像不能有sysName字段,但是在ACCESS2000下却可以.
5.同一个程序是否要少定义 _RecordsetPtr 变量
一些小问题

问题不少,不好意思.封校还没去买书看看~~~
哪位大侠最好把你的数据库程序中错误处理一并发过来.
可以发到我的email: wenwoods@163.com

附:一般我用的所谓错误处理,感觉没什么效果,比如strNetAddr这个表不存在,就是个硬错误了,只能中止程序.

CString strSQL.Format("SELECT * FROM %s", strNetAddr);

m_pRecordset.CreateInstance(_T("ADODB.Recordset"));
try
{
m_pRecordset->Open((LPTSTR)strSQL.GetBuffer(130),
_variant_t((IDispatch *)(((CWinTMPApp*)AfxGetApp())->m_pTreeConn),true), adOpenDynamic,adLockPessimistic,adCmdText);
}

catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
...全文
16 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
abcbit 2003-06-25
  • 打赏
  • 举报
回复
是不是太小儿科了,或者太麻烦了

还是来说说吧,能多少就多少
要不浪费分数了
xystarch 2003-06-25
  • 打赏
  • 举报
回复
你把 sysname 写成 [sysname] 就可以了
提取出来的时候也要加 []
hangyi 2003-06-25
  • 打赏
  • 举报
回复
sysName,这应该是系统字段吧。
不管什么数据库,都有一些单词不能用的,用sql语句创建时。系统不会认为这是要创建的字段,而是取其默认含义的
不过直接创建时,是可以的。
康斯坦汀 2003-06-25
  • 打赏
  • 举报
回复
你的问题,估计在这里:
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}

这段,你捕获了异常,但只是打开一个对话框,没有处理异常。
正确应该这样

catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
...//清除已经申请的内存...以免内存泄漏
return; //返回如果函数是void型的,或者:return FALSE; 如果函数是BOOL型的。
}

这是因为,如果发生异常,异常捕捉模块后面的语句是没有机会运行的。


康斯坦汀 2003-06-25
  • 打赏
  • 举报
回复
这是因为你并没有对异常做任何处理,了解一下C++有关异常的内容吧。

当你定义了try{}catch{}代码块后,捕捉到异常必须进行处理,如果没有处理
异常,c++就会终止程序的运行。这不是vc的问题,是c++的。

c++关于异常的处理,一直是比较受非议的。

具体到你的问题,抱歉,我不用ado,所以并不了解该如何做。但是道理是这。




4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧