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.  * *
  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. if (IsConnect())
  97. Close();
  98. m_pConn.Release();
  99. m_pConn = NULL;
  100. }
  101. BOOL CGuiConnection::Open(LPCTSTR ConnectionString,LPCTSTR UID,LPCTSTR PWD,long Options)
  102. {
  103.  HRESULT re;
  104.  try
  105. {
  106. re = m_pConn->Open(_bstr_t(ConnectionString), _bstr_t(UID), _bstr_t(PWD), NULL);
  107. return re == S_OK;
  108. }
  109. catch(_com_error &e)
  110. {
  111. GetError(e);
  112. return FALSE;
  113. }
  114.  
  115. }
  116. BOOL CGuiConnection::IsConnect()
  117. {
  118. return (BOOL) m_pConn->GetState() != adStateClosed;
  119. }
  120. CGuiRecordSet* CGuiConnection::Execute(LPCTSTR CommandText,long Options)
  121. {
  122. CGuiRecordSet* m_rs= new CGuiRecordSet();
  123. try{
  124. m_rs->Open(m_pConn,CommandText,adOpenUnspecified,adLockUnspecified, Options);
  125. }catch(_com_error &e)
  126. {
  127. GetError(e);
  128. return NULL;
  129. }
  130. return m_rs;
  131. }
  132. long CGuiConnection::BeginTrans()
  133. {
  134. return m_pConn->BeginTrans();
  135. }
  136. void CGuiConnection::RollbackTrans()
  137. {
  138. m_pConn->RollbackTrans();
  139. }
  140. void CGuiConnection::CommitTrans()
  141. {
  142. m_pConn->CommitTrans();
  143. }
  144. void CGuiConnection::Cancel()
  145. {
  146. m_pConn->Cancel();
  147. }
  148. void CGuiConnection::Close()
  149. {
  150. m_pConn->Close();
  151. }
  152. void CGuiConnection::SetConnectionTimeout(long ConnectionTimeout)
  153. {
  154. m_pConn->ConnectionTimeout=ConnectionTimeout;
  155. }
  156. void CGuiConnection::SetConectionString( LPCTSTR ConnectionString)
  157. {
  158. m_pConn->ConnectionString=ConnectionString;
  159. }
  160. long CGuiConnection::GetConnectionTimeout()
  161. {
  162. return m_pConn->ConnectionTimeout;
  163. }
  164. LPCTSTR CGuiConnection::GetConectionString()
  165. {
  166. return m_pConn->ConnectionString;
  167. }
  168. //***********************************************************************************************
  169. CGuiRecordSet::CGuiRecordSet(void)
  170. {
  171. ::CoInitialize(NULL);
  172. m_rs.CreateInstance(__uuidof(Recordset));
  173. m_Criteria=_T("");
  174. }
  175. CGuiRecordSet::~CGuiRecordSet(void)
  176. {
  177. Close();
  178. if (m_rs) m_rs->Release();
  179. m_rs=NULL;
  180. }
  181. 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
  182. {
  183. m_rs->Open(Source, _variant_t((IDispatch*)ActiveConnection, TRUE), 
  184. adOpenStatic, LockType, Options);
  185. }
  186. catch(_com_error &e)
  187. {
  188. GetError(e);
  189. return FALSE;
  190. }
  191. return TRUE; }
  192. BOOL CGuiRecordSet::FindFirst(LPCTSTR Criteria)
  193. {
  194. MoveFirst();
  195.     return Find(Criteria,0,adSearchForward,"");
  196. }
  197. void CGuiRecordSet::Move(long NumRecords , _variant_t Start) { m_rs->Move(NumRecords,vtMissing); }
  198. BOOL CGuiRecordSet::FindNext()
  199. {
  200. return Find(m_Criteria,1,adSearchForward,vtPointer);
  201. }
  202. 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)
  203. {
  204. GetError(e);
  205. return FALSE;
  206. } return FALSE; }
  207. BOOL CGuiRecordSet::SetValue(LPCTSTR lpName,CString szCad)
  208. {
  209. _variant_t vt;
  210. if(!szCad.IsEmpty())
  211. {
  212. vt.vt = VT_BSTR;
  213. vt.bstrVal = szCad.AllocSysString();
  214. }
  215. return SetFieldValue(lpName, vt);
  216. }
  217. BOOL CGuiRecordSet::SetValue(LPCTSTR lpName,long lVal)
  218. {
  219. _variant_t vt;
  220. vt.lVal=lVal;
  221. vt.vt=VT_I4;
  222. return SetFieldValue(lpName, vt);
  223. }
  224. BOOL CGuiRecordSet::SetValue(LPCTSTR lpName,unsigned char usVal)
  225. {
  226. _variant_t vt;
  227. vt.bVal=usVal;
  228. vt.vt=VT_UI1;
  229. return SetFieldValue(lpName, vt);
  230. }
  231. BOOL CGuiRecordSet::SetValue(LPCTSTR lpName,short shVal)
  232. {
  233. _variant_t vt;
  234. vt.iVal=shVal;
  235. vt.vt=VT_I2;
  236. return SetFieldValue(lpName, vt);
  237. }
  238. BOOL CGuiRecordSet::SetValue(LPCTSTR lpName,float flVal)
  239. {
  240. _variant_t vt;
  241. vt.fltVal=flVal;
  242. vt.vt=VT_R4;
  243. return SetFieldValue(lpName, vt);
  244. }
  245. BOOL CGuiRecordSet::SetValue(LPCTSTR lpName,double dblVal)
  246. {
  247. _variant_t vt;
  248. vt.dblVal=dblVal;
  249. vt.vt=VT_R8;
  250. return SetFieldValue(lpName, vt);
  251. }
  252. BOOL CGuiRecordSet::SetValue(LPCTSTR lpName,BOOL blVal)
  253. {
  254. _variant_t vt;
  255. vt.boolVal=blVal;
  256. vt.vt=VT_BOOL;
  257. return SetFieldValue(lpName, vt);
  258. }
  259. BOOL CGuiRecordSet::SetValue(LPCTSTR lpName,COleDateTime dtVal)
  260. {
  261. _variant_t vt;
  262. vt.date=dtVal;
  263. vt.vt=VT_DATE;
  264. return SetFieldValue(lpName, vt);
  265. }
  266. BOOL CGuiRecordSet::SetValue(LPCTSTR lpName,unsigned long ulVal)
  267. {
  268. _variant_t vt;
  269. vt.vt = VT_UI4;
  270. vt.ulVal = ulVal;
  271. return SetFieldValue(lpName, vt);
  272. }
  273. BOOL CGuiRecordSet::SetValue(LPCTSTR lpName, COleCurrency cuVal)
  274. {
  275. _variant_t vt;
  276. vt.vt = VT_CY;
  277. vt.cyVal = cuVal.m_cur;
  278. if(cuVal.m_status == COleCurrency::invalid)
  279. return FALSE;
  280. return SetFieldValue(lpName, vt);
  281. }
  282. BOOL CGuiRecordSet::SetFieldValue(LPCTSTR lpName, _variant_t vtField)
  283. {
  284. try
  285. {
  286. m_rs->Fields->GetItem(lpName)->Value = vtField; 
  287. return TRUE;
  288. }
  289. catch(_com_error &e)
  290. {
  291. GetError(e);
  292. return FALSE;
  293. }
  294. }
  295. CString CGuiRecordSet::GetCollect(LPCTSTR lpField)
  296. {
  297. try{
  298. _variant_t vt = m_rs->Fields->GetItem(lpField)->Value;
  299.  return (CString) vt.bstrVal;
  300. }
  301. catch(_com_error &e)
  302. {
  303. GetError(e);
  304. return _T("");
  305. }
  306.  
  307. }
  308. BOOL CGuiRecordSet::GetCollect(LPCTSTR lpField,int& nValue)
  309. {
  310. _variant_t vt;
  311. try
  312. {
  313. vt = m_rs->Fields->GetItem(lpField)->Value;
  314. if (vt.vt==VT_I2)
  315. {
  316. nValue=vt.intVal;
  317. return TRUE;
  318. }else if (vt.vt==VT_BOOL)
  319. {
  320. nValue=vt.boolVal;
  321. return TRUE;
  322. }else return FALSE;
  323. }catch(_com_error &e)
  324. {
  325. GetError(e);
  326. return FALSE;
  327. }
  328. }
  329. BOOL CGuiRecordSet::GetCollect(LPCTSTR lpField,long& lVal)
  330. {
  331. _variant_t vt;
  332. try
  333. {
  334. vt = m_rs->Fields->GetItem(lpField)->Value;
  335. if (vt.vt==VT_I4)
  336. {
  337. lVal=vt.lVal;
  338. return TRUE;
  339. }else return FALSE;
  340. }catch(_com_error &e)
  341. {
  342. GetError(e);
  343. return FALSE;
  344. }
  345. }
  346. BOOL CGuiRecordSet::GetCollect(LPCTSTR lpField,double& dbVal)
  347. {
  348. _variant_t vt;
  349. try
  350. {
  351. vt = m_rs->Fields->GetItem(lpField)->Value;
  352. if (vt.vt==VT_R8)
  353. {
  354. dbVal=vt.dblVal;
  355. return TRUE;
  356. }else return FALSE;
  357. }catch(_com_error &e)
  358. {
  359. GetError(e);
  360. return FALSE;
  361. }
  362. }
  363. BOOL CGuiRecordSet::GetCollect(LPCTSTR lpField,CString& strValue)
  364. {
  365. _variant_t vt;
  366. try
  367. {
  368. vt = m_rs->Fields->GetItem(lpField)->Value;
  369. if (vt.vt==VT_BSTR)
  370. {
  371. strValue=vt.bstrVal;
  372. return TRUE;
  373. }else return FALSE;
  374. }catch(_com_error &e)
  375. {
  376. GetError(e);
  377. return FALSE;
  378. }
  379. }
  380. BOOL CGuiRecordSet::GetCollect(LPCTSTR lpField,COleCurrency& cyVal)
  381. {
  382. _variant_t vt;
  383. vt = m_rs->Fields->GetItem(lpField)->Value;
  384. try
  385. {
  386. if (vt.vt==VT_CY)
  387. {
  388. cyVal.m_cur=vt.cyVal;
  389. return TRUE;
  390. }else return FALSE;
  391. }catch(_com_error &e)
  392. {
  393. GetError(e);
  394. return FALSE;
  395. }
  396. }
  397. BOOL CGuiRecordSet::GetCollect(LPCTSTR lpField,COleDateTime& dtVal)
  398. {
  399. _variant_t vt;
  400. try
  401. {
  402. vt = m_rs->Fields->GetItem(lpField)->Value;
  403. if (vt.vt==VT_DATE)
  404. {
  405. dtVal=vt.date;
  406. return TRUE;
  407. }else return FALSE;
  408. }catch(_com_error &e)
  409. {
  410. GetError(e);
  411. return FALSE;
  412. }
  413. }
  414. BOOL CGuiRecordSet::GetCollect(LPCTSTR lpField,float& flVal)
  415. {
  416. _variant_t vt;
  417. try
  418. {
  419. vt = m_rs->Fields->GetItem(lpField)->Value;
  420. if (vt.vt==VT_R4)
  421. {
  422. flVal=vt.fltVal;
  423. return TRUE;
  424. }else return FALSE;
  425. }catch(_com_error &e)
  426. {
  427. GetError(e);
  428. return FALSE;
  429. }
  430. }
  431. BOOL CGuiRecordSet::GetCollect(LPCTSTR lpField,_variant_t& vt)
  432. {
  433. try
  434. {
  435. vt = m_rs->Fields->GetItem(lpField)->Value;
  436. return TRUE;
  437. }
  438. catch(_com_error& e)
  439. {
  440. GetError(e);
  441. return FALSE;
  442. }
  443. }
  444. BOOL CGuiRecordSet::GetCollect(int nIndex,int& nValue)
  445. {
  446. _variant_t vt;
  447. _variant_t vtn;
  448. vtn.vt = VT_I2;
  449. try
  450. {
  451. vtn.iVal = nIndex;
  452. vt = m_rs->Fields->GetItem(vtn)->Value;
  453. if (vt.vt==VT_I2)
  454. {
  455. nValue=vt.intVal;
  456. return TRUE;
  457. }else return FALSE;
  458. }catch(_com_error &e)
  459. {
  460. GetError(e);
  461. return FALSE;
  462. }
  463. }
  464. BOOL CGuiRecordSet::GetCollect(int nIndex,long& lVal)
  465. {
  466. _variant_t vt;
  467. _variant_t vtn;
  468. vtn.vt = VT_I2;
  469. try
  470. {
  471. vtn.iVal = nIndex;
  472. vt = m_rs->Fields->GetItem(vtn)->Value;
  473. if (vt.vt==VT_I4)
  474. {
  475. lVal=vt.lVal;
  476. return TRUE;
  477. }else return FALSE;
  478. }catch(_com_error &e)
  479. {
  480. GetError(e);
  481. return FALSE;
  482. }
  483. }
  484. BOOL CGuiRecordSet::GetCollect(int nIndex,double& dbVal)
  485. {
  486. _variant_t vt;
  487. _variant_t vtn;
  488. vtn.vt = VT_I2;
  489. try
  490. {
  491. vtn.iVal = nIndex;
  492. vt = m_rs->Fields->GetItem(vtn)->Value;
  493. if (vt.vt==VT_R8)
  494. {
  495. dbVal=vt.dblVal;
  496. return TRUE;
  497. }else return FALSE;
  498. }catch(_com_error &e)
  499. {
  500. GetError(e);
  501. return FALSE;
  502. }
  503. }
  504. BOOL CGuiRecordSet::GetCollect(int nIndex,CString& strValue)
  505. {
  506. _variant_t vt;
  507. _variant_t vtn;
  508. vtn.vt = VT_I2;
  509. try
  510. {
  511. vtn.iVal = nIndex;
  512. vt = m_rs->Fields->GetItem(vtn)->Value;
  513. if (vt.vt==VT_BSTR)
  514. {
  515. strValue=vt.bstrVal;
  516. return TRUE;
  517. }else return FALSE;
  518. }catch(_com_error &e)
  519. {
  520. GetError(e);
  521. return FALSE;
  522. }
  523. }
  524. BOOL CGuiRecordSet::GetCollect(int nIndex,COleCurrency& cyVal)
  525. {
  526. _variant_t vt;
  527. _variant_t vtn;
  528. vtn.vt = VT_CY;
  529. try
  530. {
  531. vtn.iVal =nIndex;
  532. vt = m_rs->Fields->GetItem(vtn)->Value;
  533. if (vt.vt==VT_CY)
  534. {
  535. cyVal.m_cur=vt.cyVal;
  536. return TRUE;
  537. }else return FALSE;
  538. }catch(_com_error &e)
  539. {
  540. GetError(e);
  541. return FALSE;
  542. }
  543. }
  544. BOOL CGuiRecordSet::GetCollect(int nIndex,COleDateTime& dtVal)
  545. {
  546. _variant_t vt;
  547. _variant_t vtn;
  548. vtn.vt = VT_I2;
  549. try
  550. {
  551. vtn.iVal = nIndex;
  552. vt = m_rs->Fields->GetItem(vtn)->Value;
  553. if (vt.vt==VT_DATE)
  554. {
  555. dtVal=vt.date;
  556. return TRUE;
  557. }else return FALSE;
  558. }catch(_com_error &e)
  559. {
  560. GetError(e);
  561. return FALSE;
  562. }
  563. }
  564. BOOL CGuiRecordSet::GetFormatDate(LPCTSTR lpField,CString& m_szDate, CString Format)
  565. {
  566. COleDateTime time;
  567. if (!GetCollect(lpField,time)) return FALSE;
  568. CTime ct(time.GetYear(),time.GetMonth(),time.GetDay(),time.GetHour(),time.GetMinute(),time.GetSecond()); 
  569. m_szDate =ct.Format(Format);
  570. return TRUE;
  571. }
  572. BOOL CGuiRecordSet::GetFormatDate(int nIndex,CString& m_szDate, CString Format)
  573. {
  574. COleDateTime time;
  575. if (!GetCollect(nIndex,time)) return FALSE;
  576. CTime ct(time.GetYear(),time.GetMonth(),time.GetDay(),time.GetHour(),time.GetMinute(),time.GetSecond()); 
  577. m_szDate =ct.Format(Format);
  578. return TRUE;
  579. }
  580. BOOL CGuiRecordSet::GetCollect(int nIndex,float& flVal)
  581. {
  582. _variant_t vt;
  583. _variant_t vtn;
  584. vtn.vt = VT_I2;
  585. try
  586. {
  587. vtn.iVal = nIndex;
  588. vt = m_rs->Fields->GetItem(vtn)->Value;
  589. if (vt.vt==VT_R4)
  590. {
  591. flVal=vt.fltVal;
  592. return TRUE;
  593. }else return FALSE;
  594. }catch(_com_error &e)
  595. {
  596. GetError(e);
  597. return FALSE;
  598. }
  599. }
  600. BOOL CGuiRecordSet::GetCollect(int nIndex,_variant_t& vt)
  601. {
  602. _variant_t vtn;
  603. vtn.vt = VT_I2;
  604. try
  605. {
  606. vtn.iVal = nIndex;
  607. vt = m_rs->Fields->GetItem(vtn)->Value;
  608. return TRUE;
  609. }
  610. catch(_com_error& e)
  611. {
  612. GetError(e);
  613. return FALSE;
  614. }
  615. }
  616. BOOL CGuiRecordSet::SetFilter(LPCTSTR lpFilter)
  617. {
  618. if (!IsOpen()) return FALSE;
  619. try
  620. {
  621. m_rs->PutFilter(lpFilter);
  622. return TRUE;
  623. }
  624. catch(_com_error &e)
  625. {
  626. GetError(e);
  627. return FALSE;
  628. }
  629. }
  630. BOOL CGuiRecordSet::SetSort(LPCTSTR lpSort)
  631. {
  632. if (!IsOpen()) return FALSE;
  633. try
  634. {
  635. m_rs->PutSort(lpSort);
  636. return TRUE;
  637. }
  638. catch(_com_error &e)
  639. {
  640. GetError(e);
  641. return FALSE;
  642. }
  643. }
  644. BOOL CGuiRecordSet::IsOpen()
  645. {
  646. if(m_rs)
  647. return m_rs-> GetState() != adStateClosed;
  648. return FALSE;
  649. }
  650. void CGuiRecordSet::Close()
  651. {
  652. if(IsOpen())
  653. m_rs->Close();
  654. }
  655. void CGuiRecordSet::MoveFirst()
  656. {
  657. m_rs->MoveFirst();
  658. }
  659. void CGuiRecordSet::MoveLast()
  660. {
  661. m_rs->MoveLast();
  662. }
  663. void CGuiRecordSet::MoveNext()
  664. {
  665. m_rs->MoveNext();
  666. }
  667. void CGuiRecordSet::MovePrevious()
  668. {
  669. m_rs->MovePrevious();
  670. }
  671. void CGuiRecordSet::Cancel()
  672. {
  673.    m_rs->Cancel();
  674. }
  675. void CGuiRecordSet::CancelUpdate()
  676. {
  677.   m_rs->CancelUpdate();
  678. }
  679. BOOL CGuiRecordSet::Delete()
  680. {
  681. try{
  682. if(m_rs->Delete(adAffectCurrent)== S_OK)
  683. if(m_rs->Update() ==S_OK)
  684. return TRUE;
  685. }catch(_com_error &e)
  686. {
  687. GetError(e);
  688. return FALSE;
  689. }
  690. return FALSE;
  691. }
  692. BOOL CGuiRecordSet::IsEof()
  693. {
  694. return (BOOL)m_rs->EndOfFile;
  695. }
  696. BOOL CGuiRecordSet::IsBof()
  697. {
  698. return (BOOL)m_rs->BOF;
  699. }
  700. BOOL CGuiRecordSet::Supports( CursorOptionEnum CursorOptions )  {   return (BOOL)m_rs->Supports(CursorOptions); }
  701. void CGuiRecordSet::CancelBatch(AffectEnum AffectRecords) {   m_rs->CancelBatch(AffectRecords); } CGuiField CGuiRecordSet::GetField(LPCTSTR lpField)
  702. {
  703. FieldPtr pField = m_rs->Fields->GetItem(lpField);
  704. CGuiField Field;
  705. Field.Attach(pField);
  706. return Field;
  707. }
  708. CGuiField CGuiRecordSet::GetField(int Index) { _variant_t vtIndex;
  709. vtIndex.vt = VT_I2;
  710. vtIndex.iVal = Index;
  711. FieldPtr pField = m_rs->Fields->GetItem(vtIndex); CGuiField Field;
  712. Field.Attach(pField);
  713. 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;  }
  714. //***********************************************************************************************************
  715. CGuiField::CGuiField(void)
  716. {
  717. }
  718. CGuiField::~CGuiField(void)
  719. {
  720. }
  721. BOOL CGuiField::SetValue(long lVal)
  722. {
  723. _variant_t vt;
  724. vt.lVal=lVal;
  725. vt.vt=VT_I4;
  726. try
  727. {
  728. field->Value=vt;
  729. return TRUE;
  730. }catch(_com_error &e)
  731. {
  732. GetError(e);
  733. return FALSE;
  734. }
  735. }
  736. BOOL CGuiField::SetValue(float flVal)
  737. {
  738. _variant_t vt;
  739. vt.fltVal=flVal;
  740. vt.vt=VT_R4;
  741. try
  742. {
  743. field->Value=vt;
  744. return TRUE;
  745. }catch(_com_error &e)
  746. {
  747. GetError(e);
  748. return FALSE;
  749. }
  750. }
  751. BOOL CGuiField::SetValue(int nVal)
  752. {
  753. _variant_t vt;
  754. vt.intVal=nVal;
  755. vt.vt=VT_I2;
  756. try
  757. {
  758. field->Value=vt;
  759. return TRUE;
  760. }catch(_com_error &e)
  761. {
  762. GetError(e);
  763. return FALSE;
  764. }
  765. }
  766. BOOL CGuiField::SetValue(double dbVal)
  767. {
  768. _variant_t vt;
  769. vt.dblVal=dbVal;
  770. vt.vt=VT_R8;
  771. try
  772. {
  773. field->Value=vt;
  774. return TRUE;
  775. }catch(_com_error &e)
  776. {
  777. GetError(e);
  778. return FALSE;
  779. }
  780. }
  781. BOOL CGuiField::SetValue(CString szCad)
  782. {
  783. _variant_t vt;
  784. if(!szCad.IsEmpty())
  785. {
  786. vt.vt = VT_BSTR;
  787. vt.bstrVal = szCad.AllocSysString();
  788. }
  789. try
  790. {
  791. field->Value=vt;
  792. return TRUE;
  793. }catch(_com_error &e)
  794. {
  795. GetError(e);
  796. return FALSE;
  797. }
  798. }
  799. BOOL CGuiField::SetValue(bool blVal)
  800. {
  801. _variant_t vt;
  802. vt.boolVal=blVal;
  803. vt.vt=VT_BOOL;
  804. try
  805. {
  806. field->Value=vt;
  807. return TRUE;
  808. }catch(_com_error &e)
  809. {
  810. GetError(e);
  811. return FALSE;
  812. }
  813. }
  814. BOOL CGuiField::SetValue(COleDateTime dtVal)
  815. {
  816. _variant_t vt;
  817. vt.date=dtVal;
  818. vt.vt=VT_DATE;
  819. try
  820. {
  821. field->Value=vt;
  822. return TRUE;
  823. }catch(_com_error &e)
  824. {
  825. GetError(e);
  826. return FALSE;
  827. }
  828. }
  829. BOOL CGuiField::SetValue(_variant_t vt)
  830. {
  831. try
  832. {
  833. field->Value=vt;
  834. return TRUE;
  835. }catch(_com_error &e)
  836. {
  837. GetError(e);
  838. return FALSE;
  839. }
  840. }
  841. BOOL CGuiField::GetValue(int& nVal)
  842. {
  843. _variant_t vt;
  844. vt = field->Value;
  845. try
  846. {
  847. if (vt.vt==VT_I2)
  848. {
  849. nVal=vt.intVal;
  850. return TRUE;
  851. }else if (vt.vt==VT_BOOL)
  852. {
  853. nVal=vt.boolVal;
  854. return TRUE;
  855. }else return FALSE;
  856. }catch(_com_error &e)
  857. {
  858. GetError(e);
  859. return FALSE;
  860. }
  861. }
  862. BOOL CGuiField::GetValue(long& lVal)
  863. {
  864. _variant_t vt;
  865. vt = field->Value;
  866. try
  867. {
  868. if (vt.vt==VT_I4)
  869. {
  870. lVal=vt.lVal;
  871. return TRUE;
  872. }else return FALSE;
  873. }catch(_com_error &e)
  874. {
  875. GetError(e);
  876. return FALSE;
  877. }
  878. }
  879. BOOL CGuiField::GetValue(double& dbVal)
  880. {
  881. _variant_t vt;
  882. vt = field->Value;
  883. try
  884. {
  885. if (vt.vt==VT_R8)
  886. {
  887. dbVal=vt.dblVal;
  888. return TRUE;
  889. }else return FALSE;
  890. }catch(_com_error &e)
  891. {
  892. GetError(e);
  893. return FALSE;
  894. }
  895. }
  896. BOOL CGuiField::GetValue(CString& strValue)
  897. {
  898. _variant_t vt;
  899. vt =field->Value;
  900. try
  901. {
  902. if (vt.vt==VT_BSTR)
  903. {
  904. strValue=vt.bstrVal;
  905. return TRUE;
  906. }else return FALSE;
  907. }catch(_com_error &e)
  908. {
  909. GetError(e);
  910. return FALSE;
  911. }
  912. }
  913. BOOL CGuiField::GetValue(COleDateTime& dtVal)
  914. {
  915. _variant_t vt;
  916. vt = field->Value;
  917. try
  918. {
  919. if (vt.vt==VT_DATE)
  920. {
  921. dtVal=vt.date;
  922. return TRUE;
  923. }else return FALSE;
  924. }catch(_com_error &e)
  925. {
  926. GetError(e);
  927. return FALSE;
  928. }
  929. }
  930. BOOL CGuiField::GetValue(float& flVal)
  931. {
  932. _variant_t vt;
  933. vt = field->Value;
  934. try
  935. {
  936. if (vt.vt==VT_R4)
  937. {
  938. flVal=vt.fltVal;
  939. return TRUE;
  940. }else return FALSE;
  941. }catch(_com_error &e)
  942. {
  943. GetError(e);
  944. return FALSE;
  945. }
  946. }
  947. BOOL CGuiField::GetValue(_variant_t& vt)
  948. {
  949. try
  950. {
  951. _variant_t 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. }