/// from: /// http://www.ptgsystems.com/blognet/post/2010/03/12/determining-the-nth-occurence-of-a-day-of-the-week-in-any-given-month.aspx DateTime TimeZone::CalculateTransitionDate(unsigned int uiYear, unsigned int uiIndex) const { ATLASSERT(uiIndex == 0 || uiIndex == 1); const SYSTEMTIME& st = uiIndex == 0 ? m_tzi.DaylightDate : m_tzi.StandardDate; SYSTEMTIME stTemp = st; if (stTemp.wYear != 0 || // one-time switch ((stTemp.wDay < 1) || (stTemp.wDay > 5)) || // invalid number of week stTemp.wDayOfWeek > 6) // invalid day of week { ATLASSERT(false); return DateTime(DateTime::invalid); } stTemp.wYear = static_cast<WORD>(uiYear); // set year stTemp.wDay = 1; FILETIME ft; SystemTimeToFileTime(&stTemp, &ft); FileTimeToSystemTime(&ft, &stTemp); int nDayOff; // determine offset to first target WeekDay nDayOff = (int)st.wDayOfWeek - (int)stTemp.wDayOfWeek; if (nDayOff < 0) nDayOff += 7; // offset to wDay occurence of WeekDay nDayOff += ((st.wDay-1) * 7); stTemp.wDay = static_cast<WORD>(nDayOff + 1); BOOL bValid = SystemTimeToFileTime(&stTemp, &ft); if (bValid) { SYSTEMTIME stFinal = {0}; FileTimeToSystemTime(&ft, &stFinal); return SystemTimeToDateTime(stFinal); } else if (st.wDay == 5) // Only allow backup of 1 week if wDay = 5 (last occurrence in month) { nDayOff -= 7; stTemp.wDay = static_cast<WORD>(nDayOff + 1); bValid = SystemTimeToFileTime(&stTemp, &ft); SYSTEMTIME stFinal = {0}; FileTimeToSystemTime(&ft, &stFinal); if (bValid) return SystemTimeToDateTime(stFinal); } return DateTime(DateTime::invalid); }
//=========================================================================== //FILETIME構造体をTTimeStampに変換して文字列として取得する //=========================================================================== String __fastcall TAttacheCaseFileEncrypt::TimeStampToString(FILETIME ft) { SYSTEMTIME st; TDateTime dt; TTimeStamp ts; //FileTime → SystemFileTime FileTimeToSystemTime(&ft, &st); //SystemTime → TDateTime dt = SystemTimeToDateTime(st); //TDateTime → TimeStamp ts = DateTimeToTimeStamp(dt); /* //ファイル/ディレクトリの日時をなぜ //わざわざサイズが大きいTTimeStampに変換して格納したのか? //ごめんなさい、意味はありません(笑)。 struct TTimeStamp { int Time; int Date; }; */ return(IntToStr(ts.Date)+"\t"+IntToStr(ts.Time)); }
TDateTime __fastcall TVersionInfo::GetFileDate(void) const { FILETIME AFileTime; SYSTEMTIME ASystemTime; // The FILETIME structure is a 64-bit value representing the // number of 100-nanosecond intervals since January 1, 1601. // // We need to convert this to a TDateTime double value: // // The integral part of a TDateTime value is the number of days // that have passed since 12/30/1899. The fractional part of a // TDateTime value is the time of day. AFileTime = GetRawFileDate(); Win32Check( FileTimeToSystemTime(&AFileTime, &ASystemTime) ); return SystemTimeToDateTime(ASystemTime); }
//--------------------------------------------------------------------------- void __fastcall TFormLog::ButtonLogClick(TObject *Sender) { if(EditQRZ->Text=="") return; int H; AnsiString LogName = ThePath + "\\stream.adi"; if(FileExists(LogName)) { H = FileOpen(LogName,fmOpenReadWrite); if(H<0) { Application->MessageBox("Cannot write to log","IZ8BLY PSK31 Lab",MB_OK | MB_ICONSTOP); return; } FileSeek(H,0,2); } else { H = FileCreate(LogName); if(H<0) { Application->MessageBox("Cannot write to log","IZ8BLY PSK31 Lab",MB_OK | MB_ICONSTOP); return; } FileWriteString(H,"Created by IZ8BLY PSK31 Lab\r\n<EOH>\r\n"); } AnsiString Linea; TDateTime TD; if(UTCTimeLog) { SYSTEMTIME SystemTime; GetSystemTime(&SystemTime); TD = SystemTimeToDateTime(SystemTime); } else { TD = TDateTime().CurrentDateTime(); } Linea = FormatAdif("CALL",EditQRZ->Text) + FormatAdif("NAME",EditName->Text)+ FormatAdif("QTH",EditQTH->Text)+ FormatAdif("RST_RCVD",EditRSTReceived->Text)+ FormatAdif("RST_SENT",EditRSTSent->Text)+ FormatAdif("FREQ",EditFrequency->Text)+ FormatAdif("MODE","STREAM")+ FormatAdif("QSO_DATE",TD.FormatString("yyyymmdd"))+ FormatAdif("TIME_ON",TD.FormatString("hhmm"))+ FormatAdif("COMMENT",EditComments->Text)+ "<EOR>\r\n"; FileWriteString(H,Linea); FileClose(H); char oldclip[2048]; Clipboard()->GetTextBuf(oldclip,2048); Clipboard()->SetTextBuf(Linea.c_str()); SendMessage(HWND_BROADCAST,IZ8BLY,0,0); Clipboard()->SetTextBuf(oldclip); ButtonLog->Enabled = false; }
void __fastcall TWithDrawERRForm::cxButton2Click(TObject *Sender) { WORD status; int tmpbalance; int tmpkh,tmpsycs; double tmpintye; double tmpye; unsigned char keymode,secnum,Delayms,mode; unsigned char key[6]; unsigned char dwmm[6]; unsigned char daytime[4]; unsigned char kh[4]; unsigned char balance[4]; unsigned char cardtype[1]; unsigned char czmm[3]; unsigned char synum[3]; mode = 0x02; Delayms = DelaySecond; keymode = CARDPasswordEdition; secnum = UsingSecNUM; key[0] = CARDPassword[0]; key[1] = CARDPassword[1]; key[2] = CARDPassword[2]; key[3] = CARDPassword[3]; key[4] = CARDPassword[4]; key[5] = CARDPassword[5]; if(LoadHModule) { if(readwatercardinfo)//readcardinfo) { // status = readcardinfo(readcomno,keymode,secnum,key,kh,balance, // dwmm,synum,daytime,cardtype,czmm,Delayms); status = readwatercardinfo(readcomno,keymode,secnum,key,kh,balance, dwmm,daytime,cardtype,Delayms); if(status > 99) { ShowMessage("通讯错误!"); } else if (1 == status) { ShowMessage("请把卡片放好!"); } else if (2 == status) { ShowMessage("卡号大于192000或等于0!"); } else if (4 == status) { ShowMessage("卡片密码不对!"); } else if (5 == status) { ShowMessage("读写卡不稳定!"); } else if (6 == status) { ShowMessage("卡结构不对!"); } else if (10 == status) { ShowMessage("卡结构不对!"); } else if (0 != status) { ShowMessage("该卡未发行或已退卡!"); } else { ADOReChargeQuery->Close(); ADOReChargeQuery->SQL->Clear(); ADOReChargeQuery->SQL->Add("select * from XTSET"); String mmstr = ""; unsigned char tmpchar; tmpchar = dwmm[0]; tmpchar = tmpchar>>4; mmstr += (int)tmpchar; tmpchar = dwmm[0]; tmpchar = tmpchar<<4; tmpchar = tmpchar>>4; mmstr += (int)tmpchar; tmpchar = dwmm[1]; tmpchar = tmpchar>>4; mmstr += (int)tmpchar; tmpchar = dwmm[1]; tmpchar = tmpchar<<4; tmpchar = tmpchar>>4; mmstr += (int)tmpchar; ADOReChargeQuery->Close(); String tmpstr; tmpkh = (int)kh[1]*256*256+(int)kh[2]*256+(int)kh[3]; tmpsycs = 0;//(int)synum[0]*256+(int)synum[1]; tmpintye = (double)balance[1]*256*256+(double)balance[2]*256+(double)balance[3]; tmpye = tmpintye/100; ADOReChargeQuery->Close(); ADOReChargeQuery->SQL->Clear(); tmpstr = "select * from KZT where kh="; tmpstr += tmpkh; ADOReChargeQuery->SQL->Add(tmpstr); ADOReChargeQuery->Open(); if(!ADOReChargeQuery->IsEmpty()) { if(0 != ADOReChargeQuery->FieldByName("GS")->AsInteger) { ShowMessage("此卡已挂失,请没收此卡!"); ADOReChargeQuery->Close(); return; } } else { ShowMessage("此卡不是本系统发出的卡!"); ADOReChargeQuery->Close(); return; } ADOReChargeQuery->Close(); ADOReChargeQuery->SQL->Clear(); tmpstr = "select * from CARD where kh="; tmpstr += tmpkh; ADOReChargeQuery->SQL->Add(tmpstr); ADOReChargeQuery->Open(); if(!ADOReChargeQuery->IsEmpty()) { ADOReChargeQuery->Close(); beepofreaddll(readcomno, '10'); int oldkh = StrToInt(cxTextEdit1->Text.Trim()); if(oldkh == tmpkh) { cxTextEdit18->Text = tmpye; ADOReChargeQuery->SQL->Clear(); String Chksqlstr = "select * from HJL where KH="; Chksqlstr += tmpkh; Chksqlstr += " order by OPTIME asc"; ADOReChargeQuery->SQL->Add(Chksqlstr); ADOReChargeQuery->Open(); if(ADOReChargeQuery->IsEmpty()) { beepofreaddll(readcomno, '10'); String ReChargeOutstr = "取款成功!卡余额为:"; ReChargeOutstr += tmpye; ShowMessage(ReChargeOutstr); this->Close(); } else { if(tmpye == ADOReChargeQuery->FieldByName("YE")->AsFloat) { beepofreaddll(readcomno, '10'); String ReChargeOutstr = "取款成功!卡余额为:"; ReChargeOutstr += tmpye; ShowMessage(ReChargeOutstr); ADOReChargeQuery->Close(); this->Close(); } else { //写充值金额 if(!LaunchWaterNewCard)//LaunchNewCard) { ShowMessage("写卡函数加载失败"); return; } tmpsycs = 0;//(int)synum[0]*256+(int)synum[1]; tmpsycs++; unsigned char writesynum[2]; writesynum[0] = (char)(tmpsycs/256); writesynum[1] = (char)(tmpsycs%256); unsigned char writebalance[4]; ADOReChargeQuery->Last(); int ReChargeMoney = ADOReChargeQuery->FieldByName("JE")->AsInteger; double writetmpbalance = ADOReChargeQuery->FieldByName("JE")->AsFloat; tmpye -= writetmpbalance; writetmpbalance *= 100; writebalance[0] = 0x00; writebalance[1] = (unsigned char)((int)writetmpbalance/65536); writetmpbalance = (int)writetmpbalance%65536; writebalance[2] = (unsigned char)((int)writetmpbalance/256); writetmpbalance = (int)writetmpbalance%256; writebalance[3] = (unsigned char)writetmpbalance; WORD WriteStatus; String DateofLaunchCard; SYSTEMTIME tmpsystime; GetLocalTime(&tmpsystime); DateofLaunchCard = DateTimeToStr(SystemTimeToDateTime(tmpsystime)); /* WriteStatus = LaunchNewCard(readcomno, keymode, secnum, key, kh, writebalance, dwmm, writesynum, daytime, cardtype, czmm, mode, Delayms); */ WriteStatus = LaunchWaterNewCard(readcomno, keymode, secnum, key, kh, writebalance, dwmm, daytime, cardtype, mode, Delayms); if(WriteStatus) { ShowMessage("修正失败,请重试!"); ADOReChargeQuery->Close(); return; } else { //取款入库、入狗开始 ADOReChargeQuery->Close(); ADOReChargeQuery->SQL->Clear(); String sqlstr = "insert into MX values(:BH,:KH,:SF_YE,"; sqlstr = sqlstr + ":SFJE,:SYCS,:SFRQ,:JYNO,"; sqlstr = sqlstr + ":GZZID,:SFLX,:CZY,:SCRQ)"; ADOReChargeQuery->SQL->Add(sqlstr); ADOReChargeQuery->Parameters->ParamByName("BH")->Value = cxTextEdit7->Text; ADOReChargeQuery->Parameters->ParamByName("KH")->Value = tmpkh; ADOReChargeQuery->Parameters->ParamByName("SF_YE")->Value = tmpye; ADOReChargeQuery->Parameters->ParamByName("SFJE")->Value = ReChargeMoney; ADOReChargeQuery->Parameters->ParamByName("SYCS")->Value = tmpsycs; ADOReChargeQuery->Parameters->ParamByName("SFRQ")->Value = DateofLaunchCard; ADOReChargeQuery->Parameters->ParamByName("JYNO")->Value = 1001; ADOReChargeQuery->Parameters->ParamByName("GZZID")->Value = 1; ADOReChargeQuery->Parameters->ParamByName("SFLX")->Value = "d"; ADOReChargeQuery->Parameters->ParamByName("CZY")->Value = OperatorName; ADOReChargeQuery->Parameters->ParamByName("SCRQ")->Value = DateofLaunchCard; ADOReChargeQuery->ExecSQL(); ADOReChargeQuery->Close(); //插入CK表 ADOReChargeQuery->SQL->Clear(); sqlstr = "insert into CK values(:kh,:bh,:sf_ye,:sf_fl,:ckxj,"; sqlstr += ":glf,:ckje,:lqbt,:xkje,:sycs,:sfrq,:jyno,:gzzid,:sflx,:CZY)"; ADOReChargeQuery->SQL->Add(sqlstr); ADOReChargeQuery->Parameters->ParamByName("kh")->Value = tmpkh; ADOReChargeQuery->Parameters->ParamByName("bh")->Value = cxTextEdit7->Text; ADOReChargeQuery->Parameters->ParamByName("sf_ye")->Value = tmpye; ADOReChargeQuery->Parameters->ParamByName("sf_fl")->Value = 1; ADOReChargeQuery->Parameters->ParamByName("ckxj")->Value = ReChargeMoney; ADOReChargeQuery->Parameters->ParamByName("glf")->Value = 0; ADOReChargeQuery->Parameters->ParamByName("ckje")->Value = ReChargeMoney; ADOReChargeQuery->Parameters->ParamByName("lqbt")->Value = 0; ADOReChargeQuery->Parameters->ParamByName("xkje")->Value = ReChargeMoney; ADOReChargeQuery->Parameters->ParamByName("sycs")->Value = tmpsycs; ADOReChargeQuery->Parameters->ParamByName("sfrq")->Value = DateofLaunchCard; ADOReChargeQuery->Parameters->ParamByName("jyno")->Value = 1001; ADOReChargeQuery->Parameters->ParamByName("gzzid")->Value = 1; ADOReChargeQuery->Parameters->ParamByName("sflx")->Value = "d"; ADOReChargeQuery->Parameters->ParamByName("CZY")->Value = OperatorName; ADOReChargeQuery->ExecSQL(); ADOReChargeQuery->Close(); //填写操作记录表 sqlstr = "insert into OperationList values(:BH,:KH,:JE,:YE,:LX,:Operator,:DateTime)"; ADOReChargeQuery->SQL->Clear(); ADOReChargeQuery->SQL->Add(sqlstr); ADOReChargeQuery->Parameters->ParamByName("BH")->Value = cxTextEdit7->Text; ADOReChargeQuery->Parameters->ParamByName("KH")->Value = tmpkh; ADOReChargeQuery->Parameters->ParamByName("JE")->Value = ReChargeMoney; ADOReChargeQuery->Parameters->ParamByName("YE")->Value = tmpye; ADOReChargeQuery->Parameters->ParamByName("LX")->Value = "取款"; ADOReChargeQuery->Parameters->ParamByName("Operator")->Value = OperatorName; ADOReChargeQuery->Parameters->ParamByName("DateTime")->Value = DateofLaunchCard; ADOReChargeQuery->ExecSQL(); ADOReChargeQuery->Close(); //更新CARD,CARD_F表 sqlstr = "select * from CARD where BH='"; sqlstr = sqlstr + cxTextEdit7->Text + "'"; ADOReChargeQuery->SQL->Clear(); ADOReChargeQuery->SQL->Add(sqlstr); ADOReChargeQuery->Open(); if(!ADOReChargeQuery->IsEmpty()) { ADOReChargeQuery->Edit(); ADOReChargeQuery->FieldByName("SF_YE")->AsFloat = tmpye; ADOReChargeQuery->FieldByName("SFYEDT")->AsDateTime = StrToDateTime(DateofLaunchCard); ADOReChargeQuery->FieldByName("SYCS")->AsInteger = tmpsycs; ADOReChargeQuery->Post(); } sqlstr = "select * from CARD_F where BH='"; sqlstr = sqlstr + cxTextEdit7->Text + "'"; ADOReChargeQuery->SQL->Clear(); ADOReChargeQuery->SQL->Add(sqlstr); ADOReChargeQuery->Open(); if(!ADOReChargeQuery->IsEmpty()) { ADOReChargeQuery->Edit(); ADOReChargeQuery->FieldByName("SF_YE")->AsFloat = tmpye; ADOReChargeQuery->FieldByName("SFYEDT")->AsDateTime = StrToDateTime(DateofLaunchCard); ADOReChargeQuery->FieldByName("SYCS")->AsInteger = tmpsycs; ADOReChargeQuery->Post(); } ADOReChargeQuery->Close(); //写加密狗充值总额 if(DOGChk) { unsigned char tempbuf[8]; SFK_ZE -= ReChargeMoney; UpZETable->FieldByName("SFKZE")->AsFloat -= ReChargeMoney; memcpy(tempbuf,&SFK_ZE,8); unsigned char hightempchar1; unsigned char lowtempchar1; for(int t = 0; t < 8; t++) { hightempchar1 = tempbuf[t]&0xf0; lowtempchar1 = tempbuf[t]&0x0f; hightempchar1 = hightempchar1>>4; hightempchar1 = hightempchar1&0x0f; lowtempchar1 = lowtempchar1<<4; lowtempchar1 = lowtempchar1&0xf0; tempbuf[t] = hightempchar1|lowtempchar1; } int dogoffset = 0x0034; int doglen = 8; RY3_Write(doghandle,dogoffset,tempbuf,doglen); } //写加密狗完毕 //取款入库、入狗结束 beepofreaddll(readcomno, '10'); String ReChargeOutstr = "取款成功!卡余额为:"; // ReChargeOutstr += tmpye; ReChargeOutstr += tmpye; ShowMessage(ReChargeOutstr); ADOReChargeQuery->Last(); ADOReChargeQuery->Delete(); ADOReChargeQuery->Close(); this->Close(); } } } } else { beepofreaddll(readcomno, '10'); ShowMessage("此卡不是充值出错的卡片,请更换!"); } // ReadCardBTN->Enabled = false; } else {
void __fastcall TDealMistakeForm::cxButton3Click(TObject *Sender) { //修正金额 if(cxTextEdit1->Text.IsEmpty()) { ShowMessage("必须填写修正金额!"); return; } double mistakemoney = 0; try { mistakemoney = StrToFloat(cxTextEdit1->Text); } catch(...) { ShowMessage("您输入的修正金额为非正常值,请重新输入!"); cxTextEdit1->SelectAll(); return; } if(0 == mistakemoney) { ShowMessage("修正金额为0,错误的输入!"); return; } //修正金额写卡 //修正行为入库CARD,CARD_F,MX,Operatorlist,"^"为充钱,"v"为扣钱。 String Moutstr = "请您确认输入的修正金额为:¥"; Moutstr += mistakemoney; if(mrOk != MessageBox(this->Handle, Moutstr.t_str(), "确认修正金额", MB_OKCANCEL)) return; WORD status; WORD WriteStatus; int tmpbalance; int tmpkh,tmpsycs; double tmpintye; double tmpye; unsigned char keymode,secnum,Delayms,mode; unsigned char key[6]; unsigned char dwmm[6]; unsigned char daytime[4]; unsigned char kh[4]; unsigned char balance[4]; unsigned char cardtype[1]; unsigned char czmm[3]; unsigned char synum[3]; Delayms = DelaySecond;//0x00; keymode = CARDPasswordEdition; mode = 0x01; secnum = UsingSecNUM; key[0] = CARDPassword[0]; key[1] = CARDPassword[1]; key[2] = CARDPassword[2]; key[3] = CARDPassword[3]; key[4] = CARDPassword[4]; key[5] = CARDPassword[5]; if(LoadHModule) { if(readwatercardinfo)//readcardinfo) { // ShowMessage("begin read card!"); // status = readcardinfo(readcomno,keymode,secnum,key,kh,balance, // dwmm,synum,daytime,cardtype,czmm,Delayms); status = readwatercardinfo(readcomno,keymode,secnum,key,kh,balance, dwmm,daytime,cardtype,Delayms); if(status > 99) { ShowMessage("通讯错误!"); } else if (1 == status) { ShowMessage("请把卡片放好!"); } else if (2 == status) { ShowMessage("卡号大于192000或等于0!"); } else if (4 == status) { ShowMessage("卡片密码不对!"); } else if (5 == status) { ShowMessage("读写卡不稳定!"); } else if (6 == status) { ShowMessage("卡结构不对!"); } else if (10 == status) { ShowMessage("卡结构不对!"); } else if (0 != status) { ShowMessage("该卡未发行或已退卡!"); } else { tmpkh = (int)kh[1]*256*256+(int)kh[2]*256+(int)kh[3]; if(querykh != tmpkh) { ShowMessage("该卡不是刚才查询的卡片,无法修正!"); return; } tmpsycs = 0;//(int)synum[0]*256+(int)synum[1]; tmpsycs++; unsigned char writesynum[2]; writesynum[0] = (char)(tmpsycs/256); writesynum[1] = (char)(tmpsycs%256); tmpintye = (double)balance[1]*256*256+(double)balance[2]*256+(double)balance[3]; // tmpye = tmpintye/100+ReChargeMoney; tmpye = tmpintye/100 + mistakemoney; unsigned char writebalance[4]; double writetmpbalance = mistakemoney; writetmpbalance *= 100; writebalance[0] = 0x00; writebalance[1] = (unsigned char)((int)writetmpbalance/65536); writetmpbalance = (int)writetmpbalance%65536; writebalance[2] = (unsigned char)((int)writetmpbalance/256); writetmpbalance = (int)writetmpbalance%256; writebalance[3] = (unsigned char)writetmpbalance; if(LaunchWaterNewCard)//LaunchNewCard) { String DateofLaunchCard; SYSTEMTIME tmpsystime; GetLocalTime(&tmpsystime); DateofLaunchCard = DateTimeToStr(SystemTimeToDateTime(tmpsystime)); ADOTable1->TableName = "HJL"; ADOTable1->Active = true; if(mistakemoney>0) ADOTable1->InsertRecord(ARRAYOFCONST((bhstr,tmpkh,tmpye,mistakemoney,tmpsycs,"^",OperatorName,DateofLaunchCard))); else if(mistakemoney < 0) ADOTable1->InsertRecord(ARRAYOFCONST((bhstr,tmpkh,tmpye,mistakemoney,tmpsycs,"v",OperatorName,DateofLaunchCard))); /* String hjlsqlstr = "insert into HJL values(:BH,:KH,:YE,:JE,:SFLX,:CZY,:OPTIME)"; HJLADOQ->Close(); HJLADOQ->SQL->Clear(); HJLADOQ->SQL->Add(hjlsqlstr); HJLADOQ->Parameters->ParamByName("BH")->Value = cxTextEdit7->Text; HJLADOQ->Parameters->ParamByName("KH")->Value = tmpkh; HJLADOQ->Parameters->ParamByName("YE")->Value = tmpye; HJLADOQ->Parameters->ParamByName("JE")->Value = ReChargeMoney; HJLADOQ->Parameters->ParamByName("SFLX")->Value = "a"; HJLADOQ->Parameters->ParamByName("CZY")->Value = OperatorName; HJLADOQ->Parameters->ParamByName("OPTIME")->Value = DateofLaunchCard; HJLADOQ->ExecSQL(); */ //插入MX表 ADOQuery1->Close(); ADOQuery1->SQL->Clear(); String sqlstr = "insert into MX values(:BH,:KH,:SF_YE,"; sqlstr = sqlstr + ":SFJE,:SYCS,:SFRQ,:JYNO,"; sqlstr = sqlstr + ":GZZID,:SFLX,:CZY,:SCRQ)"; ADOQuery1->SQL->Add(sqlstr); ADOQuery1->Parameters->ParamByName("BH")->Value = bhstr; ADOQuery1->Parameters->ParamByName("KH")->Value = tmpkh; ADOQuery1->Parameters->ParamByName("SF_YE")->Value = tmpye; ADOQuery1->Parameters->ParamByName("SFJE")->Value = mistakemoney; ADOQuery1->Parameters->ParamByName("SYCS")->Value = tmpsycs; ADOQuery1->Parameters->ParamByName("SFRQ")->Value = DateofLaunchCard; ADOQuery1->Parameters->ParamByName("JYNO")->Value = 1002; ADOQuery1->Parameters->ParamByName("GZZID")->Value = 1; if(mistakemoney>0) ADOQuery1->Parameters->ParamByName("SFLX")->Value = "^"; else if(mistakemoney < 0) ADOQuery1->Parameters->ParamByName("SFLX")->Value = "v"; ADOQuery1->Parameters->ParamByName("CZY")->Value = OperatorName; ADOQuery1->Parameters->ParamByName("SCRQ")->Value = DateofLaunchCard; ADOQuery1->ExecSQL(); ADOQuery1->Close(); //插入CK表 ADOQuery1->SQL->Clear(); sqlstr = "insert into CK values(:kh,:bh,:sf_ye,:sf_fl,:ckxj,"; sqlstr += ":glf,:ckje,:lqbt,:xkje,:sycs,:sfrq,:jyno,:gzzid,:sflx,:CZY)"; ADOQuery1->SQL->Add(sqlstr); ADOQuery1->Parameters->ParamByName("kh")->Value = tmpkh; ADOQuery1->Parameters->ParamByName("bh")->Value = bhstr; ADOQuery1->Parameters->ParamByName("sf_ye")->Value = tmpye; ADOQuery1->Parameters->ParamByName("sf_fl")->Value = 1; ADOQuery1->Parameters->ParamByName("ckxj")->Value = mistakemoney; ADOQuery1->Parameters->ParamByName("glf")->Value = 0; ADOQuery1->Parameters->ParamByName("ckje")->Value = mistakemoney; ADOQuery1->Parameters->ParamByName("lqbt")->Value = 0; ADOQuery1->Parameters->ParamByName("xkje")->Value = mistakemoney; ADOQuery1->Parameters->ParamByName("sycs")->Value = tmpsycs; ADOQuery1->Parameters->ParamByName("sfrq")->Value = DateofLaunchCard; ADOQuery1->Parameters->ParamByName("jyno")->Value = 1002; ADOQuery1->Parameters->ParamByName("gzzid")->Value = 1; if(mistakemoney>0) ADOQuery1->Parameters->ParamByName("SFLX")->Value = "^"; else if(mistakemoney < 0) ADOQuery1->Parameters->ParamByName("SFLX")->Value = "v"; ADOQuery1->Parameters->ParamByName("CZY")->Value = OperatorName; ADOQuery1->ExecSQL(); ADOQuery1->Close(); //填写操作记录表 sqlstr = "insert into OperationList values(:BH,:KH,:JE,:YE,:LX,:Operator,:DateTime)"; ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add(sqlstr); ADOQuery1->Parameters->ParamByName("BH")->Value = bhstr; ADOQuery1->Parameters->ParamByName("KH")->Value = tmpkh; ADOQuery1->Parameters->ParamByName("JE")->Value = mistakemoney; ADOQuery1->Parameters->ParamByName("YE")->Value = tmpye; if(mistakemoney>0) ADOQuery1->Parameters->ParamByName("LX")->Value = "充值修正"; else if(mistakemoney < 0) ADOQuery1->Parameters->ParamByName("LX")->Value = "减款修正"; ADOQuery1->Parameters->ParamByName("Operator")->Value = OperatorName; ADOQuery1->Parameters->ParamByName("DateTime")->Value = DateofLaunchCard; ADOQuery1->ExecSQL(); ADOQuery1->Close(); //更新CARD,CARD_F表 sqlstr = "select * from CARD where BH='"; sqlstr = sqlstr + bhstr + "'"; ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add(sqlstr); ADOQuery1->ExecSQL(); ADOQuery1->Active = true; ADOQuery1->Edit(); ADOQuery1->FieldByName("SF_YE")->AsFloat = tmpye; ADOQuery1->FieldByName("SFYEDT")->AsDateTime = StrToDateTime(DateofLaunchCard); ADOQuery1->FieldByName("SYCS")->AsInteger = tmpsycs; ADOQuery1->Post(); sqlstr = "select * from CARD_F where BH='"; sqlstr = sqlstr + bhstr + "'"; ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add(sqlstr); ADOQuery1->ExecSQL(); ADOQuery1->Active = true; ADOQuery1->Edit(); ADOQuery1->FieldByName("SF_YE")->AsFloat = tmpye; ADOQuery1->FieldByName("SFYEDT")->AsDateTime = StrToDateTime(DateofLaunchCard); ADOQuery1->FieldByName("SYCS")->AsInteger = tmpsycs; ADOQuery1->Post(); ADOQuery1->Close(); /* WriteStatus = LaunchNewCard(readcomno, keymode, secnum, key, kh, writebalance, dwmm, writesynum, daytime, cardtype, czmm, mode, Delayms); */ WriteStatus = LaunchWaterNewCard(readcomno, keymode, secnum, key, kh, writebalance, dwmm, daytime, cardtype, mode, Delayms); if(WriteStatus) { ShowMessage("写卡错误,充值失败,请修正!"); // ReChargeERRForm->ShowModal(); } else { WORD chkstatus; WORD chkWriteStatus; int chktmpbalance; int chktmpkh,chktmpsycs; double chktmpintye; double chktmpye; unsigned char chkkeymode,chksecnum,chkDelayms,chkmode; unsigned char chkkey[6]; unsigned char chkdwmm[6]; unsigned char chkdaytime[4]; unsigned char chkkh[4]; unsigned char chkbalance[4]; unsigned char chkcardtype[1]; unsigned char chkczmm[3]; unsigned char chksynum[3]; chkDelayms = DelaySecond;//0x00; chkkeymode = CARDPasswordEdition; chkmode = 0x01; chksecnum = UsingSecNUM; chkkey[0] = CARDPassword[0]; chkkey[1] = CARDPassword[1]; chkkey[2] = CARDPassword[2]; chkkey[3] = CARDPassword[3]; chkkey[4] = CARDPassword[4]; chkkey[5] = CARDPassword[5]; chkstatus = readcardinfo(readcomno,chkkeymode,chksecnum,chkkey,chkkh,chkbalance, chkdwmm,chksynum,chkdaytime,chkcardtype,chkczmm,chkDelayms); if(chkstatus > 99) { ShowMessage("充值操作有误,请修正!"); // ReChargeERRForm->ShowModal(); } else if (1 == chkstatus) { ShowMessage("充值操作有误,请修正!"); // ReChargeERRForm->ShowModal(); } else if (2 == chkstatus) { ShowMessage("充值操作有误,请修正!"); // ReChargeERRForm->ShowModal(); } else if (4 == chkstatus) { ShowMessage("充值操作有误,请修正!"); // ReChargeERRForm->ShowModal(); } else if (5 == chkstatus) { ShowMessage("充值操作有误,请修正!"); // ReChargeERRForm->ShowModal(); } else if (6 == chkstatus) { ShowMessage("充值操作有误,请修正!"); // ReChargeERRForm->ShowModal(); } else if (10 == chkstatus) { ShowMessage("充值操作有误,请修正!"); // ReChargeERRForm->ShowModal(); } else if (0 != chkstatus) { ShowMessage("充值操作有误,请修正!"); // ReChargeERRForm->ShowModal(); } else { double chktmpintye = ((double)chkbalance[1]*256*256+(double)chkbalance[2]*256+(double)chkbalance[3])/100; if(tmpye == chktmpintye) { ADOTable1->Delete(); CQKLogStream<<"CK,"<<tmpkh<<","<<mistakemoney<<","<<DateofLaunchCard.t_str()<<","<<OperatorName.t_str()<<endl; beepofreaddll(readcomno, '10'); String ReChargeOutstr = "修正成功!卡余额为:"; ReChargeOutstr += tmpye; ShowMessage(ReChargeOutstr); // CZNoticForm->Panel1->Caption = ReChargeOutstr; // CZNoticForm->ShowModal(); // ShowMessage(ReChargeOutstr); } } } } else { ShowMessage("写卡函数加载失败!"); } } } } }