Рефераты. Программное обеспечение базы данный "Экологический мониторинг"






t_desc->listfield = mrT->FieldByName("listfield")->AsString;

t_desc->shortnamefield = mrT->FieldByName("shortnamefield")->AsString;

t_desc->sortfield = mrT->FieldByName("sortfield")->AsString;

t_desc->sequencename = mrT->FieldByName("sequencename")->AsString;

t_desc->readonly = mrT->FieldByName("readonly")->AsBoolean;

t_desc->takefieldsfrom = mrT->FieldByName("takefieldsfrom")->AsString;

t_desc->type = mrT->FieldByName("type")->AsString;

t_desc->hideonaccept = mrT->FieldByName("hideonaccept")->AsBoolean;

t_desc->parentfield = mrT->FieldByName("parentfield")->AsString;

} else

{

throw Exception("Ошибка: Форма {" + t_desc->formname + "} отсутствует");

}

} __finally

{

delete mrT;

}

}

//---------------------------------------------------------------------------

__fastcall TfrmUniForm::TfrmUniForm(TComponent* Owner, TMenuItem* itm, AnsiString formname)

: TForm(Owner)

{

this->itm = itm;

uid = "";

link = false;

desc = new TformDescription();

slv = NULL; lnk = NULL;

desc->formname = formname;

form->dsc = desc;

parentform = NULL;

if (itm) itm->Enabled = false;

accept = false;

btnlst = new TList();

fltlst = new TList();

fldlst = new TList();

UploadInfo();

}

//---------------------------------------------------------------------------

void __fastcall TfrmUniForm::UploadInfo()

{

UploadMetaInfo(desc, desc->formname);

this->Caption = desc->title;

form->editpanel->Caption = desc->edittitle;

form->dbgBrowse->Columns->Items[0]->FieldName = desc->listfield;

form->dbgBrowse->Columns->Items[0]->Title->Caption = "Название";

if (desc->readonly) { form->tblBrowse->ReadOnly = true; }

}

//---------------------------------------------------------------------------

void __fastcall TfrmUniForm::ReorderFilters()

{

for (int r=0; r<fltlst->Count; r++)

{

TfrmFilter* fr = ((TfrmFilter*)((TfltAddInfo*)fltlst->Items[r])->pntr);

fr->Align = alNone;

fr->Visible = false;

}

for (int r=0; r<fltlst->Count; r++)

{

TfrmFilter* fr = ((TfrmFilter*)((TfltAddInfo*)fltlst->Items[r])->pntr);

fr->Visible = true;

fr->Align = alTop;

}

}

//---------------------------------------------------------------------------

void __fastcall TfrmUniForm::Execute()

