DBManager.cpp

 
  1. // SaioSqlce.cpp: implementation of the CDBManage class.
  2. //
  3. //
  4. #ifndef SAIOSQLCE_DLL_FILE
  5. #define SAIOSQLCE_DLL_FILE
  6. #endif
  7. #include "stdafx.h"
  8. #include "SAIOSQLCEDBManage.h"
  9. #include "SaioSqlce.h"
  10. #ifdef _DEBUG
  11. #undef THIS_FILE
  12. static char THIS_FILE[]=__FILE__;
  13. #define new DEBUG_NEW
  14. #endif
  15. //本机数据库文件
  16. #define CUP_DB_FILE         _T("//Saio//User Programs//WIC//WICDB.sdf")
  17. #define CUP_DB_TEMP         _T("//Saio//User Programs//WIC//WICDB.sd2")
  18. //
  19. // Construction/Destruction
  20. //
  21. CDBManage::CDBManage()
  22. {
  23. }
  24. CDBManage::~CDBManage()
  25. {
  26. }
  27. //打开数据库
  28. BOOL CDBManage::OpenDB()
  29. {
  30.     InitConnectvariable(_T("//Saio//User Programs//WIC//WICDB.sdf"));
  31.     
  32.     return OpenConnection();
  33. }
  34. //关闭数据库
  35. BOOL CDBManage::CloseDB()
  36. {
  37.     BOOL bRet = TRUE;
  38.     bRet = CloseRecordset();
  39.     bRet &= CloseConnection();
  40.     
  41.     return bRet;
  42. }
  43. //收缩数据库
  44. BOOL CDBManage::ShrinkDB() //需要修改
  45. {
  46.     CloseDB();
  47.     
  48.     TCHAR szDbPwd[] = _T("");  //如果有密码需要填入
  49.     BOOL bRet = TRUE, bDelRet=FALSE;
  50.     DWORD       dwErr = 0;
  51.     HRESULT     hr = NOERROR;
  52.     DBPROPSET   dbpropset[2];
  53.     DBPROP      dbprop[2];
  54.     
  55.     IDBProperties       *pIDBProperties = NULL;
  56.     IDBCreateSession    *pIDBCreateSession = NULL;
  57.     ISSCECompact        *pISSCECompact  = NULL;
  58.     IDBSchemaRowset     *pIDBSchemaRowset = NULL;
  59.     VariantInit(&dbprop[0].vValue);
  60.     
  61.     hr = CoCreateInstance(CLSID_SQLSERVERCE_2_0, 0, CLSCTX_INPROC_SERVER, IID_IDBProperties, (void**) &pIDBProperties);
  62.     if(FAILED(hr))
  63.     {
  64.         dwErr = GetLastError();
  65.         bRet = FALSE;
  66.         goto Exit;
  67.     }
  68.         
  69.     dbprop[0].dwPropertyID = DBPROP_INIT_DATASOURCE;
  70.     dbprop[0].dwOptions = DBPROPOPTIONS_REQUIRED;
  71.     dbprop[0].vValue.vt = VT_BSTR;
  72.     dbprop[0].vValue.bstrVal = SysAllocString(CUP_DB_FILE);
  73.     if(NULL == dbprop[0].vValue.bstrVal)
  74.     {
  75.         hr = E_OUTOFMEMORY;
  76.         dwErr = GetLastError();
  77.         bRet = FALSE;
  78.         goto Exit;
  79.     }
  80.     dbprop[1].dwPropertyID = DBPROP_SSCE_DBPASSWORD;
  81.     dbprop[1].dwOptions = DBPROPOPTIONS_REQUIRED;
  82.     dbprop[1].vValue.vt = VT_BSTR;
  83.     dbprop[1].vValue.bstrVal = SysAllocString(szDbPwd);
  84.         
  85.     dbpropset[0].guidPropertySet = DBPROPSET_DBINIT;
  86.     dbpropset[0].rgProperties = dbprop;
  87.     dbpropset[0].cProperties = 1;
  88.     ;
  89.     dbpropset[1].guidPropertySet = DBPROPSET_SSCE_DBINIT;
  90.     dbpropset[1].rgProperties = &dbprop[1];
  91.     dbpropset[1].cProperties = 1;
  92.     
  93.     hr = pIDBProperties->SetProperties(2, dbpropset);
  94.     if(FAILED(hr))
  95.     {
  96.         dwErr = GetLastError();
  97.         bRet = FALSE;
  98.         goto Exit;
  99.     }
  100.         
  101.     hr = pIDBProperties->QueryInterface(IID_ISSCECompact, (void **) &pISSCECompact);
  102.     if(FAILED(hr))  
  103.     {
  104.         dwErr = GetLastError();
  105.         bRet = FALSE;
  106.         goto Exit;
  107.     }
  108.     
  109.     bDelRet = DeleteFile(CUP_DB_TEMP);
  110.     
  111.     SysFreeString(dbprop[0].vValue.bstrVal);
  112.     dbprop[0].vValue.bstrVal = SysAllocString(CUP_DB_TEMP);
  113.     if(NULL == dbprop[0].vValue.bstrVal)
  114.     {
  115.         hr = E_OUTOFMEMORY;
  116.         dwErr = GetLastError();
  117.         bRet = FALSE;
  118.         goto Exit;
  119.     }
  120.     
  121.     hr = pISSCECompact->Compact(1, dbpropset);
  122.     if(FAILED(hr))
  123.     {
  124.         dwErr = GetLastError();
  125.         bRet = FALSE;
  126.         goto Exit;
  127.     }
  128.     bDelRet = CopyFile(CUP_DB_TEMP, CUP_DB_FILE, FALSE);
  129.     if(bDelRet)
  130.     {
  131.         bDelRet = DeleteFile(CUP_DB_TEMP);
  132.     }
  133.         
  134. Exit:
  135.         
  136.     VariantClear(&dbprop[0].vValue);
  137.         
  138.     if(NULL != pISSCECompact)
  139.     {
  140.         pISSCECompact->Release();
  141.     }
  142.     if(NULL != pIDBSchemaRowset)
  143.     {
  144.         pIDBSchemaRowset->Release();
  145.     }
  146.     if(NULL != pIDBCreateSession)
  147.     {
  148.         pIDBCreateSession->Release();
  149.     }
  150.     if(NULL != pIDBProperties)
  151.     {
  152.         pIDBProperties->Release();
  153.     }
  154.     return bRet;
  155. }
  156. //初始化系统数据库
  157. BOOL CDBManage::InitDB()
  158. {
  159.     BOOL bRet = TRUE;
  160.     //关闭记录
  161.     CloseRecordset();
  162.     //用户表
  163.     bRet &= InitUserTable();
  164.     //参数表
  165.     bRet &= InitParamTable();
  166.     //APL表
  167.     bRet &= InitAPLTable();   
  168.     
  169.     //价格表
  170.     bRet &= InitPriceTable();   
  171.     
  172.     //传输表
  173.     bRet &= InitTransTable();
  174.     //更新表
  175.     bRet &= InitUpdateTable();
  176.     return bRet;
  177. }
  178. //初始化用户表
  179. BOOL CDBManage::InitUserTable()//ok
  180. {
  181.     BOOL bRet = TRUE;
  182.     
  183.     //删除用户表
  184.     CString csSql = _T("DROP Table UserTb");
  185.     ExecuteSQL(csSql);
  186.     
  187.     //新建用户表
  188.     csSql = _T("CREATE TABLE UserTb(uid nvarchar(6) PRIMARY KEY, pwd nvarchar(6) NOT NULL, privilege nchar(1) NOT NULL);");
  189.     bRet &= ExecuteSQL(csSql);
  190.     
  191. //  CString csPwd = CMd5::Encrypt(_T("1234"));
  192. //  csSql.Format(_T("INSERT INTO UserTb(uid, pwd, privilege) VALUES('1234', '%s', '1');"), csPwd);
  193. //如果需要加密采取以上的方法(:~
  194.     //添加普通用户 Cashier (1234/1234/1)
  195.     csSql = _T("INSERT INTO UserTb(uid, pwd, privilege) VALUES('1234', '1234', '1');");
  196.     bRet &= ExecuteSQL(csSql);
  197. //  csPwd = CMd5::Encrypt(_T("123456"));
  198. //  csSql.Format(_T("INSERT INTO UserTb(uid, pwd, privilege) VALUES(123456, '%s', 2);"), csPwd);
  199. //如果需要加密采取以上的方法(:~
  200.     //添加主管操作员 Admin (123456/123456/2)
  201.     csSql = _T("INSERT INTO UserTb(uid, pwd, privilege) VALUES('123456', '123456', '2');");
  202.     bRet &= ExecuteSQL(csSql);
  203.     return bRet;
  204. }
  205. BOOL CDBManage::InitParamTable()//ok
  206. {
  207.     BOOL bRet = TRUE;
  208.     
  209.     //删除Param表
  210.     CString csSql = _T("DROP Table ParamTb");
  211.     ExecuteSQL(csSql);
  212.     
  213.     //新建APL表
  214.     csSql = _T("CREATE TABLE ParamTb (pid smallint PRIMARY KEY, pname nvarchar(30), pvalue nvarchar(40));");
  215.     bRet &= ExecuteSQL(csSql);
  216.     
  217.     return bRet;
  218. }
  219. BOOL CDBManage::InitAPLTable()//ok
  220. {
  221.     BOOL bRet = TRUE;
  222.     
  223.     //删除APL表
  224.     CString csSql = _T("DROP Table APLTb");
  225.     ExecuteSQL(csSql);
  226.     
  227.     //新建APL表
  228.     csSql = _T("CREATE TABLE APLTb(upc nvarchar(17) PRIMARY KEY, description nvarchar(50), category nchar(2), subcategory nchar(3), punit nvarchar(10), maxprice nchar(6), ptype nchar(2));");
  229.     bRet &= ExecuteSQL(csSql);
  230.     //--------------------------临时插入测试数据 jacky 2008-10-18-----------
  231.     csSql = _T("INSERT INTO APLTb VALUES('TestUPC1', 'JustForTest1', '1', '1-1', 'Unit1', '40.25', '1');");
  232.     bRet &= ExecuteSQL(csSql);
  233.     
  234.     csSql = _T("INSERT INTO APLTb VALUES('TestUPC2', 'JustForTest2', '2', '2-1', 'Unit2', '2.01', '2');");
  235.     bRet &= ExecuteSQL(csSql);
  236.     
  237.     csSql = _T("INSERT INTO APLTb VALUES('TestUPC3', 'JustForTest3', '3', '3-1', 'Unit3','1.2', '1');");
  238.     bRet &= ExecuteSQL(csSql);
  239.     //---------------------------End 插入测试数据--------------------------
  240.     
  241.     return bRet;
  242. }
  243. BOOL CDBManage::InitPriceTable()//ok
  244. {
  245.     BOOL bRet = TRUE;
  246.     
  247.     //删除Price表
  248.     CString csSql = _T("DROP Table PriceTb");
  249.     ExecuteSQL(csSql);
  250.     
  251.     //新建Price表
  252.     csSql = _T("CREATE TABLE PriceTb (upc nchar(17) PRIMARY KEY, price nchar(6));");
  253.     bRet &= ExecuteSQL(csSql);
  254.     //--------------------------临时插入测试数据 jacky 2008-10-18-----------
  255.     //MessageBox(NULL, _T("Init PriceTb Data"), _T("OpenRecordset"), MB_OK);
  256.     csSql = _T("INSERT INTO PriceTb VALUES('a1b2c3d4', '12.34');");
  257.     bRet &= ExecuteSQL(csSql);
  258.     csSql = _T("INSERT INTO PriceTb VALUES('TestUPC1', '34.45');");
  259.     bRet &= ExecuteSQL(csSql);
  260.     csSql = _T("INSERT INTO PriceTb VALUES('TestUPC2', '0.45');");
  261.     bRet &= ExecuteSQL(csSql);
  262.     //---------------------------End 插入测试数据--------------------------
  263.     return bRet;
  264. }
  265. BOOL CDBManage::InitTransTable()//ok
  266. {
  267.     BOOL bRet = TRUE;
  268.     
  269.     //删除Trans表
  270.     CString csSql = _T("DROP Table TransTb");
  271.     ExecuteSQL(csSql);
  272.     
  273.     //新建Trans表
  274.     csSql = _T("CREATE TABLE TransTb (traceid nchar(6) PRIMARY KEY, msgtype nchar(4), amount nchar(12), uid nchar(4), transdate nchar(6), transtime nchar(6), aiicode nvarchar(12));");
  275.     bRet &= ExecuteSQL(csSql);
  276.     
  277.     //--------------------------临时插入测试数据 jacky 2008-10-18-----------
  278.     csSql = _T("INSERT INTO TransTb VALUES('001', '1', '10', '1234', '081018', '143302', '0810181433');");
  279.     bRet &= ExecuteSQL(csSql);
  280.     
  281.     csSql = _T("INSERT INTO TransTb VALUES('002', '2', '20', '1234', '061018', '143366', '0610181433');");
  282.     bRet &= ExecuteSQL(csSql);
  283.     csSql = _T("INSERT INTO TransTb VALUES('003', '3', '30', '1234', '081018', '143100', '0810181431');");
  284.     bRet &= ExecuteSQL(csSql);
  285. //  //---------------------------End 插入测试数据--------------------------
  286.     return bRet;
  287. }
  288. BOOL CDBManage::InitUpdateTable()//ok
  289. {
  290.     BOOL bRet = TRUE;
  291.     
  292.     //删除Update表
  293.     CString csSql = _T("DROP Table UpdateTb");
  294.     ExecuteSQL(csSql);
  295.     
  296.     //新建Update表
  297.     csSql = _T("CREATE TABLE UpdateTb (tid nchar(2) PRIMARY KEY, tname nvarchar(20), lupdate nchar(6), luptime nchar(6));");
  298.     bRet &= ExecuteSQL(csSql);
  299.     
  300.     return bRet;
  301. }
  302. BOOL CDBManage::AnalyzeBalance(BIItem biInput, Balance *balOutput)
  303. {
  304.     // 1 根据byCategory bySubCategory 
  305.     // 2 ==>获得 upc
  306.     // 3 ==> 让后查询APLTb,获取相关信息
  307.     CString csSQL;
  308.     WCHAR wcCategory[2];
  309.     WCHAR wcSubCategory[3];
  310.     VARIANT  varUPC;
  311.     VARIANT  varUnit;
  312.     VARIANT  varDescription;
  313.     VariantInit (&varUPC);
  314.     VariantInit (&varUnit);
  315.     VariantInit (&varDescription);
  316.     
  317.     BOOL bRet = TRUE;
  318.     DWORD dwNum;
  319.     char TempArray[50];
  320.     if (balOutput == NULL)
  321.         return FALSE;
  322.     memcpy (TempArray, biInput.byCategory, sizeof(biInput.byCategory));
  323.     dwNum = MultiByteToWideChar (CP_ACP, 0, TempArray, -1, NULL, 0);
  324.     MultiByteToWideChar (CP_ACP, 0, TempArray, -1, wcCategory, dwNum);
  325.     memcpy (TempArray, biInput.bySubCategory, sizeof(biInput.bySubCategory));
  326.     dwNum = MultiByteToWideChar (CP_ACP, 0, TempArray, -1, NULL, 0);
  327.     MultiByteToWideChar (CP_ACP, 0, TempArray, -1, wcSubCategory, dwNum);
  328.     csSQL.Format(_T("SELECT * FROM APLTb WHERE category='%s' AND subcategory ='%s';"), wcCategory, wcSubCategory);
  329.     MessageBox(NULL, csSQL, _T("OpenRecordset"), MB_OK);
  330. //  bRet &= ExecuteSQL(csSQL);
  331.     bRet &= OpenRecordset(csSQL);
  332.     if(GetRecordCount(csSQL) == 0)//无法匹配
  333.     {
  334.         return (bRet &= FALSE);
  335.     }
  336.     else
  337.     {
  338.         MoveFirst();
  339.         varUPC = GetCollect(_T("upc"));
  340.         dwNum = WideCharToMultiByte (CP_OEMCP, NULL, varUPC.bstrVal, -1, NULL, 0, NULL, FALSE); 
  341.         WideCharToMultiByte (CP_OEMCP, NULL, varUPC.bstrVal, -1, TempArray, dwNum, NULL, FALSE);
  342.         //strcpy(balOutput->szItemUPC, "hello");
  343.         //Errorr ????  Jacky 2008-10-11
  344.         //memcpy (balOutput->szItemUPC, "1234", 4);
  345.         memcpy (balOutput->szItemUPC, TempArray, dwNum);
  346. //      for ( int iUPC = 0; iUPC < (int)dwNum ; iUPC++)
  347. //      {
  348. //          balOutput->szItemUPC[iUPC] = TempArray[iUPC];
  349. //      }s
  350.         MessageBox(NULL, varUPC.bstrVal, _T("OpenRecordset"), MB_OK);
  351.         
  352.         varUnit = GetCollect(_T("punit"));
  353.         dwNum = WideCharToMultiByte (CP_OEMCP, NULL, varUnit.bstrVal, -1, NULL, 0, NULL, FALSE); 
  354.         WideCharToMultiByte (CP_OEMCP, NULL, varUnit.bstrVal, -1, TempArray, dwNum, NULL, FALSE);
  355.         //memcpy (balOutput->szUnit, TempArray, dwNum);
  356.         //strncpy(balOutput->szUnit, TempArray, dwNum);
  357.         MessageBox(NULL, varUnit.bstrVal, _T("OpenRecordset"), MB_OK);
  358.         
  359.         varDescription = GetCollect(_T("description"));
  360.         dwNum = WideCharToMultiByte (CP_OEMCP, NULL, varDescription.bstrVal, -1, NULL, 0, NULL, FALSE); 
  361.         WideCharToMultiByte (CP_OEMCP, NULL, varDescription.bstrVal, -1, TempArray, dwNum, NULL, FALSE);
  362.         //memcpy (balOutput->szItemDesc, TempArray, dwNum);
  363.         //strncpy(balOutput->szItemDesc, TempArray, dwNum);
  364.         MessageBox(NULL, varDescription.bstrVal, _T("OpenRecordset"), MB_OK);
  365.          
  366. //      for (int i = 0; i < sizeof(biInput.byBenefitQuantity); i++)
  367. //      {
  368. //          balOutput->szBenefitQuantity[i] = biInput.byBenefitQuantity[i];
  369. //      }
  370.         //memcpy (balOutput->szBenefitQuantity, biInput.byBenefitQuantity, sizeof(balOutput->szBenefitQuantity));
  371.     }
  372.     return bRet;
  373. }
  374. BOOL CDBManage::GetItemFromUPC(CString csUPC, ItemList *ilOutput)
  375. {
  376.     CString csSql;
  377.     BOOL bRet = TRUE;
  378.     if (csUPC.GetLength() >= 17) //UPC长度过长
  379.     {
  380.         return FALSE;
  381.     }
  382.     csSql.Format(_T("SELECT * FROM APLTb,PriceTb WHERE APLTB.upc=PriceTb.upc AND APLTB.upc ='%s';"), csUPC);
  383.     bRet &= OpenRecordset(csSql);
  384.     if (GetRecordCount(csSql) == 0)
  385.     {
  386.         return FALSE;
  387.     }
  388.     else
  389.     {
  390.         //++ 添加向ItemList保存数据的过程 jacky 2008-10-20
  391.     }
  392.     return bRet;
  393. }
  394. BOOL CDBManage::GetItemFromCategory(CString csCategory, CString csSubcategory, Balance *balOutput, EndBalance *ebalOutput)
  395. {
  396.     BOOL bRet = TRUE;
  397.     return bRet;
  398. }
  399. BOOL CDBManage::SetItemPrice(CString csUpc,CString csPrice)  //测试完毕
  400. {
  401.     BOOL bRet = TRUE;
  402.     CString csSQL;
  403.     if ( (csUpc.GetLength()>17) || (csPrice.GetLength()>6) )//字符长度过长
  404.     {
  405.         return FALSE; 
  406.     }
  407.     
  408. //  if ()  //检查价格格式的合法性?? 如果有必要的话
  409. //  {
  410. //  }
  411.     //Update Field
  412.     csSQL.Format (_T("UPDATE PriceTb SET price='%s' WHERE upc='%s';"), csPrice, csUpc);
  413.     bRet &= ExecuteSQL(csSQL);
  414.     //Make sure that field is updated,Checkit
  415.     csSQL.Format (_T("SELECT * FROM PriceTb WHERE  upc='%s' AND price='%s';"), csUpc, csPrice);
  416.     if (GetRecordCount(csSQL) == 0)//The record doesn't exist
  417.     {
  418.         bRet &= FALSE;
  419.     }
  420.     return bRet;
  421. }
  422. BOOL CDBManage::CheckPwdData(CString csUid, CString csPwd)//测试完毕
  423. {
  424.     BOOL bRet = TRUE;
  425.     CString csSql;
  426.     if ( (csUid.GetLength()>6) || (csPwd.GetLength()>6) )//字符长度过长
  427.     {
  428.         return FALSE; 
  429.     }
  430.     csSql.Format (_T("SELECT uid FROM UserTb WHERE uid='%s'AND pwd='%s';"), csUid, csPwd);
  431.     //bRet &= ExecuteSQL(csSql);
  432.     if (GetRecordCount(csSql) == 0)//记录不存在
  433.     {
  434.         bRet &= FALSE;
  435.     }
  436.     return bRet;
  437. }
  438. BOOL CDBManage::CheckParamData(){BOOL bRet = TRUE;return bRet;}
  439. BOOL CDBManage::CheckCardData(){BOOL bRet = TRUE;return bRet;}
  440. BOOL CDBManage::CheckResponseCode(){BOOL bRet = TRUE;return bRet;}
  441. BOOL CDBManage::CheckUPC(){BOOL bRet = TRUE;return bRet;}
  442. BOOL CDBManage::CheckNSF(){BOOL bRet = TRUE;return bRet;}
  443. BOOL CDBManage::CheckAmountData(){BOOL bRet = TRUE;return bRet;}
  444. BOOL CDBManage::CheckCountData(){BOOL bRet = TRUE;return bRet;}
  445. BOOL CDBManage::GetLastTransData(LastTransaction *ltGet)
  446. {
  447.     VARIANT vTraceid;
  448.     VARIANT vMsgtype;
  449.     VARIANT vAmount;
  450.     VARIANT vUid;
  451.     VARIANT vTransdate;
  452.     VARIANT vTranstime;
  453.     VARIANT vAiicode;
  454.     VariantInit (&vTraceid);
  455.     VariantInit (&vMsgtype);
  456.     VariantInit (&vAmount);
  457.     VariantInit (&vUid);
  458.     VariantInit (&vTransdate);
  459.     VariantInit (&vTranstime);
  460.     VariantInit (&vAiicode);
  461.     BOOL bRet = TRUE;
  462.     char TempArray[20];  //将Unicode转换为ASCII
  463.     LONG lRcdSize;
  464.     CString csSql = _T("SELECT * FROM TransTb;");
  465.     DWORD dwNum;
  466.     if (ltGet == NULL)
  467.         return FALSE;
  468. //  bRet &= ExecuteSQL(csSql); 
  469. //  bRet &= MoveFirst();
  470. //  MessageBox(NULL, csSql, _T("OpenRecordset"), MB_OK);
  471.     bRet &= OpenRecordset(csSql);
  472.     if ((lRcdSize=GetRecordCount(csSql)) == 0)//如果当前数据记录为空
  473.     {
  474.         return  (bRet &= FALSE);
  475.     }
  476.     else
  477.     {
  478.         MoveFirst();
  479.         for (long i = 0; i < lRcdSize-1; i++)   
  480.         /*  while(!IsEOF())//移动到最后一条记录*/
  481.         {
  482.             MoveNext(); 
  483.         }
  484. //      vTranstime = GetCollect(_T("transtime"));
  485. //      MessageBox(NULL, vTranstime.bstrVal, _T("transtime"), MB_OK);
  486.         vTraceid = GetCollect (_T("traceid"));
  487.         dwNum = WideCharToMultiByte (CP_OEMCP, NULL, vTraceid.bstrVal, -1, NULL, 0, NULL, FALSE); //确定转换字节大小
  488.         WideCharToMultiByte (CP_OEMCP, NULL, vTraceid.bstrVal, -1, TempArray, dwNum, NULL, FALSE);
  489.         memcpy (ltGet->TraceNum, TempArray, dwNum);
  490.         vMsgtype = GetCollect(_T("msgtype"));
  491.         dwNum = WideCharToMultiByte (CP_OEMCP, NULL, vMsgtype.bstrVal, -1, NULL, 0, NULL, FALSE);
  492.         WideCharToMultiByte (CP_OEMCP, NULL, vMsgtype.bstrVal, -1, TempArray, dwNum, NULL, FALSE);
  493.         memcpy (ltGet->byMsgType, TempArray, dwNum);
  494.         vAmount = GetCollect(_T("amount"));
  495.         dwNum = WideCharToMultiByte (CP_OEMCP, NULL, vAmount.bstrVal, -1, NULL, 0, NULL, FALSE);
  496.         WideCharToMultiByte (CP_OEMCP, NULL, vAmount.bstrVal, -1, TempArray, dwNum, NULL, FALSE);
  497.         memcpy (ltGet->byTransAmount, TempArray, dwNum);
  498.         vUid = GetCollect(_T("uid"));
  499.         dwNum = WideCharToMultiByte (CP_OEMCP, NULL, vUid.bstrVal, -1, NULL, 0, NULL, FALSE);
  500.         WideCharToMultiByte (CP_OEMCP, NULL, vUid.bstrVal, -1, TempArray, dwNum, NULL, FALSE);
  501.         memcpy (ltGet->byCashierID, TempArray, dwNum);
  502.             
  503.         vTransdate = GetCollect(_T("transdate"));
  504.         dwNum = WideCharToMultiByte (CP_OEMCP, NULL, vTransdate.bstrVal, -1, NULL, 0, NULL, FALSE);
  505.         WideCharToMultiByte (CP_OEMCP, NULL, vTransdate.bstrVal, -1, TempArray, dwNum, NULL, FALSE);
  506.         memcpy (ltGet->byLocalTransDate, TempArray, dwNum);
  507.         vTranstime = GetCollect(_T("transtime"));
  508.         dwNum = WideCharToMultiByte (CP_OEMCP, NULL, vTranstime.bstrVal, -1, NULL, 0, NULL, FALSE);
  509.         WideCharToMultiByte (CP_OEMCP, NULL, vTranstime.bstrVal, -1, TempArray, dwNum, NULL, FALSE);
  510.         memcpy (ltGet->byLocalTransTime, TempArray, dwNum);
  511.         vAiicode = GetCollect(_T("aiicode"));
  512.         dwNum = WideCharToMultiByte (CP_OEMCP, NULL, vAiicode.bstrVal, -1, NULL, 0, NULL, FALSE);
  513.         WideCharToMultiByte (CP_OEMCP, NULL, vAiicode.bstrVal, -1, TempArray, dwNum, NULL, FALSE);
  514.         memcpy (ltGet->byAcquirerCode, TempArray, dwNum);
  515.     }
  516.     return bRet;
  517. }
  518. //LastTransaction ltExample={"004", "4", "40", "123", "08102", "11111", "08102011111"};
  519. //LastTransaction ltExample={"004", "4", "40", "1234", "081020", "111111", "081020111111"};
  520. BOOL CDBManage::SetLastTransData(LastTransaction ltSet)//OK,但是LastTransaction初始化并没有达到实际的大小
  521. {
  522.     WCHAR wcTraceNum[6]; 
  523.     WCHAR wcMsgType[4];
  524.     WCHAR wcTransAmount[12];
  525.     WCHAR wcCashierID[4];
  526.     WCHAR wcLTDate[6];
  527.     WCHAR wcLTTime[6];
  528.     WCHAR wcAcquirerCode[12];
  529.     
  530. //  CString strTraceNum     = ltSet.TraceNum;
  531. //  CString strMsgType      = ltSet.byMsgType;
  532. //  CString strTransAmount  = ltSet.byTransAmount;
  533. //  CString strCashierID    = ltSet.byCashierID;
  534. //  CString strLTDate       = ltSet.byLocalTransDate;
  535. //  CString strLTTime       = ltSet.byLocalTransTime;
  536. //  CString strAcquirerCode = ltSet.byAcquirerCode;
  537.     char TempArray[20];
  538.     BOOL bRet = TRUE;
  539.     CString csSQL;
  540.     DWORD dwNum ;
  541.     memcpy (TempArray, ltSet.TraceNum, sizeof(ltSet.TraceNum));
  542.     dwNum = MultiByteToWideChar (CP_ACP, 0, TempArray, -1, NULL, 0);
  543.     MultiByteToWideChar (CP_ACP, 0, TempArray, -1, wcTraceNum, dwNum);
  544.     memcpy (TempArray, ltSet.byMsgType, sizeof(ltSet.byMsgType));
  545.     dwNum = MultiByteToWideChar (CP_ACP, 0, TempArray, -1, NULL, 0);
  546.     MultiByteToWideChar (CP_ACP, 0, TempArray, -1, wcMsgType, dwNum);
  547.     memcpy (TempArray, ltSet.byTransAmount, sizeof(ltSet.byTransAmount));
  548.     dwNum = MultiByteToWideChar (CP_ACP, 0, TempArray, -1, NULL, 0);
  549.     MultiByteToWideChar (CP_ACP, 0, TempArray, -1, wcTransAmount, dwNum);
  550.     memcpy (TempArray, ltSet.byCashierID, sizeof(ltSet.byCashierID));
  551.     dwNum = MultiByteToWideChar (CP_ACP, 0, TempArray, -1, NULL, 0);
  552.     MultiByteToWideChar (CP_ACP, 0, TempArray, -1, wcCashierID, dwNum); 
  553.     memcpy (TempArray, ltSet.byLocalTransDate, sizeof(ltSet.byLocalTransDate));
  554.     dwNum = MultiByteToWideChar (CP_ACP, 0, TempArray, -1, NULL, 0);
  555.     MultiByteToWideChar (CP_ACP, 0, TempArray, -1, wcLTDate, dwNum);    
  556.     memcpy (TempArray, ltSet.byLocalTransTime, sizeof(ltSet.byLocalTransTime));
  557.     dwNum = MultiByteToWideChar (CP_ACP, 0, TempArray, -1, NULL, 0);
  558.     MultiByteToWideChar (CP_ACP, 0, TempArray, -1, wcLTTime, dwNum);
  559.     
  560.     memcpy (TempArray, ltSet.byAcquirerCode, sizeof(ltSet.byAcquirerCode));
  561.     dwNum = MultiByteToWideChar (CP_ACP, 0, TempArray, -1, NULL, 0);
  562.     MultiByteToWideChar (CP_ACP, 0, TempArray, -1, wcAcquirerCode, dwNum);
  563.     
  564.     csSQL.Format(_T("INSERT INTO TransTb VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s');"),
  565.         wcTraceNum,
  566.         wcMsgType,
  567.         wcTransAmount,
  568.         wcCashierID,
  569.         wcLTDate,
  570.         wcLTTime,
  571.         wcAcquirerCode);
  572.     bRet &= ExecuteSQL(csSQL);
  573.     //查找一下,看是否真的已经插入数据库的表
  574.     csSQL.Format(_T("SELECT * FROM TransTb WHERE traceid = '%s';"),wcTraceNum);
  575.     if(GetRecordCount(csSQL) == 0)//记录不存在
  576.     {
  577.         bRet &= FALSE;
  578.     }
  579.     
  580.     return bRet;
  581. }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值