读书人

怎么设置错误处理 导入数据库有关问题

发布时间: 2012-02-12 17:16:34 作者: rapoo

如何设置异常处理 导入数据库问题
要从Excel向Access中导入,两类表,每一类表都是固定格式的(字段个数和字段格式);我想处理两类异常,一个是输入的Excel格式是否是正确的;另一类是处理获取的记录个数(GetUsedRange())比实际数据要多的情况。(当Excel有效记录的下面有制表符时,读出的记录个数就比较多)

还请大侠帮帮忙。。。

//获取行数与列数
range.AttachDispatch(sheet.GetUsedRange(),true);
range.AttachDispatch(range.GetRows(),true);
rowNum=range.GetCount();
range.AttachDispatch(range.GetColumns(),true);
columnNum=range.GetCount();

range.AttachDispatch(sheet.GetCells());


CString sql,sql1,piaohao,cdate,AAA;
_variant_t m;

_variant_t n[34];
switch(m_nCaseIndex)
{
case -1:
AfxMessageBox("m_nCaseIndex仍然是默认值");
break;
//第一类导表
case 0:

for(i=2;i<=rowNum;i++)
{
//选取Excel每一列的记录
for(j=1;j<=columnNum;j++)
n[j]=range.GetItem(COleVariant((long)i),COleVariant((long)j));

piaohao=(char*)(_bstr_t)n[5];
sql.Format("select * from daobiao where E='"+piaohao+"'");
m_pRecordset=theApp.m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText);

if(!m_pRecordset->adoEOF)
{
// AfxMessageBox("这个票号已经导入过了:"+piaohao);
continue;
}
else
{

//讲一个买入记录添加到买入导表
sql.Format("insert into mairudaobiao(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,AA,AB,AC) values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",
(char*)(_bstr_t)n[1],(char*)(_bstr_t)n[2],(char*)(_bstr_t)n[3],(char*)(_bstr_t)n[4],(char*)(_bstr_t)n[5],(char*)(_bstr_t)n[6],(char*)(_bstr_t)n[7],(char*)(_bstr_t)n[8],(char*)(_bstr_t)n[9],(char*)(_bstr_t)n[10],(char*)(_bstr_t)n[11],(char*)(_bstr_t)n[12],(char*)(_bstr_t)n[13],(char*)(_bstr_t)n[14],(char*)(_bstr_t)n[15],(char*)(_bstr_t)n[16],(char*)(_bstr_t)n[17],(char*)(_bstr_t)n[18],(char*)(_bstr_t)n[19],(char*)(_bstr_t)n[20],(char*)(_bstr_t)n[21],(char*)(_bstr_t)n[22],(char*)(_bstr_t)n[23],(char*)(_bstr_t)n[24],(char*)(_bstr_t)n[25],(char*)(_bstr_t)n[26],(char*)(_bstr_t)n[27],(char*)(_bstr_t)n[28],(char*)(_bstr_t)n[29]);
theApp.m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText);



//将一个买入记录添加到daobiao相对应的位置
sql.Format("insert into daobiao(AAA,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,AA,AB,AC,AN,AO,AP) values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",
"00",(char*)(_bstr_t)n[1],(char*)(_bstr_t)n[2],(char*)(_bstr_t)n[3],(char*)(_bstr_t)n[4],(char*)(_bstr_t)n[5],(char*)(_bstr_t)n[6],(char*)(_bstr_t)n[7],(char*)(_bstr_t)n[8],(char*)(_bstr_t)n[9],(char*)(_bstr_t)n[10],(char*)(_bstr_t)n[11],(char*)(_bstr_t)n[12],(char*)(_bstr_t)n[13],(char*)(_bstr_t)n[14],(char*)(_bstr_t)n[15],(char*)(_bstr_t)n[16],(char*)(_bstr_t)n[17],(char*)(_bstr_t)n[18],(char*)(_bstr_t)n[19],(char*)(_bstr_t)n[20],(char*)(_bstr_t)n[21],(char*)(_bstr_t)n[22],(char*)(_bstr_t)n[23],(char*)(_bstr_t)n[24],(char*)(_bstr_t)n[25],(char*)(_bstr_t)n[26],(char*)(_bstr_t)n[27],(char*)(_bstr_t)n[28],(char*)(_bstr_t)n[29],"人办","4.1951","-40");
theApp.m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText);

}



}