{

if (link)

{

form->Go();

// запомним мета-информацию по полям

int cnt = form->tblBrowse->Fields->Count;

TField **flms = new TField*[cnt];

for(int i = 0; i < cnt; i++)

{

TFieldType dtype = form->tblBrowse->Fields->Fields[i]->DataType;

if (dtype == ftInteger) flms[i] = new TIntegerField(this);

if (dtype == ftString) flms[i] = new TStringField(this);

if (dtype == ftFloat) flms[i] = new TFloatField(this);

if (dtype == ftDate) flms[i] = new TDateField(this);

if (dtype == ftDateTime) flms[i] = new TDateTimeField(this);

if (dtype == ftTime) flms[i] = new TTimeField(this);

flms[i]->Required = form->tblBrowse->Fields->Fields[i]->Required;

flms[i]->ReadOnly = form->tblBrowse->Fields->Fields[i]->ReadOnly;

flms[i]->FieldName = form->tblBrowse->Fields->Fields[i]->FieldName;

flms[i]->Size = form->tblBrowse->Fields->Fields[i]->Size;

flms[i]->Tag = (int)dtype;

}

form->tblBrowse->Close();

for(int i = 0; i < cnt; i++) flms[i]->DataSet = form->tblBrowse;

// добавим lookup-поле

TStringField *fld = new TStringField(form->tblBrowse);

fld->ReadOnly = true;

fld->FieldName = desc->listfield;

fld->FieldKind = fkLookup;

AnsiString tmp;

tmp = lnk->linktofield; StrRpl(tmp, ",", ";");

fld->KeyFields = tmp;

tmp = slv->keyfield; StrRpl(tmp, ",", ";");

fld->LookupKeyFields = tmp;

fld->LookupDataSet = form->tblAdd;

fld->LookupResultField = slv->listfield;

fld->Lookup = true;

if (form->tblAdd->Active)

fld->Size = form->tblAdd->FieldByName(slv->listfield)->Size;

fld->DataSet = form->tblBrowse;

form->dbgBrowse->Columns->Items[0]->FieldName = fld->FieldName;

form->dbgBrowse->Columns->Items[0]->Title->Caption = "Название";

}

AnsiString strw;

if (!accept || !desc->hideonaccept)

{

strw = "select * from buttons where parentform = '" + desc->formname + "' ";

if (!desc->takefieldsfrom.IsEmpty()) strw += "or parentform = '" + desc->takefieldsfrom + "' ";

strw += "order by sortorder desc";

if (SELECT(mqrA, strw))

{

do

{

TToolButton* btn = form->AddLinkBtn(mqrA->FieldByName("title")->AsString, CommonButtonClick);

TbtnAddInfo *inf = new TbtnAddInfo();

inf->childform = mqrA->FieldByName("childform")->AsString;

inf->childtitle = mqrA->FieldByName("childtitle")->AsString;

inf->linkform = mqrA->FieldByName("linkform")->AsString;

inf->linktofield = mqrA->FieldByName("linktofield")->AsString;

inf->linkfromfield = mqrA->FieldByName("linkfromfield")->AsString;

inf->type = mqrA->FieldByName("type")->AsString;

inf->sql = mqrA->FieldByName("sql")->AsString;

btn->Tag = btnlst->Add(inf);

mqrA->Next();

} while (!mqrA->Eof);

}

}

strw = "select * from filters where parentform = '" + desc->formname + "' ";

if (!desc->takefieldsfrom.IsEmpty()) strw += "or parentform = '" + desc->takefieldsfrom + "' ";

strw += "order by sortorder desc";

if (SELECT(mqrA, strw))

{

do

{

TfrmFilter* flt = form->AddFilter(mqrA->FieldByName("title")->AsString, CommonFilterChange, CommonFilterClear);

TfltAddInfo *inf = new TfltAddInfo();

inf->childform = mqrA->FieldByName("childform")->AsString;

inf->filtersql = mqrA->FieldByName("filtersql")->AsString;

inf->sql = mqrA->FieldByName("sql")->AsString;

inf->type = mqrA->FieldByName("type")->AsString;

inf->name = mqrA->FieldByName("name")->AsString;

inf->code = mqrA->FieldByName("code")->AsInteger;

inf->logic = mqrA->FieldByName("logic")->AsInteger;

inf->pntr = flt;

inf->retid = "";

if (inf->logic == 1) form->FilterBy("a" + IntToStr(inf->code), "(1=0)");

if (lnk)

if (inf->childform == lnk->parentform)

{

inf->retid = lnk->linkvalue;

inf->rettitle = lnk->linktitle;

flt->edt->Text = lnk->linktitle;

// в uid возвращается выбранный код

AnsiString str = inf->filtersql;

if (retid.IsEmpty()) str="";

else StrRpl(str, "%1", lnk->linkvalue);

form->FilterBy("a" + IntToStr(inf->code), str);

flt->btn->Enabled = false;

flt->btnclr->Enabled = false;

flt->Enabled = false;

}

flt->Tag = fltlst->Add(inf);

mqrA->Next();

} while (!mqrA->Eof);

}

if (!accept || !desc->hideonaccept)

{

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.