GuiADODB.cpp
上传用户:wlkj888
上传日期:2022-08-01
资源大小:806k
文件大小:27k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. /****************************************************************************
  2.  * *  
  3.  * GuiToolKit   *
  4.  *  (MFC extension) *  
  5.  * Created by Francisco Campos G. www.beyondata.com fcampos@beyondata.com *
  6.  *--------------------------------------------------------------------------*    
  7.  * *
  8.  * This program is free software;so you are free to use it any of your *
  9.  * applications (Freeware, Shareware, Commercial),but leave this header *
  10.  * intact. *
  11.  * *
  12.  * These files are provided "as is" without warranty of any kind. *
  13.  * *
  14.  *        GuiToolKit is forever FREE CODE !!!!! *
  15.  * *
  16.  *--------------------------------------------------------------------------*
  17.  * Created by: Francisco Campos G. *
  18.  * Bug Fixes and improvements : (Add your name) *
  19.  * -Francisco Campos *
  20.  * Chenlu Li (wikilee@263.net) *
  21.  ****************************************************************************/
  22. #include "stdafx.h"
  23. #include "guiadodb.h"
  24. //---------------------------------------------------------------------------------------
  25. CString GetError(_com_error &e)
  26. {
  27. CString MsgBug;
  28. _bstr_t Source(e.Source());
  29. _bstr_t Description(e.Description());
  30. MsgBug.Format( "Ups!!! nSource = %snDescription= %sn",(LPCSTR)Source, (LPCSTR)Description );
  31. #ifdef _DEBUG
  32. AfxMessageBox( MsgBug, MB_OK | MB_ICONERROR );
  33. #endif
  34. return MsgBug;
  35. }
  36. CString GetTypeVar(_variant_t vt)
  37. {
  38. switch(vt.vt)
  39. {
  40. case VT_EMPTY :
  41. return _T("VT_EMPTY");
  42. break;
  43. case   VT_NULL :
  44. return _T("VT_NULL");
  45. break;
  46. case VT_I2:
  47. return _T("int");
  48. break;
  49. case VT_I4 :
  50. return _T("long");
  51. break;
  52. case  VT_R4 :
  53. return _T("float");
  54. break;
  55. case VT_R8 :
  56. return _T("double");
  57. break;
  58. case VT_CY :
  59. return _T("currency");
  60. break;
  61. case VT_DATE:
  62. return _T("date");
  63. break;
  64. case  VT_BSTR :
  65. return _T("string");
  66. break;
  67. case VT_DISPATCH :
  68. return _T("dispatch");
  69. break;
  70. case  VT_ERROR :
  71. return _T("error");
  72. break;
  73. case VT_BOOL :
  74. return _T("bool");
  75. break;
  76. case VT_VARIANT :
  77. return _T("variant");
  78. break;
  79. case VT_UNKNOWN :
  80. return _T("unknown");
  81. break;
  82. case   VT_DECIMAL :
  83. return _T("decimal");
  84. break;
  85. default:
  86. return _T("");
  87. }
  88. }
  89. CGuiConnection::CGuiConnection(void)
  90. {
  91. ::CoInitialize(NULL);
  92. m_pConn.CreateInstance(__uuidof(Connection));
  93. }
  94. CGuiConnection::~CGuiConnection(void)
  95. {
  96. Close();
  97. m_pConn.Release();
  98. m_pConn = NULL;
  99. }
  100. BOOL CGuiConnection::Open(LPCTSTR ConnectionString,LPCTSTR UID,LPCTSTR PWD,long Options)
  101. {
  102.  HRESULT re;
  103.  try
  104. {
  105. re = m_pConn->Open(_bstr_t(ConnectionString), _bstr_t(UID), _bstr_t(PWD), Options);
  106. return re == S_OK;
  107. }
  108. catch(_com_error &e)
  109. {
  110. GetError(e);
  111. return FALSE;
  112. }
  113.  
  114. }
  115. BOOL CGuiConnection::IsConnect()
  116. {
  117. return (BOOL) m_pConn->GetState() != adStateClosed;
  118. }
  119. CGuiRecordSet* CGuiConnection::Execute(LPCTSTR CommandText,long Options)
  120. {
  121. CGuiRecordSet* m_rs= new CGuiRecordSet();
  122. try{
  123. m_rs->Open(m_pConn,CommandText,adOpenUnspecified,adLockUnspecified, Options);
  124. }catch(_com_error &e)
  125. {
  126. GetError(e);
  127. return NULL;
  128. }
  129. return m_rs;
  130. }
  131. long CGuiConnection::BeginTrans()
  132. {
  133. return m_pConn->BeginTrans();
  134. }
  135. void CGuiConnection::RollbackTrans()
  136. {
  137. m_pConn->RollbackTrans();
  138. }
  139. void CGuiConnection::CommitTrans()
  140. {
  141. m_pConn->CommitTrans();
  142. }
  143. void CGuiConnection::Cancel()
  144. {
  145. m_pConn->Cancel();
  146. }
  147. void CGuiConnection::Close()
  148. {
  149. if (IsConnect())m_pConn->Close();
  150. }
  151. void CGuiConnection::SetConnectionTimeout(long ConnectionTimeout)
  152. {
  153. m_pConn->ConnectionTimeout=ConnectionTimeout;
  154. }
  155. void CGuiConnection::SetConectionString( LPCTSTR ConnectionString)
  156. {
  157. m_pConn->ConnectionString=ConnectionString;
  158. }
  159. long CGuiConnection::GetConnectionTimeout()
  160. {
  161. return m_pConn->ConnectionTimeout;
  162. }
  163. LPCTSTR CGuiConnection::GetConectionString()
  164. {
  165. return m_pConn->ConnectionString;
  166. }
  167. //***********************************************************************************************
  168. CGuiRecordSet::CGuiRecordSet(void)
  169. {
  170. ::CoInitialize(NULL);
  171. m_rs.CreateInstance(__uuidof(Recordset));
  172. m_Criteria=_T("");
  173. }
  174. CGuiRecordSet::~CGuiRecordSet(void)
  175. {
  176. Close();
  177. if (m_rs) m_rs.Release();
  178. m_rs=NULL;
  179. }
  180. void CGuiRecordSet::Attach(_RecordsetPtr m_prs ) { m_rs=m_prs; } BOOL CGuiRecordSet::Open(_ConnectionPtr ActiveConnection,LPCTSTR Source, CursorTypeEnum CursorType,ADOCG::LockTypeEnum LockType, long Options) { try
  181. {
  182. m_rs->Open(Source, _variant_t((IDispatch*)ActiveConnection, TRUE), 
  183. adOpenStatic, LockType, Options);
  184. }
  185. catch(_com_error &e)
  186. {
  187. GetError(e);
  188. return FALSE;
  189. }
  190. return TRUE; }
  191. BOOL CGuiRecordSet::FindFirst(LPCTSTR Criteria)
  192. {
  193. MoveFirst();
  194.     return Find(Criteria,0,adSearchForward,"");
  195. }
  196. void CGuiRecordSet::Move(long NumRecords , _variant_t Start) { m_rs->Move(NumRecords,vtMissing); }
  197. BOOL CGuiRecordSet::FindNext()
  198. {
  199. return Find(m_Criteria,1,adSearchForward,vtPointer);
  200. }
  201. BOOL CGuiRecordSet::Find(LPCTSTR Criteria , long SkipRecords ,   SearchDirectionEnum SearchDirection,_variant_t Start) { CString szCri=Criteria; if (!szCri.IsEmpty()) m_Criteria=Criteria; else return FALSE; try{ m_rs->Find(_bstr_t(Criteria),SkipRecords,SearchDirection,Start); if (SearchDirection ==adSearchForward) { if (!IsEof()) { vtPointer= m_rs->Bookmark; return TRUE; } }else if (SearchDirection ==adSearchBackward) { if (!IsBof()) { vtPointer= m_rs->Bookmark; return TRUE; } }else return FALSE; }catch(_com_error &e)
  202. {
  203. GetError(e);
  204. return FALSE;
  205. } return FALSE; }
  206. BOOL CGuiRecordSet::SetValue(LPCTSTR lpName,CString szCad)
  207. {
  208. _variant_t vt;
  209. if(!szCad.IsEmpty())
  210. {
  211. vt.vt = VT_BSTR;
  212. vt.bstrVal = szCad.AllocSysString();
  213. }
  214. return SetFieldValue(lpName, vt);
  215. }
  216. BOOL CGuiRecordSet::SetValue(LPCTSTR lpName,long lVal)
  217. {
  218. _variant_t vt;
  219. vt.lVal=lVal;
  220. vt.vt=VT_I4;
  221. return SetFieldValue(lpName, vt);
  222. }
  223. BOOL CGuiRecordSet::SetValue(LPCTSTR lpName,unsigned char usVal)
  224. {
  225. _variant_t vt;
  226. vt.bVal=usVal;
  227. vt.vt=VT_UI1;
  228. return SetFieldValue(lpName, vt);
  229. }
  230. BOOL CGuiRecordSet::SetValue(LPCTSTR lpName,short shVal)
  231. {
  232. _variant_t vt;
  233. vt.iVal=shVal;
  234. vt.vt=VT_I2;
  235. return SetFieldValue(lpName, vt);
  236. }
  237. BOOL CGuiRecordSet::SetValue(LPCTSTR lpName,float flVal)
  238. {
  239. _variant_t vt;
  240. vt.fltVal=flVal;
  241. vt.vt=VT_R4;
  242. return SetFieldValue(lpName, vt);
  243. }
  244. BOOL CGuiRecordSet::SetValue(LPCTSTR lpName,double dblVal)
  245. {
  246. _variant_t vt;
  247. vt.dblVal=dblVal;
  248. vt.vt=VT_R8;
  249. return SetFieldValue(lpName, vt);
  250. }
  251. BOOL CGuiRecordSet::SetValue(LPCTSTR lpName,BOOL blVal)
  252. {
  253. _variant_t vt;
  254. vt.boolVal=blVal;
  255. vt.vt=VT_BOOL;
  256. return SetFieldValue(lpName, vt);
  257. }
  258. BOOL CGuiRecordSet::SetValue(LPCTSTR lpName,COleDateTime dtVal)
  259. {
  260. _variant_t vt;
  261. vt.date=dtVal;
  262. vt.vt=VT_DATE;
  263. return SetFieldValue(lpName, vt);
  264. }
  265. BOOL CGuiRecordSet::SetValue(LPCTSTR lpName,unsigned long ulVal)
  266. {
  267. _variant_t vt;
  268. vt.vt = VT_UI4;
  269. vt.ulVal = ulVal;
  270. return SetFieldValue(lpName, vt);
  271. }
  272. BOOL CGuiRecordSet::SetValue(LPCTSTR lpName, COleCurrency cuVal)
  273. {
  274. _variant_t vt;
  275. vt.vt = VT_CY;
  276. vt.cyVal = cuVal.m_cur;
  277. if(cuVal.m_status == COleCurrency::invalid)
  278. return FALSE;
  279. return SetFieldValue(lpName, vt);
  280. }
  281. BOOL CGuiRecordSet::SetFieldValue(LPCTSTR lpName, _variant_t vtField)
  282. {
  283. try
  284. {
  285. m_rs->Fields->GetItem(lpName)->Value = vtField; 
  286. return TRUE;
  287. }
  288. catch(_com_error &e)
  289. {
  290. GetError(e);
  291. return FALSE;
  292. }
  293. }
  294. CString CGuiRecordSet::GetCollect(LPCTSTR lpField)
  295. {
  296. try{
  297. _variant_t vt = m_rs->Fields->GetItem(lpField)->Value;
  298.  return (CString) vt.bstrVal;
  299. }
  300. catch(_com_error &e)
  301. {
  302. GetError(e);
  303. return _T("");
  304. }
  305.  
  306. }
  307. BOOL CGuiRecordSet::GetCollect(LPCTSTR lpField,int& nValue)
  308. {
  309. _variant_t vt;
  310. try
  311. {
  312. vt = m_rs->Fields->GetItem(lpField)->Value;
  313. if (vt.vt==VT_I2)
  314. {
  315. nValue=vt.intVal;
  316. return TRUE;
  317. }else if (vt.vt==VT_BOOL)
  318. {
  319. nValue=vt.boolVal;
  320. return TRUE;
  321. }else return FALSE;
  322. }catch(_com_error &e)
  323. {
  324. GetError(e);
  325. return FALSE;
  326. }
  327. }
  328. BOOL CGuiRecordSet::GetCollect(LPCTSTR lpField,long& lVal)
  329. {
  330. _variant_t vt;
  331. try
  332. {
  333. vt = m_rs->Fields->GetItem(lpField)->Value;
  334. if (vt.vt==VT_I4)
  335. {
  336. lVal=vt.lVal;
  337. return TRUE;
  338. }else return FALSE;
  339. }catch(_com_error &e)
  340. {
  341. GetError(e);
  342. return FALSE;
  343. }
  344. }
  345. BOOL CGuiRecordSet::GetCollect(LPCTSTR lpField,double& dbVal)
  346. {
  347. _variant_t vt;
  348. try
  349. {
  350. vt = m_rs->Fields->GetItem(lpField)->Value;
  351. if (vt.vt==VT_R8)
  352. {
  353. dbVal=vt.dblVal;
  354. return TRUE;
  355. }else return FALSE;
  356. }catch(_com_error &e)
  357. {
  358. GetError(e);
  359. return FALSE;
  360. }
  361. }
  362. BOOL CGuiRecordSet::GetCollect(LPCTSTR lpField,CString& strValue)
  363. {
  364. _variant_t vt;
  365. try
  366. {
  367. vt = m_rs->Fields->GetItem(lpField)->Value;
  368. if (vt.vt==VT_BSTR)
  369. {
  370. strValue=vt.bstrVal;
  371. return TRUE;
  372. }else return FALSE;
  373. }catch(_com_error &e)
  374. {
  375. GetError(e);
  376. return FALSE;
  377. }
  378. }
  379. BOOL CGuiRecordSet::GetCollect(LPCTSTR lpField,COleCurrency& cyVal)
  380. {
  381. _variant_t vt;
  382. vt = m_rs->Fields->GetItem(lpField)->Value;
  383. try
  384. {
  385. if (vt.vt==VT_CY)
  386. {
  387. cyVal.m_cur=vt.cyVal;
  388. return TRUE;
  389. }else return FALSE;
  390. }catch(_com_error &e)
  391. {
  392. GetError(e);
  393. return FALSE;
  394. }
  395. }
  396. BOOL CGuiRecordSet::GetCollect(LPCTSTR lpField,COleDateTime& dtVal)
  397. {
  398. _variant_t vt;
  399. try
  400. {
  401. vt = m_rs->Fields->GetItem(lpField)->Value;
  402. if (vt.vt==VT_DATE)
  403. {
  404. dtVal=vt.date;
  405. return TRUE;
  406. }else return FALSE;
  407. }catch(_com_error &e)
  408. {
  409. GetError(e);
  410. return FALSE;
  411. }
  412. }
  413. BOOL CGuiRecordSet::GetCollect(LPCTSTR lpField,float& flVal)
  414. {
  415. _variant_t vt;
  416. try
  417. {
  418. vt = m_rs->Fields->GetItem(lpField)->Value;
  419. if (vt.vt==VT_R4)
  420. {
  421. flVal=vt.fltVal;
  422. return TRUE;
  423. }else return FALSE;
  424. }catch(_com_error &e)
  425. {
  426. GetError(e);
  427. return FALSE;
  428. }
  429. }
  430. BOOL CGuiRecordSet::GetCollect(LPCTSTR lpField,_variant_t& vt)
  431. {
  432. try
  433. {
  434. vt = m_rs->Fields->GetItem(lpField)->Value;
  435. return TRUE;
  436. }
  437. catch(_com_error& e)
  438. {
  439. GetError(e);
  440. return FALSE;
  441. }
  442. }
  443. BOOL CGuiRecordSet::GetCollect(int nIndex,int& nValue)
  444. {
  445. _variant_t vt;
  446. _variant_t vtn;
  447. vtn.vt = VT_I2;
  448. try
  449. {
  450. vtn.iVal = nIndex;
  451. vt = m_rs->Fields->GetItem(vtn)->Value;
  452. if (vt.vt==VT_I2)
  453. {
  454. nValue=vt.intVal;
  455. return TRUE;
  456. }else return FALSE;
  457. }catch(_com_error &e)
  458. {
  459. GetError(e);
  460. return FALSE;
  461. }
  462. }
  463. BOOL CGuiRecordSet::GetCollect(int nIndex,long& lVal)
  464. {
  465. _variant_t vt;
  466. _variant_t vtn;
  467. vtn.vt = VT_I2;
  468. try
  469. {
  470. vtn.iVal = nIndex;
  471. vt = m_rs->Fields->GetItem(vtn)->Value;
  472. if (vt.vt==VT_I4)
  473. {
  474. lVal=vt.lVal;
  475. return TRUE;
  476. }else return FALSE;
  477. }catch(_com_error &e)
  478. {
  479. GetError(e);
  480. return FALSE;
  481. }
  482. }
  483. BOOL CGuiRecordSet::GetCollect(int nIndex,double& dbVal)
  484. {
  485. _variant_t vt;
  486. _variant_t vtn;
  487. vtn.vt = VT_I2;
  488. try
  489. {
  490. vtn.iVal = nIndex;
  491. vt = m_rs->Fields->GetItem(vtn)->Value;
  492. if (vt.vt==VT_R8)
  493. {
  494. dbVal=vt.dblVal;
  495. return TRUE;
  496. }else return FALSE;
  497. }catch(_com_error &e)
  498. {
  499. GetError(e);
  500. return FALSE;
  501. }
  502. }
  503. BOOL CGuiRecordSet::GetCollect(int nIndex,CString& strValue)
  504. {
  505. _variant_t vt;
  506. _variant_t vtn;
  507. vtn.vt = VT_I2;
  508. try
  509. {
  510. vtn.iVal = nIndex;
  511. vt = m_rs->Fields->GetItem(vtn)->Value;
  512. if (vt.vt==VT_BSTR)
  513. {
  514. strValue=vt.bstrVal;
  515. return TRUE;
  516. }else return FALSE;
  517. }catch(_com_error &e)
  518. {
  519. GetError(e);
  520. return FALSE;
  521. }
  522. }
  523. BOOL CGuiRecordSet::GetCollect(int nIndex,COleCurrency& cyVal)
  524. {
  525. _variant_t vt;
  526. _variant_t vtn;
  527. vtn.vt = VT_CY;
  528. try
  529. {
  530. vtn.iVal =nIndex;
  531. vt = m_rs->Fields->GetItem(vtn)->Value;
  532. if (vt.vt==VT_CY)
  533. {
  534. cyVal.m_cur=vt.cyVal;
  535. return TRUE;
  536. }else return FALSE;
  537. }catch(_com_error &e)
  538. {
  539. GetError(e);
  540. return FALSE;
  541. }
  542. }
  543. BOOL CGuiRecordSet::GetCollect(int nIndex,COleDateTime& dtVal)
  544. {
  545. _variant_t vt;
  546. _variant_t vtn;
  547. vtn.vt = VT_I2;
  548. try
  549. {
  550. vtn.iVal = nIndex;
  551. vt = m_rs->Fields->GetItem(vtn)->Value;
  552. if (vt.vt==VT_DATE)
  553. {
  554. dtVal=vt.date;
  555. return TRUE;
  556. }else return FALSE;
  557. }catch(_com_error &e)
  558. {
  559. GetError(e);
  560. return FALSE;
  561. }
  562. }
  563. BOOL CGuiRecordSet::GetFormatDate(LPCTSTR lpField,CString& m_szDate, CString Format)
  564. {
  565. COleDateTime time;
  566. if (!GetCollect(lpField,time)) return FALSE;
  567. CTime ct(time.GetYear(),time.GetMonth(),time.GetDay(),time.GetHour(),time.GetMinute(),time.GetSecond()); 
  568. m_szDate =ct.Format(Format);
  569. return TRUE;
  570. }
  571. BOOL CGuiRecordSet::GetFormatDate(int nIndex,CString& m_szDate, CString Format)
  572. {
  573. COleDateTime time;
  574. if (!GetCollect(nIndex,time)) return FALSE;
  575. CTime ct(time.GetYear(),time.GetMonth(),time.GetDay(),time.GetHour(),time.GetMinute(),time.GetSecond()); 
  576. m_szDate =ct.Format(Format);
  577. return TRUE;
  578. }
  579. BOOL CGuiRecordSet::GetCollect(int nIndex,float& flVal)
  580. {
  581. _variant_t vt;
  582. _variant_t vtn;
  583. vtn.vt = VT_I2;
  584. try
  585. {
  586. vtn.iVal = nIndex;
  587. vt = m_rs->Fields->GetItem(vtn)->Value;
  588. if (vt.vt==VT_R4)
  589. {
  590. flVal=vt.fltVal;
  591. return TRUE;
  592. }else return FALSE;
  593. }catch(_com_error &e)
  594. {
  595. GetError(e);
  596. return FALSE;
  597. }
  598. }
  599. BOOL CGuiRecordSet::GetCollect(int nIndex,_variant_t& vt)
  600. {
  601. _variant_t vtn;
  602. vtn.vt = VT_I2;
  603. try
  604. {
  605. vtn.iVal = nIndex;
  606. vt = m_rs->Fields->GetItem(vtn)->Value;
  607. return TRUE;
  608. }
  609. catch(_com_error& e)
  610. {
  611. GetError(e);
  612. return FALSE;
  613. }
  614. }
  615. BOOL CGuiRecordSet::SetFilter(LPCTSTR lpFilter)
  616. {
  617. if (!IsOpen()) return FALSE;
  618. try
  619. {
  620. m_rs->PutFilter(lpFilter);
  621. return TRUE;
  622. }
  623. catch(_com_error &e)
  624. {
  625. GetError(e);
  626. return FALSE;
  627. }
  628. }
  629. BOOL CGuiRecordSet::SetSort(LPCTSTR lpSort)
  630. {
  631. if (!IsOpen()) return FALSE;
  632. try
  633. {
  634. m_rs->PutSort(lpSort);
  635. return TRUE;
  636. }
  637. catch(_com_error &e)
  638. {
  639. GetError(e);
  640. return FALSE;
  641. }
  642. }
  643. BOOL CGuiRecordSet::IsOpen()
  644. {
  645. if(m_rs)
  646. return m_rs-> GetState() != adStateClosed;
  647. return FALSE;
  648. }
  649. void CGuiRecordSet::Close()
  650. {
  651. if(IsOpen())
  652. m_rs->Close();
  653. }
  654. void CGuiRecordSet::MoveFirst()
  655. {
  656. m_rs->MoveFirst();
  657. }
  658. void CGuiRecordSet::MoveLast()
  659. {
  660. m_rs->MoveLast();
  661. }
  662. void CGuiRecordSet::MoveNext()
  663. {
  664. m_rs->MoveNext();
  665. }
  666. void CGuiRecordSet::MovePrevious()
  667. {
  668. m_rs->MovePrevious();
  669. }
  670. void CGuiRecordSet::Cancel()
  671. {
  672.    m_rs->Cancel();
  673. }
  674. void CGuiRecordSet::CancelUpdate()
  675. {
  676.   m_rs->CancelUpdate();
  677. }
  678. BOOL CGuiRecordSet::Delete()
  679. {
  680. try{
  681. if(m_rs->Delete(adAffectCurrent)== S_OK)
  682. if(m_rs->Update() ==S_OK)
  683. return TRUE;
  684. }catch(_com_error &e)
  685. {
  686. GetError(e);
  687. return FALSE;
  688. }
  689. return FALSE;
  690. }
  691. BOOL CGuiRecordSet::IsEof()
  692. {
  693. return (BOOL)m_rs->EndOfFile;
  694. }
  695. BOOL CGuiRecordSet::IsBof()
  696. {
  697. return (BOOL)m_rs->BOF;
  698. }
  699. BOOL CGuiRecordSet::Supports( CursorOptionEnum CursorOptions )  {   return (BOOL)m_rs->Supports(CursorOptions); }
  700. void CGuiRecordSet::CancelBatch(AffectEnum AffectRecords) {   m_rs->CancelBatch(AffectRecords); } CGuiField CGuiRecordSet::GetField(LPCTSTR lpField)
  701. {
  702. FieldPtr pField = m_rs->Fields->GetItem(lpField);
  703. CGuiField Field;
  704. Field.Attach(pField);
  705. return Field;
  706. }
  707. CGuiField CGuiRecordSet::GetField(int Index) { _variant_t vtIndex;
  708. vtIndex.vt = VT_I2;
  709. vtIndex.iVal = Index;
  710. FieldPtr pField = m_rs->Fields->GetItem(vtIndex); CGuiField Field;
  711. Field.Attach(pField);
  712. return Field; } CGuiRecordSet*  CGuiRecordSet::Clone(ADOCG::LockTypeEnum LockType) { _RecordsetPtr m_rs1=m_rs->Clone(LockType); CGuiRecordSet* m_pRs= new CGuiRecordSet(); m_pRs->Attach(m_rs1); return m_pRs;  } CGuiRecordSet* CGuiRecordSet::NextRecordset(long RecordsAffected)  { _RecordsetPtr m_rs1=m_rs->NextRecordset((VARIANT*)RecordsAffected); CGuiRecordSet* m_pRs= new CGuiRecordSet(); m_pRs->Attach(m_rs1); return m_pRs;  }
  713. //***********************************************************************************************************
  714. CGuiField::CGuiField(void)
  715. {
  716. }
  717. CGuiField::~CGuiField(void)
  718. {
  719. }
  720. BOOL CGuiField::SetValue(long lVal)
  721. {
  722. _variant_t vt;
  723. vt.lVal=lVal;
  724. vt.vt=VT_I4;
  725. try
  726. {
  727. field->Value=vt;
  728. return TRUE;
  729. }catch(_com_error &e)
  730. {
  731. GetError(e);
  732. return FALSE;
  733. }
  734. }
  735. BOOL CGuiField::SetValue(float flVal)
  736. {
  737. _variant_t vt;
  738. vt.fltVal=flVal;
  739. vt.vt=VT_R4;
  740. try
  741. {
  742. field->Value=vt;
  743. return TRUE;
  744. }catch(_com_error &e)
  745. {
  746. GetError(e);
  747. return FALSE;
  748. }
  749. }
  750. BOOL CGuiField::SetValue(int nVal)
  751. {
  752. _variant_t vt;
  753. vt.intVal=nVal;
  754. vt.vt=VT_I2;
  755. try
  756. {
  757. field->Value=vt;
  758. return TRUE;
  759. }catch(_com_error &e)
  760. {
  761. GetError(e);
  762. return FALSE;
  763. }
  764. }
  765. BOOL CGuiField::SetValue(double dbVal)
  766. {
  767. _variant_t vt;
  768. vt.dblVal=dbVal;
  769. vt.vt=VT_R8;
  770. try
  771. {
  772. field->Value=vt;
  773. return TRUE;
  774. }catch(_com_error &e)
  775. {
  776. GetError(e);
  777. return FALSE;
  778. }
  779. }
  780. BOOL CGuiField::SetValue(CString szCad)
  781. {
  782. _variant_t vt;
  783. if(!szCad.IsEmpty())
  784. {
  785. vt.vt = VT_BSTR;
  786. vt.bstrVal = szCad.AllocSysString();
  787. }
  788. try
  789. {
  790. field->Value=vt;
  791. return TRUE;
  792. }catch(_com_error &e)
  793. {
  794. GetError(e);
  795. return FALSE;
  796. }
  797. }
  798. BOOL CGuiField::SetValue(bool blVal)
  799. {
  800. _variant_t vt;
  801. vt.boolVal=blVal;
  802. vt.vt=VT_BOOL;
  803. try
  804. {
  805. field->Value=vt;
  806. return TRUE;
  807. }catch(_com_error &e)
  808. {
  809. GetError(e);
  810. return FALSE;
  811. }
  812. }
  813. BOOL CGuiField::SetValue(COleDateTime dtVal)
  814. {
  815. _variant_t vt;
  816. vt.date=dtVal;
  817. vt.vt=VT_DATE;
  818. try
  819. {
  820. field->Value=vt;
  821. return TRUE;
  822. }catch(_com_error &e)
  823. {
  824. GetError(e);
  825. return FALSE;
  826. }
  827. }
  828. BOOL CGuiField::SetValue(_variant_t vt)
  829. {
  830. try
  831. {
  832. field->Value=vt;
  833. return TRUE;
  834. }catch(_com_error &e)
  835. {
  836. GetError(e);
  837. return FALSE;
  838. }
  839. }
  840. BOOL CGuiField::GetValue(int& nVal)
  841. {
  842. _variant_t vt;
  843. vt = field->Value;
  844. try
  845. {
  846. if (vt.vt==VT_I2)
  847. {
  848. nVal=vt.intVal;
  849. return TRUE;
  850. }else if (vt.vt==VT_BOOL)
  851. {
  852. nVal=vt.boolVal;
  853. return TRUE;
  854. }else return FALSE;
  855. }catch(_com_error &e)
  856. {
  857. GetError(e);
  858. return FALSE;
  859. }
  860. }
  861. BOOL CGuiField::GetValue(long& lVal)
  862. {
  863. _variant_t vt;
  864. vt = field->Value;
  865. try
  866. {
  867. if (vt.vt==VT_I4)
  868. {
  869. lVal=vt.lVal;
  870. return TRUE;
  871. }else return FALSE;
  872. }catch(_com_error &e)
  873. {
  874. GetError(e);
  875. return FALSE;
  876. }
  877. }
  878. BOOL CGuiField::GetValue(double& dbVal)
  879. {
  880. _variant_t vt;
  881. vt = field->Value;
  882. try
  883. {
  884. if (vt.vt==VT_R8)
  885. {
  886. dbVal=vt.dblVal;
  887. return TRUE;
  888. }else return FALSE;
  889. }catch(_com_error &e)
  890. {
  891. GetError(e);
  892. return FALSE;
  893. }
  894. }
  895. BOOL CGuiField::GetValue(CString& strValue)
  896. {
  897. _variant_t vt;
  898. vt =field->Value;
  899. try
  900. {
  901. if (vt.vt==VT_BSTR)
  902. {
  903. strValue=vt.bstrVal;
  904. return TRUE;
  905. }else return FALSE;
  906. }catch(_com_error &e)
  907. {
  908. GetError(e);
  909. return FALSE;
  910. }
  911. }
  912. BOOL CGuiField::GetValue(COleDateTime& dtVal)
  913. {
  914. _variant_t vt;
  915. vt = field->Value;
  916. try
  917. {
  918. if (vt.vt==VT_DATE)
  919. {
  920. dtVal=vt.date;
  921. return TRUE;
  922. }else return FALSE;
  923. }catch(_com_error &e)
  924. {
  925. GetError(e);
  926. return FALSE;
  927. }
  928. }
  929. BOOL CGuiField::GetValue(float& flVal)
  930. {
  931. _variant_t vt;
  932. vt = field->Value;
  933. try
  934. {
  935. if (vt.vt==VT_R4)
  936. {
  937. flVal=vt.fltVal;
  938. return TRUE;
  939. }else return FALSE;
  940. }catch(_com_error &e)
  941. {
  942. GetError(e);
  943. return FALSE;
  944. }
  945. }
  946. BOOL CGuiField::GetValue(_variant_t& vt)
  947. {
  948. try
  949. {
  950. //_variant_t vt = field->Value;
  951. vt = field->Value;
  952. return TRUE;
  953. }
  954. catch(_com_error& e)
  955. {
  956. GetError(e);
  957. return FALSE;
  958. }
  959. }
  960. //***********************************************************************************************************
  961. CGuiParameter::CGuiParameter()
  962. {
  963. ::CoInitialize(NULL);
  964. pParam.CreateInstance(__uuidof(Parameter));
  965. }
  966. CGuiParameter::~CGuiParameter()
  967. {
  968. pParam->Release();
  969. pParam=NULL;
  970. }
  971. void CGuiParameter::SetAttributes(long Attributes)
  972. {
  973. pParam->PutAttributes(Attributes);
  974. }
  975. void CGuiParameter::SetDirection(ADOCG::ParameterDirectionEnum Direction)
  976. {
  977. pParam->PutDirection(Direction);
  978. }
  979. void CGuiParameter::SetName(LPCTSTR szName)
  980. {
  981. CString mszname=szName;
  982. pParam->Name=mszname.AllocSysString();
  983. }
  984. void CGuiParameter::SetNumericScale(unsigned char NumericScale)
  985. {
  986. pParam->PutNumericScale(NumericScale);
  987. }
  988. void CGuiParameter::SetPrecision(unsigned char Precision)
  989. {
  990. pParam->PutPrecision(Precision);
  991. }
  992. void CGuiParameter::SetSize(long Size)
  993. {
  994. pParam->PutSize(Size);
  995. }
  996. void CGuiParameter::SetType(ADOCG::DataTypeEnum Type)
  997. {
  998. pParam->PutType(Type);
  999. }
  1000. BOOL CGuiParameter::SetValue(long lVal)
  1001. {
  1002. _variant_t vt;
  1003. vt.lVal=lVal;
  1004. vt.vt=VT_I4;
  1005. try
  1006. {
  1007. pParam->Value=vt;
  1008. return TRUE;
  1009. }catch(_com_error &e)
  1010. {
  1011. GetError(e);
  1012. return FALSE;
  1013. }
  1014. }
  1015. BOOL CGuiParameter::SetValue(float flVal)
  1016. {
  1017. _variant_t vt;
  1018. vt.fltVal=flVal;
  1019. vt.vt=VT_R4;
  1020. try
  1021. {
  1022. pParam->Value=vt;
  1023. return TRUE;
  1024. }catch(_com_error &e)
  1025. {
  1026. GetError(e);
  1027. return FALSE;
  1028. }
  1029. }
  1030. BOOL CGuiParameter::SetValue(int nVal)
  1031. {
  1032. _variant_t vt;
  1033. vt.intVal=nVal;
  1034. vt.vt=VT_I2;
  1035. try
  1036. {
  1037. pParam->Value=vt;
  1038. return TRUE;
  1039. }catch(_com_error &e)
  1040. {
  1041. GetError(e);
  1042. return FALSE;
  1043. }
  1044. }
  1045. BOOL CGuiParameter::SetValue(double dbVal)
  1046. {
  1047. _variant_t vt;
  1048. vt.dblVal=dbVal;
  1049. vt.vt=VT_R8;
  1050. try
  1051. {
  1052. pParam->Value=vt;
  1053. return TRUE;
  1054. }catch(_com_error &e)
  1055. {
  1056. GetError(e);
  1057. return FALSE;
  1058. }
  1059. }
  1060. BOOL CGuiParameter::SetValue(CString szCad)
  1061. {
  1062. _variant_t vt;
  1063. if(!szCad.IsEmpty())
  1064. {
  1065. vt.vt = VT_BSTR;
  1066. vt.bstrVal = szCad.AllocSysString();
  1067. }
  1068. try
  1069. {
  1070. pParam->Value=vt;
  1071. return TRUE;
  1072. }catch(_com_error &e)
  1073. {
  1074. GetError(e);
  1075. return FALSE;
  1076. }
  1077. }
  1078. BOOL CGuiParameter::SetValue(bool blVal)
  1079. {
  1080. _variant_t vt;
  1081. vt.boolVal=blVal;
  1082. vt.vt=VT_BOOL;
  1083. try
  1084. {
  1085. pParam->Value=vt;
  1086. return TRUE;
  1087. }catch(_com_error &e)
  1088. {
  1089. GetError(e);
  1090. return FALSE;
  1091. }
  1092. }
  1093. BOOL CGuiParameter::SetValue(COleDateTime dtVal)
  1094. {
  1095. _variant_t vt;
  1096. vt.date=dtVal;
  1097. vt.vt=VT_DATE;
  1098. try
  1099. {
  1100. pParam->Value=vt;
  1101. return TRUE;
  1102. }catch(_com_error &e)
  1103. {
  1104. GetError(e);
  1105. return FALSE;
  1106. }
  1107. }
  1108. BOOL CGuiParameter::SetValue(_variant_t vt)
  1109. {
  1110. try
  1111. {
  1112. pParam->Value=vt;
  1113. return TRUE;
  1114. }catch(_com_error &e)
  1115. {
  1116. GetError(e);
  1117. return FALSE;
  1118. }
  1119. }
  1120. BOOL CGuiParameter::GetValue(int& nVal)
  1121. {
  1122. _variant_t vt;
  1123. vt = pParam->Value;
  1124. try
  1125. {
  1126. if (vt.vt==VT_I2)
  1127. {
  1128. nVal=vt.intVal;
  1129. return TRUE;
  1130. }else if (vt.vt==VT_BOOL)
  1131. {
  1132. nVal=vt.boolVal;
  1133. return TRUE;
  1134. }else return FALSE;
  1135. }catch(_com_error &e)
  1136. {
  1137. GetError(e);
  1138. return FALSE;
  1139. }
  1140. }
  1141. BOOL CGuiParameter::GetValue(long& lVal)
  1142. {
  1143. _variant_t vt;
  1144. vt = pParam->Value;
  1145. try
  1146. {
  1147. if (vt.vt==VT_I4)
  1148. {
  1149. lVal=vt.lVal;
  1150. return TRUE;
  1151. }if (vt.vt==VT_BSTR)
  1152. {
  1153. CString cad=vt.bstrVal;
  1154. lVal=atol(cad);
  1155. return TRUE;
  1156. }
  1157. else return FALSE;
  1158. }catch(_com_error &e)
  1159. {
  1160. GetError(e);
  1161. return FALSE;
  1162. }
  1163. }
  1164. BOOL CGuiParameter::SetValue(COleCurrency cyVal)
  1165. {
  1166. _variant_t vt;
  1167. vt.cyVal=cyVal.m_cur;
  1168. vt.vt=VT_CY;
  1169. try
  1170. {
  1171. pParam->Value=vt;
  1172. return TRUE;
  1173. }catch(_com_error &e)
  1174. {
  1175. GetError(e);
  1176. return FALSE;
  1177. }
  1178. }
  1179. BOOL CGuiParameter::GetValue(double& dbVal)
  1180. {
  1181. _variant_t vt;
  1182. vt = pParam->Value;
  1183. try
  1184. {
  1185. if (vt.vt==VT_R8)
  1186. {
  1187. dbVal=vt.dblVal;
  1188. return TRUE;
  1189. }else return FALSE;
  1190. }catch(_com_error &e)
  1191. {
  1192. GetError(e);
  1193. return FALSE;
  1194. }
  1195. }
  1196. BOOL CGuiParameter::GetValue(CString& strValue)
  1197. {
  1198. _variant_t vt;
  1199. vt =pParam->Value;
  1200. try
  1201. {
  1202. if (vt.vt==VT_BSTR)
  1203. {
  1204. strValue=vt.bstrVal;
  1205. return TRUE;
  1206. }else return FALSE;
  1207. }catch(_com_error &e)
  1208. {
  1209. GetError(e);
  1210. return FALSE;
  1211. }
  1212. }
  1213. BOOL CGuiParameter::GetValue(COleDateTime& dtVal)
  1214. {
  1215. _variant_t vt;
  1216. vt = pParam->Value;
  1217. try
  1218. {
  1219. if (vt.vt==VT_DATE)
  1220. {
  1221. dtVal=vt.date;
  1222. return TRUE;
  1223. }else return FALSE;
  1224. }catch(_com_error &e)
  1225. {
  1226. GetError(e);
  1227. return FALSE;
  1228. }
  1229. }
  1230. BOOL CGuiParameter::GetValue(COleCurrency& cyVal)
  1231. {
  1232. _variant_t vt;
  1233. vt = pParam->Value;
  1234. try
  1235. {
  1236. if (vt.vt==VT_CY)
  1237. {
  1238. cyVal.m_cur=vt.cyVal;
  1239. return TRUE;
  1240. }else return FALSE;
  1241. }catch(_com_error &e)
  1242. {
  1243. GetError(e);
  1244. return FALSE;
  1245. }
  1246. }
  1247. BOOL CGuiParameter::GetFormatDate(CString& m_szDate, CString Format)
  1248. {
  1249. COleDateTime time;
  1250. if (!GetValue(time)) return FALSE;
  1251. CTime ct(time.GetYear(),time.GetMonth(),time.GetDay(),time.GetHour(),time.GetMinute(),time.GetSecond()); 
  1252. m_szDate =ct.Format(Format);
  1253. return TRUE;
  1254. }
  1255. BOOL CGuiParameter::GetValue(float& flVal)
  1256. {
  1257. _variant_t vt;
  1258. vt = pParam->Value;
  1259. try
  1260. {
  1261. if (vt.vt==VT_R4)
  1262. {
  1263. flVal=vt.fltVal;
  1264. return TRUE;
  1265. }else return FALSE;
  1266. }catch(_com_error &e)
  1267. {
  1268. GetError(e);
  1269. return FALSE;
  1270. }
  1271. }
  1272. BOOL CGuiParameter::GetValue(_variant_t& vt)
  1273. {
  1274. try
  1275. {
  1276. _variant_t vt = pParam->Value;
  1277. return TRUE;
  1278. }
  1279. catch(_com_error& e)
  1280. {
  1281. GetError(e);
  1282. return FALSE;
  1283. }
  1284. }
  1285. //----------------------------------------------------------------------------------------------
  1286. CGuiCommand::CGuiCommand()
  1287. {
  1288. ::CoInitialize(NULL);
  1289. pCommand.CreateInstance(__uuidof(Command));
  1290. }
  1291. CGuiCommand::~CGuiCommand()
  1292. {
  1293. Cancel();
  1294. pCommand->Release();
  1295. pCommand=NULL;
  1296. }
  1297. void CGuiCommand::SetActiveConnection(LPCTSTR szconnec)
  1298. {
  1299. m_pCon.Open(szconnec);
  1300. ASSERT( m_pCon.IsConnect());
  1301. SetActiveConnection(&m_pCon);
  1302. }
  1303. void CGuiCommand::SetActiveConnection(CGuiConnection* pCon)
  1304. {
  1305. ASSERT(pCon->IsConnect());
  1306. pCommand->ActiveConnection=pCon->GetConecction();
  1307. }
  1308. void CGuiCommand::Cancel()
  1309. {
  1310. pCommand->Cancel();
  1311. void CGuiCommand::SetCommandText(LPCTSTR lpCommand,CommandTypeEnum cmdType)
  1312. {
  1313. CString szCommand=lpCommand;
  1314. pCommand->CommandText=szCommand.AllocSysString();
  1315. pCommand->PutCommandType(cmdType);
  1316. }
  1317. void CGuiCommand::SetCommandTimeout(long CommandTimeout)
  1318. {
  1319. pCommand->PutCommandTimeout(CommandTimeout);
  1320. }
  1321. void CGuiCommand::SetPrepared(BOOL prepared)
  1322. {
  1323. pCommand->PutPrepared((BOOL) prepared);
  1324. }
  1325. long CGuiCommand::GetState()
  1326. {
  1327. return pCommand->GetState();
  1328. }
  1329. CGuiRecordSet* CGuiCommand::Execute(VARIANT* param1,VARIANT* param2,long Options)
  1330. {
  1331. try
  1332. {
  1333. _RecordsetPtr m_rs = pCommand->Execute(NULL, NULL, Options);
  1334. CGuiRecordSet* m_prs= new CGuiRecordSet();
  1335. m_prs->Attach(m_rs);
  1336. return m_prs;
  1337. }
  1338. catch(_com_error &e)
  1339. {
  1340. GetError(e);
  1341. return NULL;
  1342. }
  1343. }
  1344. CGuiParameter* CGuiCommand::CreateParameter(CString Name ,long Size ,
  1345. ADOCG::DataTypeEnum Type, 
  1346. ADOCG::ParameterDirectionEnum Direction)
  1347. {
  1348. _ParameterPtr param=pCommand->CreateParameter(Name.AllocSysString(), Type,Direction, Size);
  1349. CGuiParameter* pParam=new CGuiParameter();
  1350. pParam->Attach(param);
  1351. return pParam;
  1352. }
  1353. BOOL CGuiCommand::Append(CGuiParameter* pParam)
  1354. {
  1355. try
  1356. {
  1357. pCommand->Parameters->Append(pParam->GetParameter());
  1358. return TRUE;
  1359. }
  1360. catch(_com_error& e)
  1361. {
  1362. GetError(e);
  1363. return FALSE;
  1364. }
  1365. }