为什么小弟我的程序,调试可以通过,而运行却不行

为什么我的程序,调试可以通过,而运行却不行.
下面是我的程序源码.采用ADO的方式,操纵数据源.为数据源添加新的记录,这一段调试可以通过,而采用运行时却不过.为什么,请高人指点.
void CExample_5Dlg::OnBtnPrjaddenter() 
{
// TODO: Add your control notification handler code here
//准备新工程项目的字段取值;
CString prjsymbol,prjname;
prjsymbol=_T("");
prjname=_T("");
GetDlgItemText(IDC_EDT_PRJSYMBOL,prjsymbol);
GetDlgItemText(IDC_EDT_PRJNAME,prjname);
float sum=0.0;
CString date;
date=_T("");

SYSTEMTIME time; 
::GetLocalTime (&time);
date.Format("%d-%d-%d",time.wYear,time.wMonth,time.wDay);


if(prjsymbol.GetLength()==0||prjname.GetLength()==0)
MessageBox("工程代号与工程名称不可为空,请输入!","新建工程出错",MB_OK );
else
{
if(( ES_READONLY & (GetDlgItem(IDC_EDT_PRJNAME)->GetStyle()))==0)
{
/*m_pRstAdmin->Close();
m_pRstAdmin->Open("select * from 工程管理表",(_variant_t)(IDispatch *)m_pConnAdmin,adOpenDynamic,adLockOptimistic ,adCmdText);

 
m_pRstAdmin->AddNew();
m_pRstAdmin->PutCollect("工程代号",_bstr_t(prjsymbol));
m_pRstAdmin->PutCollect("项目名称",_bstr_t(prjname));
m_pRstAdmin->PutCollect("报价总额",_variant_t(sum));
m_pRstAdmin->PutCollect("计算时间",_bstr_t(date));
m_pRstAdmin->Update();*/

_variant_t varName[4],narValue[4];//varNarme,varValue
varName[0] = L"工程代号";
varName[1] = L"项目名称";
varName[2] = L"报价总额";
varName[3] = L"计算时间";
narValue[0]=_bstr_t(prjsymbol);
narValue[1]=_bstr_t(prjname);
narValue[2]=_variant_t(float(sum));
narValue[3]=_bstr_t(date);
const int nCrit = sizeof varName / sizeof varName[0];//nCrit
// Create SafeArray Bounds and initialize the array
SAFEARRAYBOUND rgsaName[1],rgsaValue[1];
rgsaName[0].lLbound = 0; 
rgsaName[0].cElements = nCrit;
SAFEARRAY *psaName = SafeArrayCreate( VT_VARIANT, 1, rgsaName );
rgsaValue[0].lLbound = 0;
rgsaValue[0].cElements = nCrit;
SAFEARRAY *psaValue = SafeArrayCreate( VT_VARIANT, 1, rgsaValue );
// Set the values for each element of the array
HRESULT hr1=S_OK,hr2=S_OK;
for( long i = 0 ; i < nCrit && SUCCEEDED( hr1 ) && SUCCEEDED( hr2 );i++) 

hr1=SafeArrayPutElement(psaName, &i,&varName[i]);
hr2=SafeArrayPutElement(psaValue, &i,&narValue[i]);
}
// Initialize and fill the SafeArray
VARIANT vsaName,vsaValue; 
vsaName.vt = VT_VARIANT | VT_ARRAY;
vsaValue.vt = VT_VARIANT | VT_ARRAY;
V_ARRAY(&vsaName) = psaName;//&vsaName->parray=psaName;
//see definition in oleauto.h file.
V_ARRAY(&vsaValue) = psaValue;
// Add a new record:
m_admindatagrid.SetRefDataSource(NULL);


try
{
if(SUCCEEDED(m_pRstAdmin->AddNew(vsaName,vsaValue)))
{
//复制源文件TBBJ.mdb到ITEM文件夹
CString cmdsoc,cmddstn;
cmdsoc=cmddstn=_T("");
cmdsoc+=m_directory;
cmddstn+=m_directory;
cmdsoc+="\\quoted\\ORIGIN\\TBBJ.mdb";
cmddstn+="\\quoted\\PROJECTS\\ITEM\\";
cmddstn+=prjsymbol;
cmddstn+=".mdb ";
char cmdcopy[256]; 
sprintf(cmdcopy,"cmd.exe /c copy %s %s \0",cmdsoc,cmddstn); 
WinExec(cmdcopy,NULL);


//刷新工程列表

m_admindatagrid.SetRefDataSource(NULL);
m_admindatagrid.SetRefDataSource((LPUNKNOWN)m_pRstAdmin);
m_admindatagrid.SetRowHeight(16);
m_admindatagrid.SetAllowUpdate(TRUE);
m_admindatagrid.Refresh();



//为专业列表指定数据源
CString dataname;
dataname=_T("");
if(m_pRstAdmin->GetRecordCount()>0)