怎么设置错误处理 导入数据库有关问题
如何设置异常处理 导入数据库问题
要从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);
要从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);