예제 #1
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;
}
예제 #2
0
//---------------------------------------------------------------------------
void __fastcall ASEditDataSetAttachment::saveToFile(){
   if(fFilePathExp.IsEmpty()) return;
   TClientDataSet *lds = fEditorDS->DataSetSvr->DataSet->DataSet;
   lds->First();
   TField * lBlobField = lds->FieldByName(fBlobFieldName);
   if(!lBlobField) throw	Exception("二进制字段不存在" + fFileNameField +"或者" + fBlobFieldName);
   while(!lds->Eof){
	  String lsPath = getFilePath(fEditorDS->DataSetSvr->DataSet->IDs);
	  if(FileExists(lsPath)) DeleteFile(lsPath);
	  if(lds->UpdateStatus() == usDeleted ){
		 lds->Next();
		 continue;
	  }
	  if(!lBlobField->IsNull){  //
		  if(fIsImage) //图片
			   ((TGraphicField *)lBlobField)->SaveToFile(lsPath);
		   else //附件
			   PCCompressor::DeCompressStringToBinFile(lsPath,lBlobField->AsString);
		  if(fNotSaveInField){
			 fEditorDS->DataSetSvr->DataSet->beginEdit();
			 lBlobField->Clear();
			 fEditorDS->DataSetSvr->DataSet->endEdit();

		  }

	  }
	  lds->Next();
   }
}
예제 #3
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();
	 }
  }
}
예제 #4
0
//---------------------------------------------------------------------------
void  __fastcall ASEditRefValues::fieldChanged(int aSource,String asFieldName,String asOldValue,String asNewValue){
	if(!fTargetDS->SaveToDB) return;
	if(!BLSAMESTR(fSourceFieldName,asFieldName) || aSource != fSourceIndex ) return;
	TClientDataSet * lTargetds = fTargetDS->DataSetSvr->DataSet->DataSet;
	int lRecNo =  lTargetds->RecNo;
	TField *lTarget = lTargetds->FieldByName(fTargetFieldName);
	try{
		lTargetds->First();
		while(!lTargetds->Eof){
			if(BLSAMESTR(asOldValue,lTarget->AsString) || aSource == 0) {
				fTargetDS->DataSetSvr->DataSet->beginEdit();
				lTarget->AsString = asNewValue;
				fTargetDS->DataSetSvr->DataSet->endEdit();
			}
			lTargetds->Next();
		}
	}
	__finally{
		if(lRecNo >0)
			lTargetds->RecNo = lRecNo;
	}
}
예제 #5
0
//---------------------------------------------------------------------------
void  __fastcall ASEditRefValues::fillFirstDataSetValue(){
	if( fSourceIndex != 0) return;
	if(!fTargetDS->SaveToDB) return;
	TClientDataSet * lTargetds = fTargetDS->DataSetSvr->DataSet->DataSet;
	int lRecNo =  lTargetds->RecNo;
	TField *lTarget = lTargetds->FieldByName(fTargetFieldName);
	TField *lSource= fTargetDS->Editor->DataSets[0]->DataSet->DataSet->FieldByName(fSourceFieldName);
	try{
		lTargetds->First();
		while(!lTargetds->Eof){
			fTargetDS->DataSetSvr->DataSet->beginEdit();
			lTarget->Value = lSource->Value;
			fTargetDS->DataSetSvr->DataSet->endEdit();
			lTargetds->Next();
		}
	}
	__finally{
		if(lRecNo >0)
			lTargetds->RecNo = lRecNo;
	}

}
예제 #6
0
bool __fastcall TSaveObj::CopyInfo()
{
  
  int len = FDataSetArr.Length;
  int i;
  for (i=0; i<len; i++)
  {              
      if (!FDataSetArr[i]->Active)  continue;
      if (FDataSetArr[i]->IsEmpty())  continue;
      if (!IsInArr(FDataSetArr[i]->Name,FWhileCDS,true))
      {

         InsertDataSet(FDataSetArr[i],FDataSetArr[i]);
      }
      else
      {

         TClientDataSet* cds;
         try
         {
             cds = new TClientDataSet(NULL);
             cds->Data = FDataSetArr[i]->Data;
             FDataSetArr[i]->EmptyDataSet();
             
             cds->First();
             while (!cds->Eof)
             {
                InsertDataSet(cds,FDataSetArr[i]);
                cds->Next();
             }
         }
         __finally
         {
             delete cds;
         }
      }  
  }
  return true;
}
예제 #7
0
//---------------------------------------------------------------------------
//如果不保存到字段中,从文件读取
void __fastcall ASEditDataSetAttachment::loadFromFile() {
   if(fFilePathExp.IsEmpty()) return;
   if(!fNotSaveInField) return;
   TClientDataSet *lds = fEditorDS->DataSetSvr->DataSet->DataSet;
   lds->First();
   TField * lBlobField = lds->FieldByName(fBlobFieldName);
   if(!lBlobField) throw	Exception("二进制字段不存在" + fFileNameField +"或者" + fBlobFieldName);
   while(!lds->Eof){
	  String lsPath = getFilePath(fEditorDS->DataSetSvr->DataSet->IDs);
	  if(!FileExists(lsPath)){
		 lds->Next();
		 continue;
	  }
	  fEditorDS->DataSetSvr->DataSet->beginEdit();
	  if(fIsImage) //图片
		   ((TGraphicField *)lBlobField)->LoadFromFile(lsPath);
	   else //附件
		   lBlobField->AsString = PCCompressor::CompressBinFileToString(lsPath);
	  fEditorDS->DataSetSvr->DataSet->endEdit();
	  lds->Next();
   }

}