读书人

vc数据库的简单有关问题

发布时间: 2012-09-19 13:43:54 作者: rapoo

vc数据库的简单问题
一段SQL语句放到一个类里面出错,如果写到事件里却没问题,新手求救
一个CDB类,把数据库操作封装

C/C++ code
int CDB::AddData(const CString strSQL){    cmd->CommandText=_bstr_t(strSQL);    try    {        cmd->Execute(NULL,NULL,adCmdText);        con->CommitTrans();        return 1;    }    catch (_com_error e)    {        //CString err;        //err.Format(_T("%s"));        //AfxMessageBox(err);        con->RollbackTrans();        return -1;    }}    //在一个窗体里调用却出错    CDB db;    int i;    i=db.AddData(_T("INSERT INTO DevType VALUES (832,'743','44faderfa')"));    if (i==1)    {        AfxMessageBox(_T("success"));    }    else    {        AfxMessageBox(_T("failure"));    }

这样出错
C/C++ code
_CommandPtr cmd;    cmd.CreateInstance("adodb.command");    cmd->ActiveConnection=theApp.con;    cmd->CommandText=_bstr_t("INSERT INTO DevType VALUES (823,'232','232')");    cmd->Execute(NULL,NULL,adCmdText);

SQL语句没错,字段也对应,数据库连接成功,不存在主键冲突问题

[解决办法]
你这个CDB类是不是有构造函数,是不是构造函数里有初始化的变量.比如需要初始化OLE等
[解决办法]
你单步执行,看db这个变量是否有效,如果有效,就跟踪到AddData函数里,看是哪句有问题
另个,AfxOleInit();这条语句在类时里的初始化里加,不要在try里加,如果一定要在try里加,最好延时几毫秒,已有人发现这个问题了,好象是初始化OLD需要点时间

读书人网 >VC/MFC

热点推荐