遇到一个棘手的问题。ExecuteSQLWithRecordset(_bstr_t("SELECT Actor_ID,Actor_Sequence,Actor_Name,Actor_MediaSequences FROM Actors;"),&pActorRecordset,&iReturnCode); ExecuteSQLWithRecordset(_bstr_t("SELECT Media_ID,Media_Sequence,Media_ActorName1,Media_ActorName2,Media_ActorName3,Media_ActorName4,Media_Actor1_Sequence,Media_Actor2_Sequence,Media_Actor3_Sequence,Media_Actor4_Sequence FROM Medias ORDER BY Media_Name_Length asc;"),&pMediaRecordset,&iReturnCode); 打开了两个记录集。
long lRecordSequence = 0;
char szActor_MediaSequences[10000];
char szTempMediaSequence[10];
BOOL bMediaBelongToActor;
_variant_t vtRecordSequence; _bstr_t bstrActor_Name,bstrTempActor_Name;
vtRecordSequence.vt = VT_I4;
vtRecordSequence.lVal = 0;
struct timeb tmBegin,tmEnd;
struct timeb tmBegin1,tmEnd1;
try
{
ftime(&tmBegin);
//更新演员的Actor_MediaSequences列和媒体对应的演员的Sequence
while(!pActorRecordset->adoEOF)
{
ftime(&tmBegin1);
bMediaBelongToActor = false;
memset(szActor_MediaSequences,0,sizeof(szActor_MediaSequences)); if(pActorRecordset->GetCollect("Actor_Sequence").lVal != vtRecordSequence.lVal)
{
GetPrivateProfileString("ERROR_DATABASE","Can_Not_Verify_Records1","无法验证数据是否正确,请使用备份数据库%s。",szTemp,sizeof(szTemp),m_szLocalizeFile);
sprintf(m_szErrorInfo,szTemp,m_szBackupDatabase);
return S_FALSE;
}
if(!pMediaRecordset->adoBOF)
pMediaRecordset->MoveFirst();
while(!pMediaRecordset->adoEOF)
{
bMediaBelongToActor = false;
bstrActor_Name = pActorRecordset->GetCollect("Actor_Name").bstrVal;
bstrTempActor_Name = pMediaRecordset->GetCollect("Media_ActorName1").bstrVal;
if(bstrActor_Name==bstrTempActor_Name)
{
pMediaRecordset->Fields->Item["Media_Actor1_Sequence"]->Value = vtRecordSequence; vtRecordSequence
bMediaBelongToActor = true;
}
bstrTempActor_Name = pMediaRecordset->GetCollect("Media_ActorName2").bstrVal;
if(bstrActor_Name==bstrTempActor_Name)
{
pMediaRecordset->Fields->Item["Media_Actor2_Sequence"]->Value = vtRecordSequence;
bMediaBelongToActor = true;
}
bstrTempActor_Name = pMediaRecordset->GetCollect("Media_ActorName3").bstrVal;
if(bstrActor_Name==bstrTempActor_Name)
{
pMediaRecordset->Fields->Item["Media_Actor3_Sequence"]->Value = vtRecordSequence;
bMediaBelongToActor = true;
}
bstrTempActor_Name = pMediaRecordset->GetCollect("Media_ActorName4").bstrVal;
if(bstrActor_Name==bstrTempActor_Name)
{
pMediaRecordset->Fields->Item["Media_Actor4_Sequence"]->Value = vtRecordSequence;
bMediaBelongToActor = true;
}
if(bMediaBelongToActor)
{
sprintf(szTempMediaSequence,"%ld,",pMediaRecordset->GetCollect("Media_Sequence").lVal);
strcat(szActor_MediaSequences,szTempMediaSequence);
}
pMediaRecordset->MoveNext();
}
pActorRecordset->Fields->Item["Actor_MediaSequences"]->Value = _bstr_t(szActor_MediaSequences);
pActorRecordset->MoveNext();
vtRecordSequence.lVal++;
ftime(&tmEnd1);
long lt = (tmEnd1.time - tmBegin1.time)*1000 + tmEnd1.millitm - tmBegin1.millitm;
}
pMediaRecordset->UpdateBatch(adAffectAll);
pActorRecordset->UpdateBatch(adAffectAll);
pActorRecordset->Release();
pMediaRecordset->Release();
ftime(&tmEnd);
long l = tmEnd.time - tmBegin.time;
int i = 0;
}
因为要操作的表含记录比较多。2112 X 17434 的效率太低了。求改进的办法。最好可以给点资料看看。谢谢了。
long lRecordSequence = 0;
char szActor_MediaSequences[10000];
char szTempMediaSequence[10];
BOOL bMediaBelongToActor;
_variant_t vtRecordSequence; _bstr_t bstrActor_Name,bstrTempActor_Name;
vtRecordSequence.vt = VT_I4;
vtRecordSequence.lVal = 0;
struct timeb tmBegin,tmEnd;
struct timeb tmBegin1,tmEnd1;
try
{
ftime(&tmBegin);
//更新演员的Actor_MediaSequences列和媒体对应的演员的Sequence
while(!pActorRecordset->adoEOF)
{
ftime(&tmBegin1);
bMediaBelongToActor = false;
memset(szActor_MediaSequences,0,sizeof(szActor_MediaSequences)); if(pActorRecordset->GetCollect("Actor_Sequence").lVal != vtRecordSequence.lVal)
{
GetPrivateProfileString("ERROR_DATABASE","Can_Not_Verify_Records1","无法验证数据是否正确,请使用备份数据库%s。",szTemp,sizeof(szTemp),m_szLocalizeFile);
sprintf(m_szErrorInfo,szTemp,m_szBackupDatabase);
return S_FALSE;
}
if(!pMediaRecordset->adoBOF)
pMediaRecordset->MoveFirst();
while(!pMediaRecordset->adoEOF)
{
bMediaBelongToActor = false;
bstrActor_Name = pActorRecordset->GetCollect("Actor_Name").bstrVal;
bstrTempActor_Name = pMediaRecordset->GetCollect("Media_ActorName1").bstrVal;
if(bstrActor_Name==bstrTempActor_Name)
{
pMediaRecordset->Fields->Item["Media_Actor1_Sequence"]->Value = vtRecordSequence; vtRecordSequence
bMediaBelongToActor = true;
}
bstrTempActor_Name = pMediaRecordset->GetCollect("Media_ActorName2").bstrVal;
if(bstrActor_Name==bstrTempActor_Name)
{
pMediaRecordset->Fields->Item["Media_Actor2_Sequence"]->Value = vtRecordSequence;
bMediaBelongToActor = true;
}
bstrTempActor_Name = pMediaRecordset->GetCollect("Media_ActorName3").bstrVal;
if(bstrActor_Name==bstrTempActor_Name)
{
pMediaRecordset->Fields->Item["Media_Actor3_Sequence"]->Value = vtRecordSequence;
bMediaBelongToActor = true;
}
bstrTempActor_Name = pMediaRecordset->GetCollect("Media_ActorName4").bstrVal;
if(bstrActor_Name==bstrTempActor_Name)
{
pMediaRecordset->Fields->Item["Media_Actor4_Sequence"]->Value = vtRecordSequence;
bMediaBelongToActor = true;
}
if(bMediaBelongToActor)
{
sprintf(szTempMediaSequence,"%ld,",pMediaRecordset->GetCollect("Media_Sequence").lVal);
strcat(szActor_MediaSequences,szTempMediaSequence);
}
pMediaRecordset->MoveNext();
}
pActorRecordset->Fields->Item["Actor_MediaSequences"]->Value = _bstr_t(szActor_MediaSequences);
pActorRecordset->MoveNext();
vtRecordSequence.lVal++;
ftime(&tmEnd1);
long lt = (tmEnd1.time - tmBegin1.time)*1000 + tmEnd1.millitm - tmBegin1.millitm;
}
pMediaRecordset->UpdateBatch(adAffectAll);
pActorRecordset->UpdateBatch(adAffectAll);
pActorRecordset->Release();
pMediaRecordset->Release();
ftime(&tmEnd);
long l = tmEnd.time - tmBegin.time;
int i = 0;
}
因为要操作的表含记录比较多。2112 X 17434 的效率太低了。求改进的办法。最好可以给点资料看看。谢谢了。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货