break;
//第二类导表
case 1:
for(i=2;i<=rowNum;i++)
{
for(j=1;j<=columnNum;j++)
n[j]=range.GetItem(COleVariant((long)i),COleVariant((long)j));

piaohao=(char*)(_bstr_t)n[3];
sql.Format("select * from maichudaobiao where C='"+piaohao+"'");
m_pRecordset=theApp.m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText);

if(!m_pRecordset->adoEOF)
{
// AfxMessageBox("这个票号已经有一个卖出记录:"+piaohao);
continue;
}
else
{
sql.Format("select * from daobiao where E='"+piaohao+"'");
m_pRecordset=theApp.m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText);



if(m_pRecordset->adoEOF)
{
AfxMessageBox("这个票号在买入导表里面没有记录:"+piaohao);
continue;
}

else
{
//讲一个卖出记录添加到卖出导表
sql.Format("insert into maichudaobiao(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T) values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",
(char*)(_bstr_t)n[1],(char*)(_bstr_t)n[2],(char*)(_bstr_t)n[3],(char*)(_bstr_t)n[4],(char*)(_bstr_t)n[5],(char*)(_bstr_t)n[6],(char*)(_bstr_t)n[7],(char*)(_bstr_t)n[8],(char*)(_bstr_t)n[9],(char*)(_bstr_t)n[10],(char*)(_bstr_t)n[11],(char*)(_bstr_t)n[12],(char*)(_bstr_t)n[13],(char*)(_bstr_t)n[14],(char*)(_bstr_t)n[15],(char*)(_bstr_t)n[16],(char*)(_bstr_t)n[17],(char*)(_bstr_t)n[18],(char*)(_bstr_t)n[19],(char*)(_bstr_t)n[20]);
theApp.m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText);

if(strcmp((char*)(_bstr_t)m_pRecordset->GetCollect("AAA"),"00")==0)
{
//根据票号,将一个卖出记录添加到daobiao相应的位置,没有票号时,不添加
sql.Format("update daobiao set AAA='%s',AD='%s',AE='%s',AF='%s',AG='%s',AH='%s',AI='%s',AJ='%s',AK='%s',AL='%s',AM='%s' where E='%s'","10",(char*)(_bstr_t)n[2],(char*)(_bstr_t)n[5],(char*)(_bstr_t)n[8],(char*)(_bstr_t)n[9],(char*)(_bstr_t)n[10],(char*)(_bstr_t)n[11],(char*)(_bstr_t)n[12],(char*)(_bstr_t)n[13],(char*)(_bstr_t)n[16],(char*)(_bstr_t)n[18],(char*)(_bstr_t)n[3]);
theApp.m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText);
}
else
{
//根据票号,将一个卖出记录添加到daobiao相应的位置,没有票号时,不添加
sql.Format("update daobiao set AAA='%s',AD='%s',AE='%s',AF='%s',AG='%s',AH='%s',AI='%s',AJ='%s',AK='%s',AL='%s',AM='%s' where E='%s'","11",(char*)(_bstr_t)n[2],(char*)(_bstr_t)n[5],(char*)(_bstr_t)n[8],(char*)(_bstr_t)n[9],(char*)(_bstr_t)n[10],(char*)(_bstr_t)n[11],(char*)(_bstr_t)n[12],(char*)(_bstr_t)n[13],(char*)(_bstr_t)n[16],(char*)(_bstr_t)n[18],(char*)(_bstr_t)n[3]);
theApp.m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText);
}

}

}
}
}

代码有些乱,可能粘贴出去徽标叫好看、、、

[解决办法]
用这个软件试试你SQL
ADO异常捕获改成这样试试

C/C++ code
try{//你的ADO代码}catch (_com_error& e){CString strMsg;strMsg.Format(_T("错误描述:%s\n错误消息%s",         (LPCTSTR)e.Description(),        (LPCTSTR)e.ErrorMessage());AfxMessageBox(strMsg);} 

读书人网 >VC/MFC

热点推荐