{
for (int r=0; r<fltlst->Count; r++)
TfrmFilter* fr = ((TfrmFilter*)((TfltAddInfo*)fltlst->Items[r])->pntr);
fr->Align = alNone;
fr->Visible = false;
}
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 + "' ";
TfrmFilter* flt = form->AddFilter(mqrA->FieldByName("title")->AsString, CommonFilterChange, CommonFilterClear);
TfltAddInfo *inf = new TfltAddInfo();
inf->filtersql = mqrA->FieldByName("filtersql")->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);
// подгрузка полей БД из имеющейся метаинформации
strw = "select * from fields where parentform = '" + desc->formname + "' ";
strw += "order by sortorder";
// сразу создадим все формы полей, инициализируем их, а также оставим ВСЮ семантику в этих формах
TfieldAddInfo *inf = new TfieldAddInfo();
inf->fieldname = mqrA->FieldByName("fieldname")->AsString;
inf->title = mqrA->FieldByName("title")->AsString;
inf->ReadOnly = mqrA->FieldByName("readonly")->AsBoolean;
inf->isqbe = mqrA->FieldByName("isqbe")->AsBoolean;
inf->value = mqrA->FieldByName("value")->AsString.Trim();
if (inf->type == (AnsiString)"T")
TfrmeFT *fr = new TfrmeFT(this, form->dsrcBrowse, inf);
fr->Parent = form->editarea; fr->Name = ""; fr->Align = alTop; inf->form = fr;
if ((inf->type == (AnsiString)"I") || (inf->type == (AnsiString)"S"))
TfrmeFV *fr = new TfrmeFV(this, form->dsrcBrowse, inf);
if (inf->type == (AnsiString)"C")
TfrmeFieldsN *fr = new TfrmeFieldsN(this, form->dsrcBrowse, inf);
if (inf->type == (AnsiString)"F") // поле интерпетируется на этапе подстановки при New,
{ // а также для фильтрации (т.е. используется для
// реализации ограниченных наборов)
form->FilterBy("flt_" + inf->fieldname, inf->sql);
if (inf->type == (AnsiString)"L")
TfrmeList *fr = new TfrmeList(this, form->dsrcBrowse, inf);
if (SELECT(mqrB, "select * from fieldelements where parentfield = " +
mqrA->FieldByName("code")->AsString + " order by sortorder"))
fr->AddElement(mqrB->FieldByName("title")->AsString, mqrB->FieldByName("value")->AsString);
mqrB->Next();
} while (!mqrB->Eof);
fr->Go();
mqrB->Close();
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10