//--------------------------------------------------------------------------- // //--------------------------------------------------------------------------- void __fastcall ASEditSvr::FieldChanged(int adsIndex,String asFieldName,String asOldValue ,String asNewValue){ _di_IXMLNode lParentNode,lNode; lParentNode = Def->SubDefNode["DATASETS.RELATIONS"]; if(!lParentNode) return; int lIndex,lMasterIndex; String lsFieldName,lsMasterField; for(int i=0;i<lParentNode->ChildNodes->Count;i++) { lNode = lParentNode->ChildNodes->Nodes[i]; if(!BLNODEATTIS(lNode,"ISEDITOR","TRUE")) continue; if(!BLNODEATTIS(lNode,"MASTERTYPE","EDIT")) continue; lMasterIndex = BLNODEATTINT(lNode,"MASTERINDEX") -1; if(lMasterIndex != adsIndex) continue; PCTools::SeparateStr(BLNODEATT(lNode,"RELFIELDS"),"=",lsFieldName,lsMasterField); if(!BLSAMESTR(asFieldName,lsMasterField)) continue; lIndex = BLNODEATTINT(lNode,"DSINDEX" ) - 1; TClientDataSet *lds = GetDataSetSvrByDefIndex(lIndex)->DataSet->DataSet; lds->First(); TField *lField =lds->FieldByName(lsFieldName); while(!lds->Eof) { if( lField->AsString == asOldValue) { lds->Edit(); lField->AsString = asNewValue; lds->Post(); } lds->Next(); } } }
// Возвращаем датасет TClientDataSet* __fastcall TdmConnect::DataSetExec(TIBSQL *SQL) { Query->Close(); Query->SQL->Text = SQL->SQL->Text; Query->Open(); // создаем поля датасета TClientDataSet *Res = new TClientDataSet(0); TFieldDefs *pDefs=Res->FieldDefs; for(int i=0; i<Query->FieldCount; ++i) { TField *Field=Query->Fields->Fields[i]; TFieldDef *pDef=pDefs->AddFieldDef(); pDef->Name = Field->FieldName; pDef->DataType = Field->DataType; pDef->Size = Field->Size; } Query->Close(); // тянем данные Res->CreateDataSet(); Res->LogChanges = false; for(SQL->ExecQuery(); !SQL->Eof; SQL->Next()) { Res->Append(); for(int i=0; i<Res->FieldCount; ++i) Res->Fields->Fields[i]->Value = SQL->Fields[i]->Value; Res->Post(); } SQL->Close(); Res->First(); return Res; }