/************************************************************************************ 函数名称: void CFields::NewData() 功能说明:为一条记录分配一个新空间. 详细解释: 出入参数: [in]: 无. [out]:无. 返回类型:void. 制作:YTLI 2002/07/15 修改: ***********************************************************************************/ void CFields::NewData() { int nOldVersion = m_nCurVersion; SetCurVersion(); ClearAllVersionPointer(); for (int i= 0;i<m_FieldArray.GetSize();i++) { CField* pField = (CField*)m_FieldArray.GetAt(i); if(pField) pField->NewData(); } SetCurVersion(nOldVersion); }
/************************************************************************************ 函数名称: void CFields::Add(CField* Field) 功能说明:将字段Field加入到字段链表m_FieldList中. 详细解释: 出入参数: [in]: 1.Field:字段指针. [out]:无. 返回类型:void 制作:YTLI 2002/07/15 修改: ***********************************************************************************/ void CFields::Add(CField* pField) { if(!pField) return; m_FieldVersion.Add(pField); SetCurVersion(); }
/************************************************************************************ 函数名称: void CFields::DeleteData() 功能说明:删除当前记录. 详细解释: 出入参数: [in]: 无. [out]:无. 返回类型:void. 制作:YTLI 2002/07/15 修改: ***********************************************************************************/ void CFields::DeleteData() { int nOldVersion = m_nCurVersion; SetCurVersion(); for (int i= 0;i<m_FieldArray.GetSize();i++) { CField* pField = (CField*)m_FieldArray.GetAt(i); if(pField) pField->DeleteData(); } /* POSITION pos = m_FieldList.GetHeadPosition(); while(pos) { CField* pField = m_FieldList.GetNext(pos); if(pField) pField->DeleteData(); } */ SetCurVersion(nOldVersion); }
/************************************************************************************ 函数名称: 功能说明:字段移动 出入参数: [in]: 1.nFrom,原来的索引号 2.nTo,移动到的新的索引号(注意是相对老字段还在时的位置) 返回类型:void. 制作://#_S 2003-9-12 $ 10 zlq 修改: ************************************************************************************/ void CFields::Mov(int nFrom, int nTo) { m_FieldVersion.Mov(nFrom,nTo); SetCurVersion(); }
//字段类型修改 void CFields::Modify(int nIndex, CField* pNewField) { m_FieldVersion.Modify(nIndex,FieldByIndex(nIndex), pNewField); ///////////////////////////////////////////////{{lps added.2003/02/18 CField* pOldFld = FieldByIndex(nIndex); LPBYTE pOldValue = pNewField->m_pValue; POSITION posData = pNewField->m_ValueLabel.m_DataList.GetHeadPosition(); while(posData) { pNewField->m_pValue = (LPBYTE)pNewField->m_ValueLabel.m_DataList.GetNext( posData ); pNewField->RealDeleteData(); } pNewField->m_ValueLabel.m_DataList.RemoveAll(); pNewField->m_ValueLabel.m_strLabelList.RemoveAll(); posData = pOldFld->m_ValueLabel.m_DataList.GetHeadPosition(); int posStr = pOldFld->m_ValueLabel.m_strLabelList.GetSize(); int nPos = 0; while(posData != NULL && nPos < posStr) { LPBYTE pData = (LPBYTE)pOldFld->m_ValueLabel.m_DataList.GetNext( posData ); CTString strLabel = pOldFld->m_ValueLabel.m_strLabelList.GetAt(nPos); pOldFld->m_ValueLabel.m_pField->m_pValue = pData;//~~~~~~~~~~~~~~~~~~~~~~~~~ pNewField->RealNewData(); //从日期字段转化到其他类型,或者从其他字段转化到日期字段. if((pOldFld->GetFieldType() == fDate) ||(pNewField->GetFieldType() == fDate)) { FILETIME ftValue = pOldFld->m_ValueLabel.m_pField->GetAsDateTime(); //填入不成功,则m_pValue无效. if(!pNewField->SetAsDateTime(&ftValue)) { pNewField->m_pValue = pOldValue; pNewField->RealDeleteData(); continue; } } else { CTString strr = pOldFld->m_ValueLabel.m_pField->GetAsString(); //填入不成功,则m_pValue无效.此时的原则:留下可以转换的,抛弃无法转化的. //比如fString型串"2002/01/30"转换为fInt,fDouble等时将为false. if(!pNewField->SetAsString(strr)) { pNewField->m_pValue = pOldValue; pNewField->RealDeleteData(); continue; } } pNewField->m_ValueLabel.m_DataList.AddTail(pNewField->m_pValue); //取得label字符串然后添加在当前对象中相应的链表中 // CTString str = pValueLabel->m_strLabelList.GetNext(posStr); pNewField->m_ValueLabel.m_strLabelList.Add(strLabel); nPos++; } //assert(posData == NULL && posStr == NULL); pNewField->m_pValue = pOldValue; ///////////////////////////////////////////////}} SetCurVersion(); }
//在nIndex处插入一个字段. void CFields::Insert(CField* pField , int nIndex) { m_FieldVersion.Insert(pField , nIndex); SetCurVersion(); }
//删除在nIndex处的一个字段. bool CFields::Delete(int nIndex ) { m_FieldVersion.Delete(nIndex); SetCurVersion(); return true; }
/*********************************************************************************** * ����� ���� ����� */ void CVFS_Manager::SetCurVersion (DWORD dwVersion) { SetCurVersion ( HIWORD(dwVersion), LOWORD(dwVersion) ); }