예제 #1
0
//---------------------------------------------------------------------------
//
//---------------------------------------------------------------------------
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();
	 }
  }
}
예제 #2
0
// Возвращаем датасет
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;
}