ADOConn.cpp
上传用户:jzscgs158
上传日期:2022-05-25
资源大小:8709k
文件大小:21k
源码类别:

百货/超市行业

开发平台:

Visual C++

  1. #include "StdAfx.h"
  2. #include "ADOConn.h"
  3. #include "MyTime.h"
  4. #include "FileOperate.h"
  5. //功能:构造函数
  6. //strData:数据库的名字
  7. CString CADOConn::GetAppPath()
  8. {
  9. char lpFileName[MAX_PATH];
  10. GetModuleFileName(AfxGetInstanceHandle(),lpFileName,MAX_PATH);
  11. CString strFileName = lpFileName;
  12. int nIndex = strFileName.ReverseFind ('\');
  13. CString strPath;
  14. if (nIndex > 0)
  15. strPath = strFileName.Left (nIndex);
  16. else
  17. strPath = "";
  18. return strPath;
  19. }
  20. CADOConn::CADOConn(CString strData)
  21. {
  22. CString strValue;
  23. strData.TrimLeft();
  24. strData.TrimRight();
  25. m_strData=_bstr_t(strData);
  26. strValue=strData.Right(3);
  27. if(strValue=="mdb") m_DataType=1;
  28. if(strValue=="xls") m_DataType=2;
  29. }
  30. CADOConn::CADOConn()
  31. {
  32. m_DataType=1;
  33. m_strData=_bstr_t("Data.mdb");
  34. }
  35. //功能:析构函数
  36. CADOConn::~CADOConn()
  37. {
  38. }
  39. //功能:初始化数据库连接
  40. void  CADOConn::OnInitCADOConn()
  41. {
  42. // 初始化OLE/COM库环境
  43. ::CoInitialize(NULL);
  44.   try
  45. {
  46. //初始化指针
  47. m_pConnection=NULL;
  48. //初始化指针
  49. m_pRecordset=NULL;
  50. // 创建Connection对象
  51. m_pConnection.CreateInstance("ADODB.Connection");
  52. // 设置连接字符串,必须是BSTR型或者_bstr_t类型
  53. _bstr_t strConnect;
  54. switch(m_DataType)
  55. {
  56. case 1://ACCESS
  57. strConnect=_bstr_t("Provider=Microsoft.Jet.OLEDB.4.0;");
  58. strConnect=strConnect+_bstr_t("Data Source=");
  59. strConnect=strConnect+_bstr_t(GetAppPath())+_bstr_t("\data\");
  60. strConnect=strConnect+m_strData;
  61. break;
  62. case 2://EXCEL
  63. strConnect=_bstr_t("Provider=Microsoft.Jet.OLEDB.4.0;");
  64. strConnect=strConnect+_bstr_t("Data Source=");
  65. strConnect=strConnect+_bstr_t(GetAppPath())+_bstr_t("\");
  66. strConnect=strConnect+m_strData;
  67. strConnect=strConnect+";Extended Properties=Excel 8.0";
  68. break;
  69. case 3://SQLSERVER
  70. strConnect=_bstr_t("Provider=Microsoft.Jet.OLEDB.4.0;");
  71. strConnect=strConnect+_bstr_t("Data Source=D:\FECG\");
  72. strConnect=strConnect+";Extended Properties=Excel 8.0";
  73. break;
  74. }
  75. m_pConnection->Open(strConnect,_bstr_t(""),_bstr_t(""),adModeUnknown);
  76. }
  77. // 捕捉异常
  78. catch(_com_error e)
  79. {
  80. // 显示错误信息
  81. AfxMessageBox(e.Description());
  82. }
  83. ASSERT(m_pConnection != NULL);
  84. }
  85. //功能:执行查询
  86. //返回值:字段集的指针
  87. _RecordsetPtr&  CADOConn::GetRecordSet(CString strSQL)
  88. {
  89. try
  90. {
  91. // 连接数据库,如果Connection对象为空,则重新连接数据库
  92. if(m_pConnection==NULL)OnInitCADOConn();
  93. strSQL.TrimLeft();
  94. strSQL.TrimRight();
  95. // 创建记录集对象
  96. m_pRecordset.CreateInstance(__uuidof(Recordset));
  97. // 取得表中的记录
  98. m_pRecordset->Open(_bstr_t(strSQL),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
  99. }
  100. // 捕捉异常
  101. catch(_com_error e)
  102. {
  103. // 显示错误信息
  104. AfxMessageBox(e.Description());
  105. }
  106. ASSERT(m_pRecordset!= NULL);
  107. // 返回记录集
  108. return m_pRecordset;
  109. }
  110. //功能:打开字符集
  111. //返回值:TRUE:成功 FALSE:失败
  112. BOOL CADOConn::Open(CString strSQL)
  113. {
  114. try
  115. {
  116. // 连接数据库,如果Connection对象为空,则重新连接数据库
  117. if(m_pConnection==NULL) OnInitCADOConn();
  118. strSQL.TrimLeft();
  119. strSQL.TrimRight();
  120. // 创建记录集对象
  121. m_pRecordset.CreateInstance(__uuidof(Recordset));
  122. // 取得表中的记录
  123. m_pRecordset->Open(_bstr_t(strSQL),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
  124. WriteLog(strSQL);
  125. }
  126. // 捕捉异常
  127. catch(_com_error e)
  128. {
  129. // 显示错误信息
  130. AfxMessageBox(e.Description());
  131. return FALSE;
  132. }
  133. // 返回记录集
  134. ASSERT(m_pRecordset!= NULL);
  135. return TRUE;
  136. }
  137. //功能:记录集移向开头
  138. //返回值:TRUE:成功 FALSE:失败
  139. BOOL CADOConn::MoveFirst()
  140. {
  141. if(m_pRecordset==NULL) 
  142. return FALSE;
  143. else
  144. {
  145. m_pRecordset->MoveFirst();
  146. return TRUE;
  147. }
  148. }
  149. //功能:记录集向下移动
  150. //返回值:TRUE:成功 FALSE:失败
  151. BOOL CADOConn::MoveNext()
  152. {
  153. if(m_pRecordset==NULL) 
  154. return FALSE;
  155. else
  156. {
  157. if (!m_pRecordset->adoEOF)
  158. {
  159. m_pRecordset->MoveNext();
  160. return TRUE;
  161. }
  162. else
  163. return FALSE;
  164. }
  165. }
  166. //功能:取得字段中的字符串
  167. //index:字段集中的索引
  168. //strSum:返回的字符的长度(<=实际:代表全部返回,>实际:左补空格)
  169. CString CADOConn::GetValueString(int index,int strSum)
  170. {
  171. _variant_t vValue;//var型返回值
  172. _variant_t vIndex;//索引
  173. CString strValue,strType,str;//strValue:初始返回值 strType:格式化字符串 str:最终返回值
  174. vIndex.vt=VT_I2;
  175. vIndex.iVal=index;
  176. vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
  177. switch(vValue.vt)
  178. {
  179. case VT_NULL:
  180. str="";
  181. break;
  182. case VT_ERROR:
  183. str="";
  184. break;
  185. case VT_EMPTY:
  186. str="";
  187. break;
  188. default:
  189. str=(LPCSTR)_bstr_t(vValue);
  190. }
  191. strType.Format("%d",strSum);
  192. strType="%"+strType+"s";
  193. strValue.Format(strType,str);
  194. return strValue;
  195. }
  196. //功能:取得字段中的字节型整数
  197. //index:字段集中的索引
  198. byte CADOConn::GetValueByte(int index)
  199. {
  200. _variant_t vValue;//var型返回值
  201. _variant_t vIndex;//索引
  202. byte bValue;//数值返回值
  203. vIndex.vt=VT_I2;
  204. vIndex.iVal=index;
  205. vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
  206. switch(vValue.vt)
  207. {
  208. case VT_NULL:
  209. bValue=0;
  210. break;
  211. case VT_ERROR:
  212. bValue=0;
  213. break;
  214. case VT_EMPTY:
  215. bValue=0;
  216. break;
  217. default:
  218. bValue=vValue.bVal;
  219. }
  220. return bValue;
  221. }
  222. //功能:取得字段中的字节型整数的字符串形式
  223. //index:字段集中的索引
  224. //strSum:返回的字符的长度(<=实际:代表全部返回,>实际:左补空格)
  225. CString CADOConn::GetValueByteStr (int index,int strSum)
  226. {
  227. _variant_t vValue;//var型返回值
  228. _variant_t vIndex;//索引
  229. byte bValue;//数值返回值
  230. CString strValue,strType;//strValue:字符串返回值 strType:格式化字符串
  231. vIndex.vt=VT_I2;
  232. vIndex.iVal=index;
  233. vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
  234. switch(vValue.vt)
  235. {
  236. case VT_NULL:
  237. bValue=0;
  238. break;
  239. case VT_ERROR:
  240. bValue=0;
  241. break;
  242. case VT_EMPTY:
  243. bValue=0;
  244. break;
  245. default:
  246. bValue=vValue.bVal;
  247. }
  248. strType.Format("%d",strSum);
  249. strType="%"+strType+"d";
  250. strValue.Format(strType,bValue);
  251. return strValue;
  252. }
  253. //功能:取得字段中的短整型整数
  254. //index:字段集中的索引
  255. int CADOConn::GetValueInt(int index)
  256. {
  257. _variant_t vValue;//var型返回值
  258. _variant_t vIndex;//索引
  259. int iValue;//数值返回值
  260. vIndex.vt=VT_I2;
  261. vIndex.iVal=index;
  262. vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
  263. switch(vValue.vt)
  264. {
  265. case VT_NULL:
  266. iValue=0;
  267. break;
  268. case VT_ERROR:
  269. iValue=0;
  270. break;
  271. case VT_EMPTY:
  272. iValue=0;
  273. break;
  274. default:
  275. iValue=vValue.iVal;
  276. }
  277. return iValue;
  278. }
  279. //功能:取得字段中的短整型整数的字符串形式
  280. //index:字段集中的索引
  281. //strSum:返回的字符的长度(<=实际:代表全部返回,>实际:左补空格)
  282. CString CADOConn::GetValueIntStr(int index,int strSum)
  283. {
  284. _variant_t vValue;//var型返回值
  285. _variant_t vIndex;//索引
  286. int iValue;//数值返回值
  287. CString strValue,strType;//strValue:字符串返回值 strType:格式化字符串
  288. vIndex.vt=VT_I2;
  289. vIndex.iVal=index;
  290. vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
  291. switch(vValue.vt)
  292. {
  293. case VT_NULL:
  294. iValue=0;
  295. break;
  296. case VT_ERROR:
  297. iValue=0;
  298. break;
  299. case VT_EMPTY:
  300. iValue=0;
  301. break;
  302. default:
  303. iValue=vValue.iVal;
  304. }
  305. strType.Format("%d",strSum);
  306. strType="%"+strType+"d";
  307. strValue.Format(strType,iValue);
  308. return strValue;
  309. }
  310. //功能:取得字段中的双精度浮点数
  311. //index:字段集中的索引
  312. double CADOConn::GetValueDouble(int index)
  313. {
  314. _variant_t vValue;//var型返回值
  315. _variant_t vIndex;//索引
  316. double dValue;//数值返回值
  317. vIndex.vt=VT_I2;
  318. vIndex.iVal=index;
  319. vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
  320. switch(vValue.vt)
  321. {
  322. case VT_NULL:
  323. dValue=0;
  324. break;
  325. case VT_ERROR:
  326. dValue=0;
  327. break;
  328. case VT_EMPTY:
  329. dValue=0;
  330. break;
  331. default:
  332. dValue=vValue.dblVal;
  333. }
  334. return dValue;
  335. }
  336. //功能:取得字段中的双精度浮点数的字符串形式
  337. //index:字段集中的索引
  338. //strLSum(整数部分):返回的整数部分的长度(<=实际:代表全部返回,>实际:左补空格)
  339. //strRSum(小数部分):返回的小数部分的长度(<=实际:代表全部返回,>实际:右补空格)
  340. CString CADOConn::GetValueDoubleStr(int index,int strLSum,int strRSum)
  341. {
  342. _variant_t vValue;//var型返回值
  343. _variant_t vIndex;//索引
  344. double dValue;//数值返回值
  345. CString strValue,strType;//strValue:字符串返回值 strType:格式化字符串
  346. vIndex.vt=VT_I2;
  347. vIndex.iVal=index;
  348. vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
  349. switch(vValue.vt)
  350. {
  351. case VT_NULL:
  352. dValue=0;
  353. break;
  354. case VT_ERROR:
  355. dValue=0;
  356. break;
  357. case VT_EMPTY:
  358. dValue=0;
  359. break;
  360. default:
  361. dValue=vValue.dblVal;
  362. }
  363. strType.Format("%d.%d",strLSum,strRSum);
  364. strType="%"+strType+"f";
  365. strValue.Format(strType,dValue);
  366. return strValue;
  367. }
  368. //功能:取得字段中的单精度浮点数
  369. //index:字段集中的索引
  370. float CADOConn::GetValueFloat(int index)
  371. {
  372. _variant_t vValue;//var型返回值
  373. _variant_t vIndex;//索引
  374. float fValue;//数值返回值
  375. vIndex.vt=VT_I2;
  376. vIndex.iVal=index;
  377. vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
  378. switch(vValue.vt)
  379. {
  380. case VT_NULL:
  381. fValue=0;
  382. break;
  383. case VT_ERROR:
  384. fValue=0;
  385. break;
  386. case VT_EMPTY:
  387. fValue=0;
  388. break;
  389. default:
  390. fValue=vValue.fltVal;
  391. }
  392. return fValue;
  393. }
  394. //功能:取得字段中的单精度浮点数的字符串形式
  395. //index:字段集中的索引
  396. //strLSum(整数部分):返回的整数部分的长度(<=实际:代表全部返回,>实际:左补空格)
  397. //strRSum(小数部分):返回的小数部分的长度(<=实际:代表全部返回,>实际:右补空格)
  398. CString CADOConn::GetValueFloatStr(int index,int strLSum,int strRSum)
  399. {
  400. _variant_t vValue;//var型返回值
  401. _variant_t vIndex;//索引
  402. float fValue;//数值返回值
  403. CString strValue,strType;//strValue:字符串返回值 strType:格式化字符串
  404. vIndex.vt=VT_I2;
  405. vIndex.iVal=index;
  406. vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
  407. switch(vValue.vt)
  408. {
  409. case VT_NULL:
  410. fValue=0;
  411. break;
  412. case VT_ERROR:
  413. fValue=0;
  414. break;
  415. case VT_EMPTY:
  416. fValue=0;
  417. break;
  418. default:
  419. fValue=vValue.fltVal;
  420. }
  421. strType.Format("%d.%d",strLSum,strRSum);
  422. strType="%"+strType+"f";
  423. strValue.Format(strType,fValue);
  424. return strValue;
  425. }
  426. //功能:取得字段中的长整型整数的字符串
  427. //index:字段集中的索引
  428. long CADOConn::GetValueLong(int index)
  429. {
  430. _variant_t vValue;//var型返回值
  431. _variant_t vIndex;//索引
  432. long lValue;//数值返回值
  433. vIndex.vt=VT_I2;
  434. vIndex.iVal=index;
  435. vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
  436. switch(vValue.vt)
  437. {
  438. case VT_NULL:
  439. lValue=0;
  440. break;
  441. case VT_ERROR:
  442. lValue=0;
  443. break;
  444. case VT_EMPTY:
  445. lValue=0;
  446. break;
  447. default:
  448. lValue=vValue.lVal;
  449. }
  450. return lValue;
  451. }
  452. //功能:取得字段中的长整型整数的字符串形式
  453. //index:字段集中的索引
  454. //strSum:返回的字符的长度(<=实际:代表全部返回,>实际:左补空格)
  455. CString CADOConn::GetValueLongStr(int index,int strSum)
  456. {
  457. _variant_t vValue;//var型返回值
  458. _variant_t vIndex;//索引
  459. long lValue;//数值返回值
  460. CString strValue,strType;//strValue:字符串返回值 strType:格式化字符串
  461. vIndex.vt=VT_I2;
  462. vIndex.iVal=index;
  463. vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
  464. switch(vValue.vt)
  465. {
  466. case VT_NULL:
  467. lValue=0;
  468. break;
  469. case VT_ERROR:
  470. lValue=0;
  471. break;
  472. case VT_EMPTY:
  473. lValue=0;
  474. break;
  475. default:
  476. lValue=vValue.lVal;
  477. }
  478. strType.Format("%d",strSum);
  479. strType="%"+strType+"d";
  480. strValue.Format(strType,lValue);
  481. return strValue;
  482. }
  483. //返回时间型值
  484. //数据库中存的格式为字符串(yyyy-mm-dd HH-MM-SS)
  485. CTime CADOConn::GetValueDate(int index)
  486. {
  487. _variant_t vValue;//var型返回值
  488. _variant_t vIndex;//索引
  489. CString strValue;//数值返回值
  490. vIndex.vt=VT_I2;
  491. vIndex.iVal=index;
  492. vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
  493. switch(vValue.vt)
  494. {
  495. case VT_NULL:
  496. strValue="1980-08-08";
  497. break;
  498. case VT_ERROR:
  499. strValue="1980-08-08";
  500. break;
  501. case VT_EMPTY:
  502. strValue="1980-08-08";
  503. break;
  504. default:
  505. strValue=(LPCSTR)_bstr_t(vValue);
  506. break;
  507. }
  508. CString strYear,strMonth,strDay,strHour,strMin,strSec;
  509. strYear=strValue.Mid(0,4);
  510. strMonth=strValue.Mid(5,2);
  511. strDay=strValue.Mid(8,2);
  512. if(strValue.GetLength()>10)
  513. {
  514. strHour=strValue.Mid(11,2);
  515. strMin=strValue.Mid(14,2);
  516. strSec=strValue.Mid(17,2);
  517. }
  518. else
  519. {
  520. strHour="0";
  521. strMin="0";
  522. strSec="0";
  523. }
  524. CTime TValue(atoi(strYear),atoi(strMonth),atoi(strDay),atoi(strHour),atoi(strMin),atoi(strSec));
  525. return TValue;
  526. }
  527. //返回时间型值的字符串
  528. //数据库中存的格式为字符串(yyyy-mm-dd HH-MM-SS)
  529. CString CADOConn::GetValueDateStr(int index,CString strType)
  530. {
  531. _variant_t vValue;//var型返回值
  532. _variant_t vIndex;//索引
  533. CString strValue="";//数值返回值
  534. vIndex.vt=VT_I2;
  535. vIndex.iVal=index;
  536. vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
  537. switch(vValue.vt)
  538. {
  539. case VT_NULL:
  540. strValue="1980-08-08";
  541. break;
  542. case VT_ERROR:
  543. strValue="1980-08-08";
  544. break;
  545. case VT_EMPTY:
  546. strValue="1980-08-08";
  547. break;
  548. default:
  549. strValue=(LPCSTR)_bstr_t(vValue);
  550. break;
  551. }
  552. CString strYear,strMonth,strDay,strHour,strMin,strSec;
  553. strYear=strValue.Mid(0,4);
  554. strMonth=strValue.Mid(5,2);
  555. strDay=strValue.Mid(8,2);
  556. if(strValue.GetLength()>10)
  557. {
  558. strHour=strValue.Mid(11,2);
  559. strMin=strValue.Mid(14,2);
  560. strSec=strValue.Mid(17,2);
  561. }
  562. else
  563. {
  564. strHour="0";
  565. strMin="0";
  566. strSec="0";
  567. }
  568. CTime TValue(atoi(strYear),atoi(strMonth),atoi(strDay),atoi(strHour),atoi(strMin),atoi(strSec));
  569. CString str=TValue.Format(strType);
  570. return str;
  571. }
  572. //功能:执行SQL语句(Insert Update delete)
  573. //strSQL:SQL语句
  574. //返回值:TRUE:成功 FALSE:失败
  575. BOOL CADOConn::ExecuteSQL(CString strSQL)
  576. {
  577. try
  578. {
  579. // 是否已经连接数据库
  580. if(m_pConnection == NULL) OnInitCADOConn();
  581. strSQL.TrimLeft();
  582. strSQL.TrimRight();
  583. m_pConnection->Execute(_bstr_t(strSQL),NULL,adCmdText);
  584. WriteLog(strSQL);
  585. return TRUE;
  586. }
  587. catch(_com_error e)
  588. {
  589. AfxMessageBox(e.Description());
  590. return FALSE;
  591. }
  592. }
  593. //功能:退出连接
  594. void CADOConn::ExitConnect()
  595. {
  596. try
  597. {
  598. if (m_pRecordset !=NULL) m_pRecordset->Close();
  599. if (m_pConnection !=NULL) m_pConnection->Close();
  600. // 释放环境
  601. ::CoUninitialize();
  602. }
  603. catch (_com_error e) 
  604. {
  605. AfxMessageBox(e.Description());
  606. }
  607. }
  608. //功能:向一表中添加一行数据
  609. //strTable:表名
  610. //strSum:表中字段集的数目
  611. //pszText...:strSum个数据字符串
  612. //返回值:TRUE:成功 FALSE:错误
  613. BOOL CADOConn::AddItem(CString strTable,int strSum,LPCTSTR pszText, ... )
  614. {
  615. strTable.TrimLeft();
  616. strTable.TrimRight();
  617. CString strSQL="select * from "+strTable;
  618. CString strFirst=pszText;
  619. LPTSTR* arrpsz = new LPTSTR[strSum];//初始化一列表存放数据
  620. arrpsz[ 0 ] = new TCHAR[ lstrlen( pszText ) + 1 ];
  621. (void)lstrcpy( arrpsz[ 0 ], pszText );
  622.   va_list list;
  623. va_start( list, pszText );//向列表填充数据
  624. Open(strSQL);//字符集类型的查找
  625. strSQL="insert into "+strTable+" values(";
  626. int iType;
  627. iType=GetValueType(0);
  628. if (iType==ado_Field_Str||iType==ado_Field_Text||iType==ado_Field_Date)
  629. strSQL=strSQL+"'"+strFirst+"',";//字符型
  630. else
  631. {
  632. if(strFirst=="") strFirst="0";
  633. strSQL=strSQL+strFirst+",";//数字型
  634. }
  635. for( int iColumn = 1; iColumn <strSum; iColumn++ )
  636. {
  637. pszText = va_arg( list, LPCTSTR );
  638. ASSERT_VALID_STRING( pszText );
  639. iType=GetValueType(iColumn);
  640. if (iType==ado_Field_Str||iType==ado_Field_Text||iType==ado_Field_Date)
  641. strSQL=strSQL+"'"+pszText+"',";
  642. else
  643. {
  644. CString strValue=pszText;
  645. if(strValue=="") strValue="0";
  646. strSQL=strSQL+strValue+",";
  647. }
  648. arrpsz[ iColumn ] = new TCHAR[ lstrlen( pszText ) + 1 ];
  649. (void)lstrcpy( arrpsz[ iColumn ], pszText );
  650. }
  651. va_end( list );
  652. //开始执行
  653. strSQL=strSQL.Left(strSQL.GetLength()-1)+")";
  654. try
  655. {
  656. //执行插入操作
  657. m_pConnection->Execute(_bstr_t(strSQL),NULL,adCmdText);
  658. return TRUE;
  659. }
  660. catch(_com_error e)
  661. {
  662. AfxMessageBox(e.Description());
  663. return FALSE;
  664. }
  665. }
  666. //功能:返回索引为Index时的数据的类型
  667. //返回值:数据类型
  668. int CADOConn::GetValueType(int index)
  669. {
  670. _variant_t vIndex;
  671. int Tpye;
  672. vIndex.vt=VT_I2;
  673. vIndex.iVal=index;
  674. Tpye=m_pRecordset->Fields->GetItem(vIndex)->GetType();
  675. return Tpye;
  676. }
  677. //功能:判断字段集是否结束
  678. //返回值:TRUE:结束 FALSE:未结束
  679. BOOL CADOConn::adoEOF()
  680. {
  681. if(m_pRecordset->adoEOF)
  682. return TRUE;
  683. else
  684. return FALSE;
  685. }
  686. //功能:填充列表
  687. //listMain:列表指针 ColOpenEnd:代表展开多少列
  688. //返回值:TRUE:成功 FALSE:失败
  689. BOOL CADOConn::FillList(CListCtrl *listMain,int ColOpenEnd)
  690. {
  691. int i,iType,iRow=0,listWidth=0;//iType:字段集的数据类型 listWidth:列表中列的宽度
  692. _variant_t vIndex;
  693. long lMax=0;
  694. lMax=m_pRecordset->Fields->Count;
  695. vIndex.vt=VT_I2;
  696. listMain->DeleteAllItems();
  697. if(!m_pRecordset->adoEOF)
  698. {
  699. MoveFirst();
  700. while (!m_pRecordset->adoEOF)
  701. {
  702. for (i=0;i<lMax;i++)
  703. {
  704. CString strValue="";
  705. vIndex.iVal=i;
  706. iType=m_pRecordset->Fields->GetItem(vIndex)->GetType();
  707. switch(iType)
  708. {
  709. case ado_Field_Str:
  710. case ado_Field_Text:
  711. strValue=GetValueString(i,0);
  712. break;
  713. case ado_Field_Long:
  714. strValue=GetValueLongStr(i,0);
  715. break;
  716. case ado_Field_Int:
  717. strValue=GetValueIntStr(i,0);
  718. break;
  719. case ado_Field_Float:
  720. strValue=GetValueFloatStr(i,0,2);
  721. break;
  722. case ado_Field_Double:
  723. strValue=GetValueDoubleStr(i,0,2);
  724. break;
  725. case ado_Field_Byte:
  726. strValue=GetValueByteStr(i,0);
  727. break;
  728. case ado_Field_Date:
  729. strValue=GetValueString(i,0);
  730. break;
  731. default:
  732. strValue="";
  733. break;
  734. }
  735. if(m_DataType==2)
  736. strValue=GetValueString(i,0);
  737. if(i==0)
  738. listMain->InsertItem(iRow,strValue,0);
  739. else
  740. listMain->SetItemText(iRow,i,strValue);
  741. }
  742. m_pRecordset->MoveNext();
  743. iRow=iRow+1;
  744. }
  745. //移向开头
  746. MoveFirst();
  747. }
  748. if(listMain->GetItemCount()>0)
  749. {
  750. if(ColOpenEnd>0)
  751. {
  752. for(int i=0;i<ColOpenEnd;i++)
  753. {
  754. listMain->SetColumnWidth(i,LVSCW_AUTOSIZE);
  755. listWidth=listMain->GetColumnWidth(i);
  756. listMain->SetColumnWidth(i,LVSCW_AUTOSIZE_USEHEADER);
  757. if(listWidth<listMain->GetColumnWidth(i))
  758. listMain->SetColumnWidth(i,LVSCW_AUTOSIZE_USEHEADER);
  759. }
  760. }
  761. else
  762. {
  763. listMain->SetColumnWidth(i,LVSCW_AUTOSIZE_USEHEADER);
  764. }
  765. }
  766. else
  767. {
  768. for(i=0;i<lMax;i++)
  769. {
  770. listMain->SetColumnWidth(i,LVSCW_AUTOSIZE_USEHEADER);
  771. listWidth=listWidth+listMain->GetColumnWidth(i);
  772. }
  773. RECT rectList;
  774. listMain->GetWindowRect(&rectList);
  775. if(listWidth<(rectList.right-rectList.left))
  776. {
  777. listWidth=(rectList.right-rectList.left-listWidth)/11;
  778. listMain->SetColumnWidth(i,listMain->GetColumnWidth(i)+listWidth);
  779. }
  780. }
  781. return TRUE;
  782. }
  783. //功能:初始化自动排列列表
  784. //CListCtrl:列表指针;colSum:列表中已经存在列数
  785. BOOL CADOConn::InitList(CListCtrl *listMain,int colSum)
  786. {
  787. long lMax=0;
  788. _variant_t vIndex;
  789. vIndex.vt=VT_I2;
  790. int i;
  791. lMax=m_pRecordset->Fields->Count;
  792. listMain->SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
  793. for(i=0;i<lMax;i++)
  794. {
  795. CString strTitle="";
  796. vIndex.iVal=i;
  797. strTitle=(LPCTSTR)m_pRecordset->Fields->GetItem(vIndex)->GetName();
  798. listMain->InsertColumn(i,strTitle,LVCFMT_CENTER,100,0);
  799. }
  800. int intWidth=0;
  801. for(i=0;i<colSum;i++)
  802. {
  803. listMain->SetColumnWidth(i,LVSCW_AUTOSIZE_USEHEADER);
  804. intWidth=intWidth+listMain->GetColumnWidth(i);
  805. }
  806. RECT rectList;
  807. listMain->GetWindowRect(&rectList);
  808. if(intWidth<(rectList.right-rectList.left))
  809. {
  810. intWidth=(rectList.right-rectList.left-intWidth)/colSum;
  811. listMain->SetColumnWidth(i,listMain->GetColumnWidth(i)+intWidth);
  812. }
  813. return TRUE;
  814. }
  815. BOOL CADOConn::FillList(CListCtrl *listMain)
  816. {
  817. int i,iType,iRow=0,listWidth=0;//iType:字段集的数据类型 listWidth:列表中列的宽度
  818. _variant_t vIndex;
  819. long lMax=0;
  820. lMax=m_pRecordset->Fields->Count;
  821. vIndex.vt=VT_I2;
  822. if(!m_pRecordset->adoEOF)
  823. {
  824. MoveFirst();
  825. while (!m_pRecordset->adoEOF)
  826. {
  827. for (i=0;i<lMax;i++)
  828. {
  829. CString strValue="";
  830. vIndex.iVal=i;
  831. iType=m_pRecordset->Fields->GetItem(vIndex)->GetType();
  832. switch(iType)
  833. {
  834. case ado_Field_Str:
  835. case ado_Field_Text:
  836. strValue=GetValueString(i,0);
  837. break;
  838. case ado_Field_Long:
  839. strValue=GetValueLongStr(i,0);
  840. break;
  841. case ado_Field_Int:
  842. strValue=GetValueIntStr(i,0);
  843. break;
  844. case ado_Field_Float:
  845. strValue=GetValueFloatStr(i,0,2);
  846. break;
  847. case ado_Field_Double:
  848. strValue=GetValueDoubleStr(i,0,2);
  849. break;
  850. case ado_Field_Byte:
  851. strValue=GetValueByteStr(i,0);
  852. break;
  853. case ado_Field_Date:
  854. strValue=GetValueString(i,0);
  855. break;
  856. default:
  857. strValue="";
  858. break;
  859. }
  860. if(m_DataType==2)
  861. strValue=GetValueString(i,0);
  862. if(i==0)
  863. iRow=listMain->InsertItem(iRow,strValue,0);
  864. else
  865. listMain->SetItemText(iRow,i,strValue);
  866. }
  867. m_pRecordset->MoveNext();
  868. }
  869. //移向开头
  870. MoveFirst();
  871. }
  872. return TRUE;
  873. }
  874. CString CADOConn::GetFieldsName(int index)
  875. {
  876. _variant_t vIndex;
  877. vIndex.vt=VT_I2;
  878. CString strTitle="";
  879. vIndex.iVal=index;
  880. strTitle=(LPCTSTR)m_pRecordset->Fields->GetItem(vIndex)->GetName();
  881. return strTitle;
  882. }
  883. int CADOConn::GetFeildsCount()
  884. {
  885. int i=m_pRecordset->Fields->Count;
  886. return i;
  887. }
  888. long CADOConn::GetRecordCount()
  889. {
  890. long i;
  891. m_pRecordset->get_RecordCount(&i);
  892. return i;
  893. }
  894. void CADOConn::WriteLog(CString strSql)
  895. {
  896. CFileOperate fileMain;
  897. CMyTime time1;
  898. time1.SetNow();
  899. CString strPath=GetAppPath()+"\data\LOG\"+strfileName+".txt";
  900. CFile file1;
  901. file1.Open(strPath,CFile::modeWrite,NULL);
  902. file1.SeekToEnd();
  903. strPath="rn    "+time1.GetAllString(FALSE)+"    ";
  904. file1.Write(strPath,strPath.GetLength());
  905. file1.Write(strSql,strSql.GetLength());
  906. file1.Close();
  907. }