// Возвращаем датасет 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; }
//--------------------------------------------------------------------------- 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(); } }
//--------------------------------------------------------------------------- // //--------------------------------------------------------------------------- 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(); } } }
//--------------------------------------------------------------------------- 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; } }
//--------------------------------------------------------------------------- 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; } }
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; }
//--------------------------------------------------------------------------- //如果不保存到字段中,从文件读取 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(); } }