bool RxADO::SetConnection(CString LinkString) { ::CoInitialize(NULL); cnn=NULL; cnn.CreateInstance(__uuidof(Connection)); cnn->ConnectionString=(_bstr_t)LinkString; try{ cnn->Open(L"",L"",L"",adCmdUnspecified); } catch(_com_error& e) { ErrorsPtr pErrors=cnn->GetErrors(); if (pErrors->GetCount()==0) { CString ErrMsg=e.ErrorMessage(); MessageBox(NULL,"·¢Éú´íÎó:\n\n"+ErrMsg,"ϵͳÌáʾ",MB_OK|MB_ICONEXCLAMATION); return false; } else { for (int i=0;i<pErrors->GetCount();i++) { _bstr_t desc=pErrors->GetItem((long)i)->GetDescription(); MessageBox(NULL,"·¢Éú´íÎó:\n\n"+desc,"ϵͳÌáʾ",MB_OK|MB_ICONEXCLAMATION); return false; } } } return true; }
UINT CSplash::ConnectData(LPVOID ps) { AfxOleInit(); //初始化COM库 if(FAILED(HospitalConnect.CreateInstance(__uuidof(Connection)))) { ((CSplash *)ps)->ConnectFlag=true; ((CSplash *)ps)->timer_count=3; //连接COM失败标志 ((CSplash *)ps)->SendMessage(WM_CLOSE,0,0); return 0; } try{ HospitalConnect->Open(_bstr_t(theApp.strConn),"","",adModeUnknown); ((CSplash *)ps)->ConnectFlag=true; ((CSplash *)ps)->timer_count=1; //连接成功标志 ((CSplash *)ps)->SendMessage(WM_CLOSE,0,0); return 1; } catch(_com_error e) { ((CSplash *)ps)->ConnectFlag=true; //作为进度条线程停止标志 ((CSplash *)ps)->timer_count=2; //连接失败标志 ((CSplash *)ps)->SendMessage(WM_CLOSE,0,0); return 2; } }
DWORD CNHSQLServerDBO::OpenDB(_ConnectionPtr &pConnection, const wchar_t *const pwchDataSource, const wchar_t *const pwchInitialCatalog, const wchar_t *const pwchUserID, const wchar_t *const pwchPassword) { assert(NULL != pwchDataSource); assert(NULL != pwchInitialCatalog); assert(NULL != pwchUserID); assert(NULL != pwchPassword); DWORD dwReturn(0x00); wchar_t wchSql[MAX_PATH]; ZeroMemory(wchSql, sizeof(wchSql)); // 加载COM组件 CoInitialize(NULL); try { _snwprintf_s(wchSql, _countof(wchSql), _TRUNCATE, L"Provider=SQLOLEDB; Data Source=%s; Initial Catalog=%s; User ID=%s; Password=%s;", pwchDataSource, pwchInitialCatalog, pwchUserID, pwchPassword); pConnection.CreateInstance(L"ADODB.Connection"); //pConnection->ConnectionTimeout = 5; //pConnection->CommandTimeout = 5; pConnection->Open((_bstr_t)wchSql, L"", L"", adModeUnknown); } catch (_com_error &e) { //#ifdef _DEBUG const int nErrMsgLength(MAX_PATH); wchar_t *pwchErrMsg = new wchar_t[nErrMsgLength](); _snwprintf_s(pwchErrMsg, nErrMsgLength, _TRUNCATE, L"CNHSQLServerDBO::OpenDB发生错误(执行%s)。", wchSql); // 输出错误信息到输出窗口 OutputDebugStringW(L"\t"); OutputDebugStringW(pwchErrMsg); OutputDebugStringW(L"\n"); // 输出错误信息到日志文件 if (0 != wcscmp(m_wchLogFilePath, L"")) { // 当日志文件路径不为空时,写日志 CNHLogAPI::WriteLogEx(m_wchLogFilePath, LOG_ERR, L"NHSQLServerDBO", pwchErrMsg); } if (NULL != pwchErrMsg) { delete[] pwchErrMsg; pwchErrMsg = NULL; } OutputDBErrMsg(e); //#endif dwReturn = 0x01; } return dwReturn; }
int CCommDBOper::ADOConExec(_ConnectionPtr &pCon,const CString strCmdSql,CString strDcrCmd,int iWarn) { //函数功能说明: 由pCon(Connection)对象执行指定SQL命令 //pCon 数据库连接对象 //strCmdSql 要执行SQL的命令语句 //strDcrCmd是对要使用SQL命令的描述 if (ADOConIsOpened(pCon,iWarn) != RET_OK) //判断当前连接对象是否已打开 { WarnMessage("指定数据库对象未连接,退出!",iWarn); return RET_FAILED; } try { pCon->Execute(_bstr_t(strCmdSql),NULL,adCmdText); } catch (_com_error &e) { CString strMsg; strMsg.Format("%s:%d %s", __FILE__, __LINE__, (LPSTR)e.Description()); AfxMessageBox(strMsg); CString errormessage; errormessage.Format("功能说明: %s\r\n数据库连接对象执行下列SQL命令\r\n%s\r\n失败! 错误信息:%s",strDcrCmd,strCmdSql,e.ErrorMessage()); WarnMessage(errormessage,iWarn);///显示错误信息 return RET_FAILED; } return RET_OK; }
/* µ±nStale=1ʱ ×Ö·û×ֶηµ»Ø×Ö·û×ֶΠµ±nStale=2ʱ ÊýÖµ×ֶηµ»Ø×Ö·û×ֶΠµ±nStale=3ʱ ÈÕÆÚ×ֶηµ»Ø×Ö·û×ֶΠ*/ CString RxADO::FieldToOtherField(CString cDataBaseName, CString cFieldName, CString cValue, CString cReturnField, int nStale=1) { CString sSQL,sRTValue; _RecordsetPtr Fieldrst; Fieldrst.CreateInstance(__uuidof(Recordset)); Fieldrst.CreateInstance(__uuidof(Recordset)); if(nStale==1) //×Ö·û×ֶηµ»Ø×Ö·û×ֶΠsSQL.Format("SELECT * FROM %s WHERE %s='%s'",cDataBaseName,cFieldName,cValue); if(nStale==2)//ÊýÖµ×ֶηµ»Ø×Ö·û×ֶΠsSQL.Format("SELECT * FROM %s WHERE %s=%s",cDataBaseName,cFieldName,cValue); if(nStale==3)//ÈÕÆÚ×ֶηµ»Ø×Ö·û×ֶΠsSQL.Format("SELECT * FROM %s WHERE %s=#%s#",cDataBaseName,cFieldName,cValue); try{ Fieldrst=cnn->Execute((_bstr_t)sSQL,NULL,adCmdText); } catch(_com_error&e) { GetADOErrors(e); return ""; } if(GetRecordCount(Fieldrst)<=0) return ""; _variant_t vValue=Fieldrst->GetCollect((_bstr_t)cReturnField); if(vValue.vt==VT_EMPTY) return ""; sRTValue=(char*)(_bstr_t)vValue; sRTValue.TrimRight(); sRTValue.TrimLeft(); return sRTValue; }
/////////////////////////////////////////////////////// // // Name: GetADOError // Params: Conn1 - connection pointer // Returns: ADO error string // Description: determines ADO error(s) that occurred /////////////////////////////////////////////////////// std::string GetADOError(_ConnectionPtr Conn1) { USES_CONVERSION; ErrorsPtr Errs1 = NULL; ErrorPtr Err1 = NULL; std::string sRet("ADO Error. Description: "); long nCount; try { if( Conn1 == NULL ) return sRet + (std::string)"NULL Connection"; // Enumerate Errors Collection and display properties of each object. Errs1 = Conn1->GetErrors(); nCount = Errs1->GetCount(); // Loop through Errors Collection for( long i = 0; i < nCount; i++ ) { // Get Error Item Err1 = Errs1->GetItem((_variant_t)((long)i) ); sRet += (std::string)" Description: " + (std::string)OLE2T(Err1->GetDescription()); } if( Errs1 != NULL ) Errs1->Release(); if( Err1 != NULL ) Err1->Release(); } catch(...) { sRet += " Unknown Error"; } return sRet; }
CString GetConnectIP() { CString bstr = (char*)theConnection->GetConnectionString(); int nl = bstr.Find("Data Source=") + strlen("Data Source="); int nr = bstr.Find(";", nl); return bstr.Mid(nl, nr-nl); }
//断开连接 void ExitConnect(void) { if(m_pRecordset!=NULL){ m_pRecordset->Close(); m_pConnection->Close(); } ::CoUninitialize(); //释放环境 }
// //封闭ADO类,方便以后使用 void ADOConn::OnInitADOConn(void) { ::CoInitialize(NULL); try { //创建connection对象 m_pConnection.CreateInstance("ADODB.Connection"); //设置连接字符串 _bstr_t strConnect="uid=;pwd=;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=Grades.mdb;"; //SERVER和UID,PWD的设置根据实际情况来设置" /*m_pConnection->Open(strConnect,_T("admin"),_T("owenyang"),adModeUnknown);*/ m_pConnection->Open(strConnect,"admin","owenyang",adModeUnknown); } catch (_com_error e) { //显示错误信息 AfxMessageBox(e.Description()); } }
DWORD CNHSQLServerDBO::CloseDB(_ConnectionPtr &pConnection) { //assert(NULL != pConnection); DWORD dwReturn(0x00); try { //关闭连接 if (NULL!=pConnection && adStateClosed!=pConnection->State) { pConnection->Close(); } if (NULL != pConnection) { pConnection.Release(); pConnection = NULL; } } catch (_com_error &e) { //#ifdef _DEBUG // 输出错误信息到输出窗口 OutputDebugStringW(L"\t"); OutputDebugStringW(L"CNHSQLServerDBO::CloseDB发生错误。"); OutputDebugStringW(L"\n"); // 输出错误信息到日志文件 if (0 != wcscmp(m_wchLogFilePath, L"")) { // 当日志文件路径不为空时,写日志 CNHLogAPI::WriteLogEx(m_wchLogFilePath, LOG_ERR, L"NHSQLServerDBO", L"CNHSQLServerDBO::CloseDB发生错误。"); } OutputDBErrMsg(e); //#endif dwReturn = 0x01; } // 卸载COM组件 CoUninitialize(); return dwReturn; }
void ADOConn::ExitConnect(void) { //关闭记录集和连接 if (m_pRecordset!=NULL) { m_pRecordset->Close(); } m_pConnection->Close(); ::CoUninitialize(); }
//连接SQL void Connect() { try{ ::CoInitialize(NULL); //初始化COM环境 m_pConnection.CreateInstance(__uuidof(Connection)); //创建连接对象 //通过DSN数据源对任何支持ODBC的数据库进行连接 //m_pConnection->ConnectionString="Provider=SQLOLEDB.1; Persist Security Info=True; User ID=sa; Password=a1!; Initial Catalog=InTouch; Data Source=WIN-P6OLLUM9PDM"; //请将数据库相应ID与Password更改 //不通过DSN对SQL SERVER数据库进行连接 m_pConnection->ConnectionString="driver={SQL Server};Server=127.0.0.1;DATABASE=InTouch;UID=sa;PWD=a1!"; //连接服务器和数据库 HRESULT hr=m_pConnection->Open("", "", "", 0); if(hr!=S_OK) cout<<"Can not connect to the specified database!"<<endl; } catch(_com_error e){ cout<<e.Description()<<endl; } }
void RxADO::GetADOErrors(_com_error eErrors) { ErrorsPtr pErrors=cnn->GetErrors(); if (pErrors->GetCount()==0) MessageBox(NULL,eErrors.ErrorMessage(),"´í Îó",MB_OK|MB_ICONEXCLAMATION); else { for (int i=0;i<pErrors->GetCount();i++) { _bstr_t desc=pErrors->GetItem((long)i)->GetDescription(); MessageBox(NULL,desc,"´í Îó",MB_OK|MB_ICONEXCLAMATION); } } }
//断开指定数据库连接对象连接 int CCommDBOper::ADOCloseConnectDB(_ConnectionPtr &pCon,int iWarn) { if ((pCon != NULL) && (pCon->State == adStateOpen) ) { try { pCon->Close(); } catch (_com_error &e) { CString strMsg; strMsg.Format("%s:%d %s", __FILE__, __LINE__, (LPSTR)e.Description()); AfxMessageBox(strMsg); } } return RET_OK; }
_RecordsetPtr& GetRecordset(_bstr_t SQL) { m_pRecordset=NULL; try{ if(m_pConnection==NULL) //连接 Connect(); m_pRecordset.CreateInstance(__uuidof(Recordset)); m_pRecordset->Open((_bstr_t)SQL, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText); } catch(_com_error e){ cout<<e.Description()<<endl; m_pRecordset=NULL; return m_pRecordset; } return m_pRecordset; }
DWORD CNHSQLServerDBO::ExecuteDML(const _ConnectionPtr &pConnection, const wchar_t *const pwchSQL, int *const pnRowsInvolved/*=NULL*/) { assert(NULL != pConnection); assert(NULL != pwchSQL); DWORD dwReturn(0x00); try { _variant_t vRA; pConnection->Execute((_bstr_t)pwchSQL, &vRA, adCmdText); if (NULL != pnRowsInvolved) { *pnRowsInvolved = static_cast<int>(vRA); } } catch (_com_error &e) { //#ifdef _DEBUG const int nErrMsgLength(MAX_PATH); wchar_t *pwchErrMsg = new wchar_t[nErrMsgLength](); _snwprintf_s(pwchErrMsg, nErrMsgLength, _TRUNCATE, L"CNHSQLServerDBO::ExecuteDML发生错误(执行%s)。", pwchSQL); // 输出错误信息到输出窗口 OutputDebugStringW(L"\t"); OutputDebugStringW(pwchErrMsg); OutputDebugStringW(L"\n"); // 输出错误信息到日志文件 if (0 != wcscmp(m_wchLogFilePath, L"")) { // 当日志文件路径不为空时,写日志 CNHLogAPI::WriteLogEx(m_wchLogFilePath, LOG_ERR, L"NHSQLServerDBO", pwchErrMsg); } if (NULL != pwchErrMsg) { delete[] pwchErrMsg; pwchErrMsg = NULL; } OutputDBErrMsg(e); //#endif dwReturn = 0x01; } return dwReturn; }
void CDlgHistory::OnBnClickedButtonSearch() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); GetDlgItem(IDC_BUTTON_SEARCH)->EnableWindow(FALSE); CString AntID,SensorID,StrStartTime,StrStopTime; m_CtlChart.GetToolBar(0).DoButtonClickResume(); m_CtlChart.GetYAxis(0).SetSpan(100); m_CtlChart.GetYAxis(0).SetMin(0); m_CtlChart.GetXAxis(0).SetMin(72686); m_CtlChart.GetXAxis(0).SetSpan(0.00694444444444444); m_CtlChart.GetChannel(0).Clear(); AntID.Format("%d",nIndexAnt+1); AntID="天线"+AntID; SensorID.Format("%d",nIndexSensor+1); SensorID="传感器"+SensorID; StrStartTime.Format("%f",m_DataBegin); StrStopTime.Format("%f",m_DataEnding); _bstr_t bstrSQLdata ="SELECT Temperature,RecordTime FROM DB_Data where ReaderID='"+strReader+"' and AntID='"+AntID+"' and SensorID='"+SensorID+"' and RecordTime<"+StrStopTime+" and RecordTime>"+StrStartTime+" and (Notes='正常') order by DataID;"; _RecordsetPtr m_pRecordsetch; m_pRecordsetch.CreateInstance(__uuidof(Recordset)); m_pRecordsetch->Open(bstrSQLdata,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); if (!m_pRecordsetch->adoEOF) { while(!m_pRecordsetch->adoEOF) { CString temper=(LPCSTR)(_bstr_t)m_pRecordsetch->GetCollect("Temperature"); CString time=(LPCSTR)(_bstr_t)m_pRecordsetch->GetCollect("RecordTime"); temper.ReleaseBuffer(); m_CtlChart.GetChannel(0).AddXY(atof(time), atof(temper) / 10); m_pRecordsetch->MoveNext(); } GetDlgItem(IDC_BUTTON_SEARCH)->EnableWindow(TRUE); m_CtlChart.GetYAxis(0).ZoomToFitFast(); } else { GetDlgItem(IDC_BUTTON_SEARCH)->EnableWindow(TRUE); AfxMessageBox("查询不到数据!"); } m_pRecordsetch->Close(); }
BOOL newproject::tableExists(_ConnectionPtr pCon, CString tbn) { if(pCon==NULL || tbn=="") return false; _RecordsetPtr rs; if(tbn.Left(1)!="[") tbn="["+tbn; if(tbn.Right(1)!="]") tbn+="]"; try { rs=pCon->Execute(_bstr_t(tbn),NULL,adCmdTable); rs->Close(); return true; } catch(_com_error e) { return false; } }
// 打开记录集 _RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL) { //TODO: insert return statement here try { if (m_pConnection==NULL) { OnInitADOConn(); } //创建记录对象 m_pRecordset.CreateInstance(__uuidof(Recordset)); //取得表中记录 m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic, adLockOptimistic,adCmdText); } catch (_com_error e) { e.Description(); } return m_pRecordset; }
void CMorphaResDlg::GetRecordSet(_RecordsetPtr &rs, int row1, int row2) { ASSERT(row1>=0&&row2>=0&&row1<=row2); CString strSQL; CString tablename; if(((CMorphaDataRetriveDlg*)(GetParent()->GetParent()->GetParent()))->IsInqueryState()) tablename = "morphaforinquery"; else tablename = "morphafordisplay"; if(row1 == 0 ) { strSQL.Format("select * from (select top %d * from %s) a " ,row2,tablename); } else { strSQL.Format("select * from (select top %d * from %s) a \ where pdetectno not in(select top %d pdetectno from %s)" ,row2,tablename,row1,tablename); } if(rs == NULL) rs.CreateInstance("adodb.recordset"); rs = theConnection->Execute((LPCSTR)strSQL,NULL,adCmdText); }
void RxADO::Close() { cnn->Close(); }
//------------------------------------------------------------------ // DATE :[2005/09/30] // Parameter(s) : // Return : // Remark :将EXCEL文件导出到ACCESS数据库表中 //------------------------------------------------------------------ BOOL CImportAutoPD::ImportExcelToAccess(CString strExcelFileName, CString strWorksheetName, _ConnectionPtr pConDes, CString strTblName,CString strCurProID,CString KeyFieldName,CString ProFieldName) { CString strSQL; //SQL语句 _ConnectionPtr pConExcel; //连接EXCEL文件 _RecordsetPtr pRsExcel; _RecordsetPtr pRsAccess; _RecordsetPtr pRsTmp; pConExcel.CreateInstance(__uuidof(Connection)); pRsExcel.CreateInstance(__uuidof(Recordset)); pRsAccess.CreateInstance(__uuidof(Recordset)); pRsTmp.CreateInstance(__uuidof(Recordset)); STRUCT_ENG_ID listID[10]; //不同工程的最大序号和工程名称 int nProCount=0; //不同工程的个数 CString strTemp; int Rj=0; //工程号在Excel中的列 int ProjNum=1; int ProjIndex=0; int ID; if (NULL == pConDes) { return FALSE; } try { EDIBgbl::CAPTION2FIELD* pFieldStruct=NULL; _variant_t varTmp; //获得EXCEL中的字段名和ACCESS中的字段的对应值,返回字段个数 int nFieldCount = GetField2Caption(pFieldStruct); if (nFieldCount <= 0) { return FALSE; } strSQL = CONNECTSTRING_EXCEL + strExcelFileName;//连接EXCEL文件 pConExcel->Open(_bstr_t(strSQL), "", "", -1); //打开Excel工作表,加一个符号$如果出错再重试不加$再打开一次. strSQL = "SELECT * FROM ["+strWorksheetName+"$]"; try { pRsExcel->Open(_variant_t(strSQL), pConExcel.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText); } catch (_com_error) { strSQL = "SELECT * FROM ["+strWorksheetName+"]"; pRsExcel->Open(_variant_t(strSQL), pConExcel.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText); } if (pRsExcel->adoEOF && pRsExcel->BOF) { AfxMessageBox("文件中没有记录!"); return FALSE; } //打开Access表 strSQL = "SELECT * FROM ["+strTblName+"] WHERE "+ProFieldName+"='"+strCurProID+"' ORDER BY "+KeyFieldName+" "; pRsAccess->Open(_variant_t(strSQL), pConDes.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText); if (pRsAccess->adoEOF && pRsAccess->BOF) { ID=0; } else { pRsAccess->MoveLast(); ID = vtoi(pRsAccess->GetCollect(_variant_t(KeyFieldName))); } ID++; listID[0].ID = ID; //当前工程最大的序号 listID[0].EnginID = strCurProID; for(;Rj < nFieldCount;Rj++) { if( !ProFieldName.CompareNoCase(pFieldStruct[Rj].strField) ) { break; } } _RecordsetPtr pRsTmp; pRsTmp.CreateInstance(__uuidof(Recordset)); CString strGroup; //作为关键字的所有字段组合 //strGroup = "[管道外径/规格], [管道壁厚], [管内压力], [介质温度], [管道材质]"; /* strGroup = "[卷册号],[色环],[管道/设备名称],[管道外径/规格],[管道壁厚],[介质温度],[安装地点],[管道材质],[备注],\ [内保温层材料名称],[外保温层材料名称],[保护层材料名称],[风速],[热价比主汽价],[年运行小时数],\ [油管道保温厚],[管内压力],[管内介质],[工程代号]"; strSQL = "SELECT "+strGroup+" FROM ["+strTblName+"] WHERE "+ProFieldName+"="+strCurProID+" "; pRsTmp->Open(_variant_t(strSQL), pConDes.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText); if (pRsTmp->adoEOF && pRsTmp->BOF) { variant_t var = pRsTmp->GetCollect(_variant_t("enginid")); } */ //复制数据到ACCESS数据库中。 while (!pRsExcel->adoEOF) { pRsAccess->AddNew(); for (int i=0; i < nFieldCount; i++) { try { if (pFieldStruct[i].strCaption.IsEmpty()) { continue; } varTmp = pRsExcel->GetCollect(_variant_t(pFieldStruct[i].strCaption)); }catch (_com_error& e) { if (e.Error() == -2146825023) { strTemp = "原始数据表中没有字段 '"+pFieldStruct[i].strCaption+"' 。"; AfxMessageBox(strTemp); pFieldStruct[i].strCaption.Empty(); continue; } AfxMessageBox(e.Description()); return FALSE; } if (Rj < nFieldCount && i == Rj) //工程名称的字段 { strTemp = vtos(varTmp); for(int c=0; c<ProjNum; c++) { if( !strTemp.CompareNoCase(listID[c].EnginID) || (c==0 && strTemp.IsEmpty())) { ProjIndex = c; break; } } if( c == ProjNum ) //不同的工程找出最大的序号. { listID[c].EnginID = strTemp; strSQL = "SELECT * FROM ["+strTblName+"] \ WHERE "+ProFieldName+"='"+listID[c].EnginID+"' ORDER BY "+KeyFieldName+" "; if(pRsTmp->State == adStateOpen) pRsTmp->Close(); pRsTmp->Open(_variant_t(strSQL), pConDes.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText); if( pRsTmp->adoEOF && pRsTmp->BOF ) { ID = 0; } else { pRsTmp->MoveLast(); varTmp = pRsTmp->GetCollect(_variant_t(KeyFieldName)); ID = vtoi(varTmp); } //最大的序号,将记录加到末尾. listID[c].ID = ++ID; ProjIndex = c; ProjNum++; } } pRsAccess->PutCollect(_variant_t(pFieldStruct[i].strField),varTmp); } //设置关键值和工程ID pRsAccess->PutCollect(_variant_t(KeyFieldName), _variant_t((long)listID[ProjIndex].ID++)); pRsAccess->PutCollect(_variant_t(ProFieldName),_variant_t(listID[ProjIndex].EnginID)); pRsAccess->PutCollect(_variant_t("c_bImport"),_variant_t((short)1)); //导入标志 pRsAccess->PutCollect(_variant_t("c_CalInThi"),_variant_t((short)1)); //是否自动计算内保温的厚度 1:不计算 pRsAccess->PutCollect(_variant_t("c_CalPreThi"),_variant_t((short)1)); //是否自动计算外保温的厚度 pRsAccess->Update(); pRsExcel->MoveNext(); }
void CDlgHistory::OnBnClickedButtonExport() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); GetDlgItem(IDC_BUTTON_EXPORT)->EnableWindow(FALSE); COleVariant covTrue((short)TRUE),covFalse((short)FALSE),covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); book.PrintPreview(_variant_t(false)); CFileDialog FileDialog(FALSE,"xlsx",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, _T("Microsoft Excel 2007(*.xlsx)|*.xlsx|所有文件(*.*)"),this); if(FileDialog.DoModal()!=IDOK) { GetDlgItem(IDC_BUTTON_EXPORT)->EnableWindow(TRUE); return; } CString cStrFile=FileDialog.GetPathName(); //选择保存路径名称 if(::PathFileExists(cStrFile)) DeleteFile(cStrFile); CString AntID,SensorID,StrStartTime,StrStopTime,tmpData,passWord,StartTime,StopTime,message,strRecordTime,rowCount,strRow,strLimit; StrStartTime.Format("%f",m_DataBegin); StrStopTime.Format("%f",m_DataEnding); CTime m_Startdate; m_CtlDateTimeStartTime.GetTime(m_Startdate); StartTime.Format("%d%02d%02d",m_Startdate.GetYear(), m_Startdate.GetMonth(),m_Startdate.GetDay()); _RecordsetPtr m_pRecordsetch; m_pRecordsetch.CreateInstance(__uuidof(Recordset)); books = app.get_Workbooks(); book = books.Add(covOptional); sheets = book.get_Worksheets(); sheets.Add(vtMissing,vtMissing,vtMissing,vtMissing); int nCount; char cCell; for(int i=1;i<5;i++) { tmpData.Format("%d",i); AntID = "天线"+tmpData; sheet = sheets.get_Item(COleVariant((short)i)); //得到第一个工作表 sheet.put_Name(AntID); for(int j=1;j<13;j++) { nCount = 3; tmpData.Format("%d",j); SensorID = "传感器"+tmpData; cCell = 'A' + 2*(j-1); rowCount.Format(_T("%c"),cCell); rowCount+="1"; range = sheet.get_Range(COleVariant(rowCount),COleVariant(rowCount)); range.put_Value2(COleVariant(SensorID)); rowCount.Format(_T("%c"),cCell); rowCount+="2"; range = sheet.get_Range(COleVariant(rowCount),COleVariant(rowCount)); range.put_Value2(COleVariant("时间")); rowCount.Format(_T("%c"),cCell+1); rowCount+="2"; range = sheet.get_Range(COleVariant(rowCount),COleVariant(rowCount)); range.put_Value2(COleVariant("温度")); _bstr_t bstrSQLdata ="SELECT Temperature,RecordTime FROM DB_Data where ReaderID='"+strReader+"' and AntID='"+AntID+"' and SensorID='"+SensorID+"' and RecordTime<"+StrStopTime+" and RecordTime>"+StrStartTime+" and (Notes='正常' or Notes='超限') order by DataID;"; m_pRecordsetch->Open(bstrSQLdata,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); while(!m_pRecordsetch->adoEOF) { CString temper=(LPCSTR)(_bstr_t)m_pRecordsetch->GetCollect("Temperature"); CString time=(LPCSTR)(_bstr_t)m_pRecordsetch->GetCollect("RecordTime"); COleDateTime t=atof(time); strRecordTime=t.Format("%Y-%m-%d %H:%M:%S"); rowCount.Format(_T("%c"),cCell); strRow.Format(_T("%d"),nCount); rowCount+=strRow; range = sheet.get_Range(COleVariant(rowCount),COleVariant(rowCount)); range.put_NumberFormat(COleVariant("hh:mm:ss")); range.put_Value2(COleVariant(strRecordTime)); //设置时间 rowCount.Format(_T("%c"),cCell+1); rowCount+=strRow; range = sheet.get_Range(COleVariant(rowCount),COleVariant(rowCount)); range.put_Value2(COleVariant(temper)); //设置温度 time.ReleaseBuffer(); temper.ReleaseBuffer(); m_pRecordsetch->MoveNext(); nCount++; } m_pRecordsetch->Close(); } range = sheet.get_Range(COleVariant("A3"),COleVariant("A3")); COleVariant vResult =range.get_Value2(); if(vResult.vt==VT_EMPTY) { passWord="******"; } else { SYSTEMTIME st; VariantTimeToSystemTime(vResult.date, &st); passWord.Format("%d%02d%02d",st.wYear,st.wMonth,st.wDay); passWord+="hshiot"; } sheet.Protect(_variant_t(passWord),vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing); } book.SaveCopyAs(COleVariant(cStrFile)); //保存到cStrFile文件 book.put_Saved(true); books.Close(); book.ReleaseDispatch(); books.ReleaseDispatch(); app.ReleaseDispatch(); app.Quit(); message = "已导出数据,文件位置 :"+cStrFile; AfxMessageBox(message); GetDlgItem(IDC_BUTTON_EXPORT)->EnableWindow(TRUE); }
int CCommDBOper::ADOOpenDBCon(_ConnectionPtr &pCon,const CString strDB,CString &strPassword,int iWarn) { //函数功能 打开指定数据库 //输入参数说明 pCon 要打开的数据库对象,strDB 要连接的ACCESS数据库文件全路径 // strPassword 密码 iWarn 出错警告方式 0,不警告,1,警告,2,警告且退出程序 //作者 LFX CString strCon; _TCHAR dbConnectionString[]=_T("Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=%s;Jet OLEDB:Database Password=%s"); strCon.Format(dbConnectionString,strDB,strPassword); if(!PathFileExists(_T(strDB))) { WarnMessage("要打开的数据库文件名不存在!!!",iWarn); return RET_FAILED; } if (pCon == NULL) { pCon.CreateInstance(__uuidof(Connection) ); } else { ADOCloseConnectDB(pCon,0); } int iLoop = 0; while (true) { //连接ACCESS数据库 iLoop++; //如果没密码,且为第一次循环 if ( strPassword.IsEmpty() && (iLoop <= 1)) { try { pCon->Open(_bstr_t(strCon),"","",-1); } catch(_com_error &e) { CString strTemp; CInputBox inputBox; inputBox.m_bIsProtected = TRUE; strTemp.LoadString(IDS_NEEDPASSWORD); inputBox.m_strWndText.Format("%s%s",strDB,strTemp); inputBox.m_strTitle.LoadString(IDS_PLEASEINPUTDBPASSWORD); if (inputBox.DoModal() != IDOK) { WarnMessage("密码错误,打开数据库失败!!!",iWarn); return RET_FAILED; } else { strPassword = inputBox.m_strValue; } } break; } //如果有密码 try { pCon->Open(_bstr_t(strCon),"","",-1); } catch (_com_error &e) { CString strMsg; strMsg.Format("%s:%d %s", __FILE__, __LINE__, (LPSTR)e.Description()); AfxMessageBox(strMsg); CString errormessage; errormessage.Format("打开数据库 %s 失败!\r\n错误信息:%s",strDB,e.ErrorMessage()); WarnMessage(errormessage,iWarn); return RET_FAILED; } break; } //END while(true) return RET_OK; }
DWORD CNHSQLServerDBO::OpenDB(_ConnectionPtr &pConnection) { DWORD dwReturn(0x00); // 读配置文件,获取数据库连接信息 // 获取exe(dll)文件绝对路径 wchar_t wchPath[MAX_PATH]; ZeroMemory(wchPath, sizeof(wchPath)); if (0x00 != CNHCommonAPI::GetHLDFilePath(L"Config", L"DataBase.ini", wchPath)) { return 0x01; } // 获取数据库连接信息 wchar_t wchSource[MAX_PATH]; ZeroMemory(wchSource, sizeof(wchSource)); wchar_t wchCatalog[MAX_PATH]; ZeroMemory(wchCatalog, sizeof(wchCatalog)); wchar_t wchUserID[MAX_PATH]; ZeroMemory(wchUserID, sizeof(wchUserID)); wchar_t wchPassword[MAX_PATH]; ZeroMemory(wchPassword, sizeof(wchPassword)); GetPrivateProfileString(L"Database", L"DataSource", L"", wchSource, MAX_PATH, wchPath); GetPrivateProfileString(L"Database", L"InitialCatalog", L"", wchCatalog, MAX_PATH, wchPath); GetPrivateProfileString(L"Database", L"UserID", L"", wchUserID, MAX_PATH, wchPath); GetPrivateProfileString(L"Database", L"Password", L"", wchPassword, MAX_PATH, wchPath); wchar_t wchSql[MAX_PATH]; ZeroMemory(wchSql, sizeof(wchSql)); // 加载COM组件 CoInitialize(NULL); try { _snwprintf_s(wchSql, _countof(wchSql), _TRUNCATE, L"Provider=SQLOLEDB; Data Source=%s; Initial Catalog=%s; User ID=%s; Password=%s;", wchSource, wchCatalog, wchUserID, wchPassword); pConnection.CreateInstance(L"ADODB.Connection"); //pConnection->ConnectionTimeout = 5; //pConnection->CommandTimeout = 5; pConnection->Open((_bstr_t)wchSql, L"", L"", adModeUnknown); } catch (_com_error &e) { //#ifdef _DEBUG const int nErrMsgLength(MAX_PATH); wchar_t *pwchErrMsg = new wchar_t[nErrMsgLength](); _snwprintf_s(pwchErrMsg, nErrMsgLength, _TRUNCATE, L"CNHSQLServerDBO::OpenDB发生错误(执行%s)。", wchSql); // 输出错误信息到输出窗口 OutputDebugStringW(L"\t"); OutputDebugStringW(pwchErrMsg); OutputDebugStringW(L"\n"); // 输出错误信息到日志文件 if (0 != wcscmp(m_wchLogFilePath, L"")) { // 当日志文件路径不为空时,写日志 CNHLogAPI::WriteLogEx(m_wchLogFilePath, LOG_ERR, L"NHSQLServerDBO", pwchErrMsg); } if (NULL != pwchErrMsg) { delete[] pwchErrMsg; pwchErrMsg = NULL; } OutputDBErrMsg(e); //#endif dwReturn = 0x01; } return dwReturn; }
void CBacilusDetectDoc::SaveSlideData() { CString sql; m_pRs->raw_Close(); sql.Format(_T("select *from BacilusDetect.dbo.PatientPerInfo where SlideID = '%s'"),m_SlideBoxData.SlideInfo.strSlideID); m_pRs->Open((_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText); if(m_pRs->adoEOF)//如果之前没有SlideID信息则 { try { m_pRs->raw_Close(); //病人个人信息表 m_pRs->Open("SELECT * FROM BacilusDetect.dbo.PatientPerInfo",_variant_t((IDispatch*)m_pCon),adOpenStatic,adLockOptimistic,adCmdText); m_pRs->AddNew();//添加一条新记录 m_pRs->Fields->GetItem(_variant_t("Name"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strName; m_pRs->Fields->GetItem(_variant_t("PatientID"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strPatientID; m_pRs->Fields->GetItem(_variant_t("Department"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strDepartment; m_pRs->Fields->GetItem(_variant_t("BedID"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strBedID; m_pRs->Fields->GetItem(_variant_t("Gender"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.nGender; m_pRs->Fields->GetItem(_variant_t("Year"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.nYear; m_pRs->Fields->GetItem(_variant_t("Occupation"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strOccupation; m_pRs->Fields->GetItem(_variant_t("Telephone"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strTelephone; m_pRs->Fields->GetItem(_variant_t("Address"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strAddress; m_pRs->Fields->GetItem(_variant_t("SlideID"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strSlideID; m_pRs->Update(); AfxMessageBox(_T("病人个人信息表保存成功!")); } catch(...) { AfxMessageBox(_T("病人个人信息表保存失败!")); } try { m_pRs->raw_Close(); //病人玻片信息表 m_pRs->Open("SELECT * FROM BacilusDetect.dbo.PatientSlideInfo",_variant_t((IDispatch*)m_pCon),adOpenStatic,adLockOptimistic,adCmdText); m_pRs->AddNew();//添加一条新记录 m_pRs->Fields->GetItem(_variant_t("SlideID"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strSlideID; m_pRs->Fields->GetItem(_variant_t("Type"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strType; _variant_t var; var.vt=VT_DATE; var.date=int(m_SlideBoxData.SlideInfo.dtDetectData); m_pRs->Fields->GetItem(_variant_t("DetectData"))->Value=(_bstr_t)var; _variant_t vart; vart.vt=VT_DATE; vart.date=DATE(m_SlideBoxData.SlideInfo.dtDetectTime); m_pRs->Fields->GetItem(_variant_t("DetectTime"))->Value=(_bstr_t)vart; m_pRs->Fields->GetItem(_variant_t("Quantity"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strQuantity; m_pRs->Fields->GetItem(_variant_t("StayTime"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strStayTime; m_pRs->Fields->GetItem(_variant_t("Method"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strMethod; m_pRs->Fields->GetItem(_variant_t("SendDoctor"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strSendDoctor; m_pRs->Fields->GetItem(_variant_t("Judge"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strJudge; m_pRs->Fields->GetItem(_variant_t("DetectResult"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strDetectResult; m_pRs->Fields->GetItem(_variant_t("BacilusDensity"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strBacilusDensity; m_pRs->Fields->GetItem(_variant_t("FOVCount"))->Value=(_bstr_t)m_SlideBoxData.nFOVCount; m_pRs->Fields->GetItem(_variant_t("bScan"))->Value=(_bstr_t)m_SlideBoxData.bScan; m_pRs->Fields->GetItem(_variant_t("bJudge"))->Value=(_bstr_t)m_SlideBoxData.bJudge; m_pRs->Fields->GetItem(_variant_t("TargetCount"))->Value=(_bstr_t)GetTargetCountInSlide(); m_pRs->Fields->GetItem(_variant_t("JudgedTargetCount"))->Value=(_bstr_t)GetJudgedTargetCountInSlide(); m_pRs->Update(); AfxMessageBox(_T("病人玻片信息表保存成功!")); } catch(...) { AfxMessageBox(_T("病人玻片信息表保存失败!")); } try { m_pRs->raw_Close(); //病人报告信息表 m_pRs->Open("SELECT * FROM BacilusDetect.dbo.PatientRepInfo",_variant_t((IDispatch*)m_pCon),adOpenStatic,adLockOptimistic,adCmdText); m_pRs->AddNew();//添加一条新记录 m_pRs->Fields->GetItem(_variant_t("ReportDoctor"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strReportDoctor; _variant_t varr; varr.vt=VT_DATE; varr.date=int(m_SlideBoxData.SlideInfo.dtReportData); m_pRs->Fields->GetItem(_variant_t("ReportData"))->Value=(_bstr_t)varr; m_pRs->Fields->GetItem(_variant_t("CompareJudge"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strCompareJudge; m_pRs->Fields->GetItem(_variant_t("CompareDetectResult"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strCompareDetectResult; m_pRs->Fields->GetItem(_variant_t("CompareBacilusDensity"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strCompareBacilusDensity; m_pRs->Fields->GetItem(_variant_t("SlideID"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strSlideID; _variant_t var; var.vt=VT_DATE; var.date=int(m_SlideBoxData.SlideInfo.dtDetectData); m_pRs->Fields->GetItem(_variant_t("DetectData"))->Value=(_bstr_t)var; _variant_t vart; vart.vt=VT_DATE; vart.date=DATE(m_SlideBoxData.SlideInfo.dtDetectTime); m_pRs->Fields->GetItem(_variant_t("DetectTime"))->Value=(_bstr_t)vart; //添加系统时间 COleDateTime oletimeVar=COleDateTime::GetCurrentTime(); _variant_t vars; vars.vt=VT_DATE; vars.date=DATE(oletimeVar); // 给oletimeVar赋值; m_pRs->Fields->GetItem(_variant_t("ReportTime"))->Value=_bstr_t(vars); m_pRs->Update(); AfxMessageBox(_T("病人报告信息表保存成功!")); } catch(...) { AfxMessageBox(_T("病人报告信息表保存失败!")); } //图片信息表 // LARGE_INTEGER t0; // LARGE_INTEGER t1; // LARGE_INTEGER frequency; // QueryPerformanceFrequency(&frequency); // QueryPerformanceCounter(&t0); // for(int nFOVIndex=0;nFOVIndex<m_SlideBoxData[nWorkPositionIndex].nFOVCount;nFOVIndex++) // { //try //{ ///* CString str; // str.Format(_T("\\%d.JPG"), nFOVIndex);*/ // // CFile f; // CFileException e; // CString str; // str.Format(_T("\\%d.JPG"), nFOVIndex); // f.Open((GetDirectory(nWorkPositionIndex)+str), CFile::modeRead | CFile::typeBinary, &e); //打开指定的图像文件 // // int nSize = f.GetLength(); //先得到 图像 文件长度 // // BYTE* pBuffer = new BYTE [nSize]; //按文件的大小在堆上申请一块内存 pBuffer // // if (f.Read(pBuffer, nSize) > 0 ) // { // //BYTE* pBuf = pBuffer; //下面这一大段是把pBuffer里的图像数据放到库中 // //VARIANT varBLOB; // //SAFEARRAY *psa; // //SAFEARRAYBOUND rgsabound[1]; // //if(pBuf) // //{ // // rgsabound[0].lLbound = 0; // // rgsabound[0].cElements = nSize; // // // // psa = SafeArrayCreate(VT_UI1, 1, rgsabound); // 创建 SAFEARRAY 对象 psa // // for (long i = 0; i < (long)nSize; i++) // // SafeArrayPutElement (psa, &i, pBuf++); // 将 bBuf 指向的二进制数据 // // // 保存到 psa 中 // // varBLOB.vt = VT_ARRAY | VT_UI1; // 将 varBLOB 类型设为 BYTE 类型数组 // // varBLOB.parray = psa; // 保存 psa 到 varBLOB // //} // CString strbyte; // strbyte.Format(_T("%s"),pBuffer); // _variant_t var; // var.vt=VT_DATE; // var.date=int(m_SlideBoxData[nWorkPositionIndex].SlideInfo.dtDetectData); // _variant_t vart; // vart.vt=VT_DATE; // vart.date=DATE(m_SlideBoxData[nWorkPositionIndex].SlideInfo.dtDetectTime); // m_pRs->raw_Close(); // sql.Format(_T("insert into BacilusDetect.dbo.PictureInfo values('%s','%s','%s',%d,%d,%d,%d,%f,%f,%f,CAST('%s' as image))"), // m_SlideBoxData[nWorkPositionIndex].SlideInfo.strSlideID,(LPCTSTR)(_bstr_t)var,(LPCTSTR)(_bstr_t)vart,nFOVIndex,GetTargetCountInFOV(nWorkPositionIndex, nFOVIndex), // GetJudgedTargetCountInFOV(nWorkPositionIndex, nFOVIndex),GetFOVCheckedStatus(nWorkPositionIndex, nFOVIndex), // m_SlideBoxData[nWorkPositionIndex].TargetInFOV[nFOVIndex].FOVPosition.x,m_SlideBoxData[nWorkPositionIndex].TargetInFOV[nFOVIndex].FOVPosition.y, // m_SlideBoxData[nWorkPositionIndex].TargetInFOV[nFOVIndex].FOVPosition.z,strbyte); // /*m_pRs->raw_Close(); // sql.Format(_T("insert into BacilusDetect.dbo.Text values(newid (),1,CAST('%s' as varbinary(max)))"),(GetDirectory(nWorkPositionIndex)+str));*/ // m_pRs->Open((_bstr_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText); // } //} //catch(...) //{ // AfxMessageBox(_T("图片信息表保存失败!")); //} // } // QueryPerformanceCounter(&t1); //double timespan = (double) (t1.QuadPart - t0.QuadPart) / frequency.QuadPart; //CString string; //string.Format(_T("%f"), timespan); //AfxMessageBox(string); LARGE_INTEGER t0; LARGE_INTEGER t1; LARGE_INTEGER frequency; QueryPerformanceFrequency(&frequency); QueryPerformanceCounter(&t0); m_pRs->raw_Close(); m_pRs->Open ("ChartInfo", _variant_t((IDispatch *) m_pCon, true), adOpenStatic, adLockOptimistic, adCmdTable); /* for(int nFOVIndex=0;nFOVIndex<m_SlideBoxData[nWorkPositionIndex].nFOVCount;nFOVIndex++) { */ //try // { // // CString str; // str.Format(_T("\\%d.JPG"), nFOVIndex);//GetDirectory(nWorkPositionIndex)+str // // // // //图片信息表 // // m_pRs->AddNew();//添加一条新记录 // // m_pRs->Fields->GetItem(_variant_t("SlideID"))->Value=(_bstr_t)m_SlideBoxData[nWorkPositionIndex].SlideInfo.strSlideID; // // _variant_t var; // var.vt=VT_DATE; // var.date=int(m_SlideBoxData[nWorkPositionIndex].SlideInfo.dtDetectData); // m_pRs->Fields->GetItem(_variant_t("DetectData"))->Value=(_bstr_t)var; // // _variant_t vart; // vart.vt=VT_DATE; // vart.date=DATE(m_SlideBoxData[nWorkPositionIndex].SlideInfo.dtDetectTime); // m_pRs->Fields->GetItem(_variant_t("DetectTime"))->Value=(_bstr_t)vart; // m_pRs->Fields->GetItem(_variant_t("PictureID"))->Value=(_bstr_t)nFOVIndex; // m_pRs->Fields->GetItem(_variant_t("TargetCount"))->Value=(_bstr_t)GetTargetCountInFOV(nWorkPositionIndex, nFOVIndex); // m_pRs->Fields->GetItem(_variant_t("JudgedTargetCount"))->Value=(_bstr_t)GetJudgedTargetCountInFOV(nWorkPositionIndex, nFOVIndex); // m_pRs->Fields->GetItem(_variant_t("bChecked"))->Value=(_bstr_t)GetFOVCheckedStatus(nWorkPositionIndex, nFOVIndex); // // m_pRs->Fields->GetItem(_variant_t("FOVPositionX"))->Value=(_bstr_t)m_SlideBoxData[nWorkPositionIndex].TargetInFOV[nFOVIndex].FOVPosition.x; // m_pRs->Fields->GetItem(_variant_t("FOVPositionY"))->Value=(_bstr_t)m_SlideBoxData[nWorkPositionIndex].TargetInFOV[nFOVIndex].FOVPosition.y; // m_pRs->Fields->GetItem(_variant_t("FOVPositionZ"))->Value=(_bstr_t)m_SlideBoxData[nWorkPositionIndex].TargetInFOV[nFOVIndex].FOVPosition.z; // // m_pRs->Update(); // if(nFOVIndex==m_SlideBoxData[nWorkPositionIndex].nFOVCount-1) // { // AfxMessageBox(_T("图片信息表保存成功!")); // } // // // } // catch(...) // { // AfxMessageBox(_T("图片信息表保存失败!")); // } SQLCHAR transactionToken[32]; SQLHANDLE henv = SQL_NULL_HANDLE; SQLHANDLE hdbc = SQL_NULL_HANDLE; SQLHANDLE hstmt = SQL_NULL_HANDLE; LARGE_INTEGER t3,t4, Frequency; double totaltime = 0; QueryPerformanceFrequency(&Frequency); QueryPerformanceCounter(&t3); try { //These statements Initialize ODBC for the client application and //connect to the database. if ( SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv) != SQL_SUCCESS ) throw new ODBCErrors(__LINE__, SQL_HANDLE_ENV, henv); if ( SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, NULL) != SQL_SUCCESS ) throw new ODBCErrors(__LINE__, SQL_HANDLE_ENV, henv); if ( SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc) != SQL_SUCCESS ) throw new ODBCErrors(__LINE__, SQL_HANDLE_ENV, henv); //This code assumes that the dataset name "Sql Server FILESTREAM" //has been previously created on the client computer system. An //ODBC DSN is created with the ODBC Data Source item in //the Windows Control Panel. if ( SQLConnect(hdbc, TEXT("BacilusDetect"),//这里是数据源 SQL_NTS, NULL, 0, NULL, 0) <= 0 ) throw new ODBCErrors(__LINE__, SQL_HANDLE_DBC, hdbc); //FILESTREAM requires that all read and write operations occur //within a transaction. if ( SQLSetConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, SQL_IS_UINTEGER) != SQL_SUCCESS ) throw new ODBCErrors(__LINE__, SQL_HANDLE_DBC, hdbc); if ( SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt) != SQL_SUCCESS ) throw new ODBCErrors(__LINE__, SQL_HANDLE_DBC, hdbc); SQLUSMALLINT mode = SQL_COMMIT; SQLINTEGER cbTransactionToken; TCHAR dstFilePath[1024]; SQLINTEGER cbDstFilePath; wchar_t sqlDBQuery[1024]; for ( int nFOVIndex=0;nFOVIndex<m_SlideBoxData.nFOVCount;nFOVIndex++) { _variant_t var; var.vt=VT_DATE; var.date=int(m_SlideBoxData.SlideInfo.dtDetectData); _variant_t vart; vart.vt=VT_DATE; vart.date=DATE(m_SlideBoxData.SlideInfo.dtDetectTime); CString str; str.Format(_T("\\%d.JPG"), nFOVIndex);//GetDirectory(nWorkPositionIndex)+str //swprintf_s(sqlDBQuery, 1024, L"INSERT INTO BacilusDetect.dbo.ChartInfo(SlideID,DetectData,DetectTime,PictureID,TargetCount,JudgedTargetCount,bChecked,FOVPositionX,FOVPositionY,FOVPositionZ,Id,Chart)\ // OUTPUT GET_FILESTREAM_TRANSACTION_CONTEXT(), inserted.Chart.PathName()\ // VALUES (%s,CONVERT(date, '%s'),CONVERT(datetime, '%s'),%d,%d,%d,%d,%f,%f,%f,newid(), CONVERT(VARBINARY, '**Temp**'))",m_SlideBoxData[nWorkPositionIndex].SlideInfo.strSlideID, // m_SlideBoxData[nWorkPositionIndex].SlideInfo.dtDetectData,m_SlideBoxData[nWorkPositionIndex].SlideInfo.dtDetectTime,nFOVIndex,GetTargetCountInFOV(nWorkPositionIndex, nFOVIndex), // GetJudgedTargetCountInFOV(nWorkPositionIndex, nFOVIndex),GetFOVCheckedStatus(nWorkPositionIndex, nFOVIndex),m_SlideBoxData[nWorkPositionIndex].TargetInFOV[nFOVIndex].FOVPosition.x, // m_SlideBoxData[nWorkPositionIndex].TargetInFOV[nFOVIndex].FOVPosition.y,m_SlideBoxData[nWorkPositionIndex].TargetInFOV[nFOVIndex].FOVPosition.z); swprintf_s(sqlDBQuery, 1024, L"INSERT INTO Archive.dbo.Records2(Id,SerialNumber,Chart,date1)\ OUTPUT GET_FILESTREAM_TRANSACTION_CONTEXT(), inserted.Chart.PathName()\ VALUES (newid(),23,CONVERT(VARBINARY, '**Temp**'),CONVERT(date, '2012-12-14'))"); if ( SQLExecDirect(hstmt, sqlDBQuery, SQL_NTS) != SQL_SUCCESS ) throw new ODBCErrors(__LINE__, SQL_HANDLE_STMT, hstmt); //Retrieve the transaction token. if ( SQLFetch(hstmt) != SQL_SUCCESS ) throw new ODBCErrors(__LINE__, SQL_HANDLE_STMT, hstmt); if ( SQLGetData(hstmt, 1, SQL_C_BINARY, transactionToken, sizeof(transactionToken), &cbTransactionToken) != SQL_SUCCESS ) throw new ODBCErrors(__LINE__, SQL_HANDLE_STMT, hstmt); //Retrieve the file path for the inserted record. if ( SQLGetData(hstmt, 2, SQL_C_TCHAR, dstFilePath, sizeof(dstFilePath), &cbDstFilePath) != SQL_SUCCESS ) throw new ODBCErrors(__LINE__, SQL_HANDLE_STMT, hstmt); if ( SQLCloseCursor(hstmt) != SQL_SUCCESS ) throw new ODBCErrors(__LINE__, SQL_HANDLE_STMT, hstmt); QueryPerformanceCounter(&t0); //if ( ! CopyFileToSQL( (LPTSTR)(LPCTSTR)(GetDirectory(nWorkPositionIndex)+str), dstFilePath, transactionToken, cbTransactionToken) ) //{ // mode = SQL_ROLLBACK; // break; //} QueryPerformanceCounter(&t1); double timespan = (double) (t1.QuadPart - t0.QuadPart) / Frequency.QuadPart; totaltime += timespan; } SQLEndTran(SQL_HANDLE_DBC, hdbc, mode); } catch(ODBCErrors *pErrors) { pErrors->Print(); delete pErrors; } if ( hstmt != SQL_NULL_HANDLE ) SQLFreeHandle(SQL_HANDLE_STMT, hstmt); if ( hdbc != SQL_NULL_HANDLE ) SQLDisconnect(hdbc); if ( hdbc != SQL_NULL_HANDLE ) SQLFreeHandle(SQL_HANDLE_DBC, hdbc); if ( henv != SQL_NULL_HANDLE ) SQLFreeHandle(SQL_HANDLE_ENV, henv); QueryPerformanceCounter(&t4); //wprintf_s(TEXT("Time: %f\n"), (double) (t4.QuadPart - t3.QuadPart) / Frequency.QuadPart); //wprintf_s(TEXT("Time: %f\n"), totaltime); if (m_pRs) if (m_pRs->State == adStateOpen) m_pRs->Close(); if (m_pCon) if (m_pCon->State == adStateOpen) m_pCon->Close(); ::CoUninitialize(); // TODO: 在此添加控件通知处理程序代码 AfxMessageBox(_T("图像保存结束")); //细菌信息表 for(int nFOVIndex=0;nFOVIndex<m_SlideBoxData.nFOVCount;nFOVIndex++) { for(int TargetCountIndex=0; TargetCountIndex<GetTargetCountInFOV( nFOVIndex);TargetCountIndex++) { try { m_pRs->raw_Close(); //细菌信息表 m_pRs->Open("SELECT * FROM BacilusDetect.dbo.BacilusInfo",_variant_t((IDispatch*)m_pCon),adOpenStatic,adLockOptimistic,adCmdText); m_pRs->AddNew();//添加一条新记录 m_pRs->Fields->GetItem(_variant_t("SlideID"))->Value=(_bstr_t)m_SlideBoxData.SlideInfo.strSlideID; _variant_t var; var.vt=VT_DATE; var.date=int(m_SlideBoxData.SlideInfo.dtDetectData); m_pRs->Fields->GetItem(_variant_t("DetectData"))->Value=(_bstr_t)var; _variant_t vart; vart.vt=VT_DATE; vart.date=DATE(m_SlideBoxData.SlideInfo.dtDetectTime); m_pRs->Fields->GetItem(_variant_t("DetectTime"))->Value=(_bstr_t)vart; m_pRs->Fields->GetItem(_variant_t("PictureID"))->Value=(_bstr_t)nFOVIndex; m_pRs->Fields->GetItem(_variant_t("BacilusID"))->Value=(_bstr_t)TargetCountIndex; //m_pRs->Fields->GetItem(_variant_t("RPositionX"))->Value=(_bstr_t)m_SlideBoxData[nWorkPositionIndex].TargetInFOV[nFOVIndex].rectTarget[TargetCountIndex].x; //m_pRs->Fields->GetItem(_variant_t("RPositionY"))->Value=(_bstr_t)m_SlideBoxData[nWorkPositionIndex].TargetInFOV[nFOVIndex].rectTarget[TargetCountIndex].y; //m_pRs->Fields->GetItem(_variant_t("RPositionWidth"))->Value=(_bstr_t)m_SlideBoxData[nWorkPositionIndex].TargetInFOV[nFOVIndex].rectTarget[TargetCountIndex].width; //m_pRs->Fields->GetItem(_variant_t("RPositionHeight"))->Value=(_bstr_t)m_SlideBoxData[nWorkPositionIndex].TargetInFOV[nFOVIndex].rectTarget[TargetCountIndex].height; m_pRs->Update(); } catch(...) { AfxMessageBox(_T("信息保存失败!")); } } } AfxMessageBox(_T("信息保存成功!")); } else {
bool SqlServer::connect(connection_info const& info) { # ifdef _FREETDS RETCODE sta; LOGINREC* login = dblogin(); sta = DBSETLUSER(login, info.user.c_str()); if (sta == FAIL) return false; sta = DBSETLPWD(login, info.passwd.c_str()); if (sta == FAIL) return false; DBPROCESS* proc = dbopen(login, info.url.c_str()); if (proc == NULL) return false; sta = dbuse(proc, info.database.c_str()); if (sta == FAIL) return false; d_ptr->proc = proc; # endif # ifdef _MSSQL _ConnectionPtr conn; HRESULT sta = conn.CreateInstance(__uuidof(Connection)); if (FAILED(sta)) { MessageBox(NULL, _W("failed to instance a new connection."), NULL, MB_OK); return false; } core::stringstream ss; ss << "Driver={SQL Server};" << "Server=" << info.url << ";" << "Database=" << info.database << ";" << "UID=" << info.user << ";" << "PWD=" << info.passwd << ";"; core::string str_conn = ss.str(); try { sta = conn->Open(str_conn.c_str(), "", "", adModeUnknown); } catch (_com_error& NNTDEBUG_EXPRESS(er)) { trace_msg((char const*)er.ErrorMessage()); return false; } catch (...) { trace_msg("failed to open database."); return false; } this->close(); d_ptr->conn = conn; # endif return true; }
/* µ±nStyle=1ʱ Éú³ÉÊý×Ö±àºÅ µ±nStyle=2ʱ Éú³ÉÁ÷Ë®ÕʺŠµ±nStyle=3ʱ Éú³ÉÈÕÆÚʱ¼ä±àºÅ */ CString RxADO::AutoNumber(CString sTable, CString sFieldName, CString sCode, int nStyle) { _RecordsetPtr AutoNumberrst; CString sTempNewNumber,sNewNumber,sSQL,sMaxNumber,sOldNumber; AutoNumberrst.CreateInstance(__uuidof(Recordset)); sSQL.Format("SELECT MAX(%s) as ×î´ó±àºÅ FROM %s",sFieldName,sTable); try{ AutoNumberrst=cnn->Execute((_bstr_t)sSQL,NULL,adCmdText); } catch(_com_error & e) { GetADOErrors(e); } if(nStyle==1) //Êý×Ö±àºÅ { if(GetRecordCount(AutoNumberrst)<1) sNewNumber.Format("1"); else { AutoNumberrst->MoveFirst(); _variant_t vtext; vtext=AutoNumberrst->GetCollect("×î´ó±àºÅ"); if(vtext.vt==VT_EMPTY||vtext.vt==VT_NULL) { sNewNumber.Format("1"); goto end; } sMaxNumber=(char*)(_bstr_t)AutoNumberrst->GetCollect("×î´ó±àºÅ"); sNewNumber.Format("%d",atoi(sMaxNumber)+1); } } if(nStyle==2)//Á÷Ë®ÕʺŠ{ if(GetRecordCount(AutoNumberrst)<1) sNewNumber.Format("%s00000001",sCode); else { AutoNumberrst->MoveFirst(); _variant_t _bOldNumber=AutoNumberrst->GetCollect("×î´ó±àºÅ"); if(_bOldNumber.vt==VT_NULL || _bOldNumber.vt==VT_EMPTY) { sNewNumber.Format("%s00000001",sCode); goto end; } sOldNumber=(char*)(_bstr_t) _bOldNumber; sMaxNumber=sOldNumber.Mid(3); sTempNewNumber.Format("%d",atoi(sMaxNumber)+1); sNewNumber.Format("%s%s",sCode,Padl(sTempNewNumber,8,"0",1)); } } if(nStyle==3)//ÈÕÆÚʱ¼ä±àºÅ { int nYear,nDay,nMonth; CString sYear,sDay,sMonth; CTime tTime; tTime=tTime.GetCurrentTime(); nYear=tTime.GetYear(); nDay=tTime.GetDay(); nMonth=tTime.GetMonth(); sYear.Format("%d",nYear); sDay.Format("%d",nDay); sMonth.Format("%d",nMonth); sYear=sYear.Mid(2); sDay=Padl(sDay,2,"0",1); sMonth=Padl(sMonth,2,"0",1); if(GetRecordCount(AutoNumberrst)<1) sNewNumber.Format("%s%s%s%s-000001 ",sCode,sYear,sMonth,sDay); else { _variant_t bh=AutoNumberrst->GetCollect("×î´ó±àºÅ"); if(bh.vt==VT_EMPTY||bh.vt==VT_NULL) { sNewNumber.Format("%s%s%s%s-000001 ",sCode,sYear,sMonth,sDay); goto end; } CString sOldDate,sNewDate; AutoNumberrst->MoveFirst(); sOldNumber=(char*)(_bstr_t)AutoNumberrst->GetCollect("×î´ó±àºÅ"); sOldDate=sOldNumber.Mid(2,6); sNewDate.Format("%s%s%s",sYear,sMonth,sDay); if(sOldDate==sNewDate) { sMaxNumber=sOldNumber.Mid(9); sTempNewNumber.Format("%d",atoi(sMaxNumber)+1); sNewNumber.Format("%s%s%s%s-%s",sCode,sYear,sMonth,sDay,Padl(sTempNewNumber,6,"0",1)); } else sNewNumber.Format("%s%s%s%s-000001 ",sCode,sYear,sMonth,sDay); } } end: return sNewNumber; }
BOOL CMorphaResDlg::OnInitDialog() { CPropertyPage::OnInitDialog(); CMainFrame* pMainFrm=(CMainFrame*)AfxGetMainWnd(); CMorphaDataRetriveDlg& dlg = *(pMainFrm->m_pWndMorphadlg); CString strSQLCRMfi("select morpharesult.* into morphafordisplay \ from morpharesult,basicinfo,morphaimage,spermchait,morpharesultratio \ where morpharesult.pdetectno = basicinfo.pdetectno \ and morpharesult.pdetectno = morphaimage.pdetectno \ and morpharesult.pdetectno = spermchait.pdetectno \ and morpharesult.pdetectno = morpharesultratio.pdetectno"); try { if(IsTableExist(theConnection, "morphafordisplay") == true) { theConnection->Execute((LPCTSTR)"drop table morphafordisplay",NULL,adCmdText); } theConnection->Execute((LPCTSTR)strSQLCRMfi,NULL,adCmdText); CString strGetN("select count(*) from morphafordisplay"); _RecordsetPtr rs=theConnection->Execute((LPCSTR)strGetN,NULL,adCmdText); dlg.m_dp[0].nCurPage = 1; dlg.m_dp[0].nTotalRecord=rs->GetCollect((long)0).iVal; dlg.m_dp[0].nPageRecord = NUMPERPAGE; dlg.m_dp[0].nTotalPage = dlg.m_dp[0].nTotalRecord / dlg.m_dp[0].nPageRecord + (dlg.m_dp[0].nTotalRecord % dlg.m_dp[0].nPageRecord!=0); CString queryinfo; queryinfo.Format("共查询到%d条记录",dlg.m_dp[0].nTotalRecord); dlg.SetDlgItemText(IDC_STATIC_QUERY,queryinfo); if(dlg.m_dp[0].nTotalRecord == 0 ) { CMainFrame* pMainFrm=(CMainFrame*)AfxGetMainWnd(); pMainFrm->m_pWndMorphadlg->GetDlgItem(IDC_BTN_FIRSTPAGE)->EnableWindow(FALSE); pMainFrm->m_pWndMorphadlg->GetDlgItem(IDC_BTN_PREPAGE)->EnableWindow(FALSE); pMainFrm->m_pWndMorphadlg->GetDlgItem(IDC_BTN_NEXTPAGE)->EnableWindow(FALSE); pMainFrm->m_pWndMorphadlg->GetDlgItem(IDC_BTN_LASTPAGE)->EnableWindow(FALSE); pMainFrm->m_pWndMorphadlg->GetDlgItem(IDC_PAGENUM)->EnableWindow(FALSE); return FALSE; } int lowRow, upRow; dlg.GetPageBound(1,lowRow,upRow,dlg.m_dp[0]); GetRecordSet(rs,lowRow,upRow); int n=dlg.m_resdlg.m_wndMorphaDataList.SetData(rs); queryinfo.Format("第 %d / %d 页",dlg.m_dp[0].nCurPage,dlg.m_dp[0].nTotalPage); dlg.SetDlgItemText(IDC_PAGENUM,queryinfo); dlg.GetDlgItem(IDC_BTN_FIRSTPAGE)->EnableWindow(dlg.m_dp[dlg.IsInqueryState()].nCurPage != 1); dlg.GetDlgItem(IDC_BTN_PREPAGE)->EnableWindow(dlg.m_dp[dlg.IsInqueryState()].nCurPage != 1); dlg.GetDlgItem(IDC_BTN_NEXTPAGE)->EnableWindow(dlg.m_dp[dlg.IsInqueryState()].nCurPage != dlg.m_dp[dlg.IsInqueryState()].nTotalPage); dlg.GetDlgItem(IDC_BTN_LASTPAGE)->EnableWindow(dlg.m_dp[dlg.IsInqueryState()].nCurPage != dlg.m_dp[dlg.IsInqueryState()].nTotalPage ); } catch (_com_error& e) { MessageBox(e.Description()); return FALSE; } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
void CMorphaResDlg::OnClickListMorphadata(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; LV_COLUMN lc; lc.mask = LVCF_TEXT ; TCHAR pszText[40]; lc.pszText = pszText; lc.cchTextMax = sizeof(pszText)/sizeof(pszText[0]); int nCol = 0; while (m_wndMorphaDataList.GetColumn(nCol,&lc)) { if(CString(lc.pszText) == TEXT("检测号")) break; ++nCol; } CString str=m_wndMorphaDataList.GetItemText(pNMListView->iItem,nCol); if(str == "") return; CString strSQLinfo("select distinct *,basicinfo.pdetectno as 'pDetectno' from basicinfo,spermchait\ where basicinfo.pdetectno=spermchait.pdetectno and \ basicinfo.pdetectno='"); strSQLinfo= strSQLinfo + str + CString("'"); CPropertySheet* pSheet=(CPropertySheet*)GetParent(); CStatic* pStatic=(CStatic*)pSheet->GetParent(); CMorphaDataRetriveDlg* pDlg=(CMorphaDataRetriveDlg*)pStatic->GetParent(); try { _variant_t var; COleDateTime pddt; _RecordsetPtr rs=theConnection->Execute((LPCTSTR)strSQLinfo,NULL,adCmdText); var = rs->GetCollect("pDetectno"); pDlg->m_strEditDetectNO = (char*)(_bstr_t)var; // pDlg->m_strEditDetectNO.TrimLeft(); // pDlg->m_strEditDetectNO.TrimRight(); var = rs->GetCollect("pCaseNO"); pDlg->m_strEditCaseNO = (char*)(_bstr_t)var; // pDlg->m_strEditCaseNO.TrimLeft(); // pDlg->m_strEditCaseNO.TrimRight(); var = rs->GetCollect("pname"); pDlg->m_strEditName = (char*)(_bstr_t)var; // pDlg->m_strEditName.TrimLeft(); // pDlg->m_strEditName.TrimRight(); var = rs->GetCollect("pspermvolume"); pDlg->m_strEditSpermVolume = (char*)(_bstr_t)var; // pDlg->m_strEditSpermVolume.TrimLeft(); // pDlg->m_strEditSpermVolume.TrimRight(); var = rs->GetCollect("page"); pDlg->m_strEditAge = (char*)(_bstr_t)var; // pDlg->m_strEditAge.TrimLeft(); // pDlg->m_strEditAge.TrimRight(); pddt=rs->GetCollect("pdetectdatetime"); pDlg->m_oledateDetectDate.SetDate(pddt.GetYear(),pddt.GetMonth(),pddt.GetDay()); pDlg->m_oletimeDetectTime.SetTime(pddt.GetHour(),pddt.GetMinute(),pddt.GetSecond()); var = rs->GetCollect("pSampleNO"); pDlg->m_strEditSampleNO = (char*)(_bstr_t)var; // pDlg->m_strEditSampleNO.TrimLeft(); // pDlg->m_strEditSampleNO.TrimRight(); var = rs->GetCollect("pdilutionratio"); pDlg->m_strEditDilutionRatio = (char*)(_bstr_t)var; // pDlg->m_strEditDilutionRatio.TrimLeft(); // pDlg->m_strEditDilutionRatio.TrimRight(); var = rs->GetCollect("pShape"); pDlg->m_strEditShape = (char*)(_bstr_t)var; // pDlg->m_strEditShape.TrimLeft(); // pDlg->m_strEditShape.TrimRight(); pddt=rs->GetCollect("pspermgetdatetime"); pDlg->m_oledateSpermGetDate.SetDate(pddt.GetYear(),pddt.GetMonth(),pddt.GetDay()); pDlg->m_oletimeSpermGetTime.SetTime(pddt.GetHour(),pddt.GetMinute(),pddt.GetSecond()); var = rs->GetCollect("pcolor"); pDlg->m_strEditSpermColor = (char*)(_bstr_t)var; // pDlg->m_strEditSpermColor.TrimLeft(); // pDlg->m_strEditSpermColor.TrimRight(); var = rs->GetCollect("pcohesion"); pDlg->m_strEditCohension = (char*)(_bstr_t)var; // pDlg->m_strEditCohension.TrimLeft(); // pDlg->m_strEditCohension.TrimRight(); var = rs->GetCollect("pRoomTempera"); pDlg->m_strEditRoomTempera = (char*)(_bstr_t)var; // pDlg->m_strEditRoomTempera.TrimLeft(); // pDlg->m_strEditRoomTempera.TrimRight(); var = rs->GetCollect("pdaysofabstinency"); pDlg->m_strEditAbstinency = (char*)(_bstr_t)var; // pDlg->m_strEditAbstinency.TrimLeft(); // pDlg->m_strEditAbstinency.TrimRight(); var = rs->GetCollect("pliquifystate"); pDlg->m_strEditLiquifyState = (char*)(_bstr_t)var; // pDlg->m_strEditLiquifyState.TrimLeft(); // pDlg->m_strEditLiquifyState.TrimRight(); var = rs->GetCollect("psmell"); pDlg->m_strEditSmell = (char*)(_bstr_t)var; // pDlg->m_strEditSmell.TrimLeft(); // pDlg->m_strEditSmell.TrimRight(); var = rs->GetCollect("pthickness"); pDlg->m_strEditThickness = (char*)(_bstr_t)var; // pDlg->m_strEditThickness.TrimLeft(); // pDlg->m_strEditThickness.TrimRight(); var = rs->GetCollect("pph"); pDlg->m_strEditPH = (char*)(_bstr_t)var; // pDlg->m_strEditPH.TrimLeft(); // pDlg->m_strEditPH.TrimRight(); var = rs->GetCollect("pspermmethod"); pDlg->m_strEditSpermWay = (char*)(_bstr_t)var; // pDlg->m_strEditSpermWay.TrimLeft(); // pDlg->m_strEditSpermWay.TrimRight(); var = rs->GetCollect("pliquifytime"); pDlg->m_strEditLiquifyTime = (char*)(_bstr_t)var; // pDlg->m_strEditLiquifyTime.TrimLeft(); // pDlg->m_strEditLiquifyTime.TrimRight(); pDlg->UpdateData(FALSE); } catch (_com_error& e) { AfxMessageBox(e.Description()); return; } // str.Format("select * from morphasperminfo where pid like('%s%%')", pDlg->m_strEditDetectNO); try { _RecordsetPtr rs=theConnection->Execute((LPCTSTR)str,NULL,adCmdText); _variant_t vt; SingleSpermInfo ssInfo; pDlg->m_vSpermInfo.clear(); while(!rs->EndOfFile) { vt = rs->GetCollect("x"); ssInfo.pos.x = (long)vt; vt = rs->GetCollect("y"); ssInfo.pos.y = (long)vt; vt = rs->GetCollect("pid"); CString cs; cs = (char*)(_bstr_t)vt; int nl = cs.ReverseFind('_'); nl = cs.GetLength()-nl-1; cs = cs.Right(nl); ssInfo.nSpermNO = atol((LPCTSTR)cs); vt = rs->GetCollect("IsNormal"); ssInfo.bIsNormal = (bool)vt; vt = rs->GetCollect("m_length"); ssInfo.smPara.m_length = (double)vt; vt = rs->GetCollect("m_width"); ssInfo.smPara.m_width = (double)vt; vt = rs->GetCollect("m_area"); ssInfo.smPara.m_area = (double)vt; vt = rs->GetCollect("m_ellipticity"); ssInfo.smPara.m_ellipticity = (double)vt; vt = rs->GetCollect("m_perfor_area"); ssInfo.smPara.m_perfor_area = (double)vt; vt = rs->GetCollect("m_head_area"); ssInfo.smPara.m_head_area = (double)vt; vt = rs->GetCollect("m_perimeter"); ssInfo.smPara.m_perimeter = (double)vt; vt = rs->GetCollect("m_head_perfor_area"); ssInfo.smPara.m_head_perfor_area = (double)vt; vt = rs->GetCollect("m_tail_length"); ssInfo.smPara.m_tail_length = (double)vt; vt = rs->GetCollect("m_tail_width"); ssInfo.smPara.m_tail_width = (double)vt; vt = rs->GetCollect("m_tail_angle"); ssInfo.smPara.m_tail_angle = (double)vt; vt = rs->GetCollect("m_extension"); ssInfo.smPara.m_extension = (double)vt; vt = rs->GetCollect("m_symmetry"); ssInfo.smPara.m_symmetry = (double)vt; vt = rs->GetCollect("m_ruga"); ssInfo.smPara.m_ruga = (double)vt; pDlg->m_vSpermInfo.push_back(ssInfo); rs->MoveNext(); } // Update UI button UINT uSelectedCount = m_wndMorphaDataList.GetSelectedCount(); BOOL enable = uSelectedCount>=1 ? TRUE : FALSE; CDialog *pdlg = ((CMainFrame*)AfxGetMainWnd())->m_pWndMorphadlg; ::SendMessage(pdlg->GetSafeHwnd(), USER_MSG_SHOW_PRINT_BTN, (WPARAM)enable, 0); ::SendMessage(pdlg->GetSafeHwnd(), USER_MSG_SHOW_MOPHY_DEL_SEL_BTN, (WPARAM)enable, 0); } catch (_com_error& e) { MessageBox(e.Description()); return; } *pResult = 0; }