遇到一个棘手的问题。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 的效率太低了。求改进的办法。最好可以给点资料看看。谢谢了。