22,209
社区成员
发帖
与我相关
我的任务
分享
while (CDataProcDlg::m_staticIsStop)
for (i = 0; i < lRecordCount; ++i)
UINT myProcessDataProc(LPVOID lpvoid)
{
CADOCftlin dbProcess, dbCheck;
string strDBLocale = "local.ini";
dbProcess.SetConfigFile(strDBLocale);
dbCheck.SetConfigFile(strDBLocale);
//dbProcess.OpenDatabase();
//dbCheck.OpenDatabase();
string strID, strGlideID, strPackData, strTmp;
//CString strSql;
CDataProcDlg *dlg = (CDataProcDlg *)AfxGetMainWnd();
long lRecordCount = 0;
int i = 0, iRecordNum = 0, k = 0;
STR_ODRECORD odrecord[120];
char* recorddata[120];
char* recordtemp;
char* temptable;
char szPackData[1024] = { 0 };
AfxOleInit();
gThreadIsExit2 = 0;
CButton *btn = (CButton *)(dlg->GetDlgItem(IDOK));
btn->EnableWindow(FALSE);
while (CDataProcDlg::m_staticIsStop)
{
//if (!dbCheck.IsConnected())
dbCheck.OpenDatabase();
//if (!dbProcess.IsConnected())
dbProcess.OpenDatabase();
lRecordCount = 0;
if (dbProcess.GetPackData()) //执行获取数据的存储过程
lRecordCount = dbProcess.GetRecordCount();
else
{
Sleep(60000);
continue;
}
for (i = 0; i < lRecordCount; ++i)
{
DWORD countStart = 0;
countStart = GetTickCount();
dbProcess.GetFieldValue(0, strID);
dbProcess.GetFieldValue(1, strGlideID);
dbProcess.GetFieldValue(2, strPackData);
memset(szPackData, 0, sizeof(szPackData));
strcpy(szPackData, strPackData.c_str());
//AfxMessageBox(szPackData);
recordtemp = strtok(szPackData, "#");
iRecordNum = 0;
while(recordtemp) //拆成多个包
{
recorddata[iRecordNum] = recordtemp;
iRecordNum++;
recordtemp = strtok(NULL, "#");
}
if (iRecordNum == 0)
{
dbProcess.MoveRecordNext();
continue;
}
for(k = 0; k < iRecordNum; ++k) //把拆分到的数据保存在结构str_GDINFO中
{
memset(&odrecord[k], '\0', sizeof(STR_ODRECORD));
strcpy(odrecord[k].glideID, strGlideID.c_str());
temptable = strtok(recorddata[k], "|");
if(temptable != NULL)
strcpy(odrecord[k].GDID, temptable);
temptable = strtok(NULL, "|");
if(temptable != NULL)
strcpy(odrecord[k].num, temptable);
}
int iReturnVal = dbProcess.AddData(odrecord, iRecordNum, countStart); //, strID
//strSql.Format(strSqlUpdate, strID.c_str());
//strTmp = strSql;
//dbProcess.ExecuteJustSql(strSql.GetBuffer(0));
//writeLog(strTmp);
//strSql.ReleaseBuffer();
if (iReturnVal == iRecordNum)
{
CString strSql, strTmp;
int iLinTag = 0;
string strExe, strField1 = "0", strField2 = "0";
long lCount = 0;
strTmp = "select tagFinished from packData where glideID = '%s'";
CString strSqlUpdate = "update packData set tagFinished = 1 where ID = %s";
strSql.Format(strSqlUpdate, strID.c_str());
strExe = strSql;
dbCheck.ExecuteJustSql(strExe);
//writeLog(strExe);
strSql.Format(strTmp, strGlideID.c_str());
strExe = strSql;
dbCheck.ExecuteSqlWithRecordSet(strExe);
//writeLog(strExe);
lCount = dbCheck.GetRecordCount();
string *strResult = new string[lCount];
iLinTag = 1;
for (k = 0; k < lCount; ++k)
{
dbCheck.GetFieldValue(0, strResult[k]);
if (strResult[k] != "1")
{
iLinTag = 0;
break;
}
dbCheck.MoveRecordNext();
}
delete [] strResult;
/*
if (lCount == 1)
{
dbCheck.GetFieldValue(0, strField1);
if (strField1 == "1")
iLinTag = 1;
}
else if (lCount == 2)
{
dbCheck.GetFieldValue(0, strField1);
dbCheck.MoveRecordNext();
dbCheck.GetFieldValue(0, strField2);
if (strField1 == "1" && strField2 == "1")
iLinTag = 1;
}
else
{
iLinTag = 0;
}
*/
strTmp = "update odrecord_Main set Finished = 1 where odid = '%s'";
strSql.Format(strTmp, strGlideID.c_str());
strExe = strSql;
if (iLinTag == 1)
{
dbCheck.ExecuteJustSql(strExe);
writeLog(strExe);
}
}
dbProcess.MoveRecordNext();
Sleep(20);
}
if (dbCheck.IsSetOpened())
dbCheck.CloseRecordSet();
if (dbProcess.IsSetOpened())
dbProcess.CloseRecordSet();
dbCheck.CloseDatabase();
dbProcess.CloseDatabase();
Sleep(20000);
}
gThreadIsExit2 = 1;
if (gThreadIsExit1)
{
btn->EnableWindow(TRUE);
}
AfxOleTerm();
return 1;
}