Пример из рабочего исходника:
| Код | procedure TFormSimpleList.FormShow(Sender: TObject); var I:integer; S:String; Ins:String; InsVal:String; Updt:String; Col:TColumnEh; LX:TLabel; DBX:TDBEdit; begin Height := MinHeight ; /// подготовим список полей Ins:='';InsVal:='';Updt:=''; if ListFields.Count>0 then begin for I:=0 to Pred(ListFields.Count) do Begin S:=Trim(ListFields.Names[I]); Ins:=Ins + ', '+S; InsVal := InsVal + ', :'+S; Updt := Updt + ', '+S+' = :'+S End; S := ExtForSQLs; if S<>'' then Begin Ins:=Ins + ', '+S; InsVal := InsVal + ', :'+S; Updt := Updt + ', '+S+' = :'+S End; Delete(Ins,1,2); Delete(InsVal,1,2); Delete(Updt,1,2) end; /// сгенерируем запросы GenerateSelect(Ins,InsVal); IBDataSet1.InsertSQL.Text := 'insert into '+SourceName+ ' ('+Ins+') values ('+InsVal+')'; IBDataSet1.DeleteSQL.Text := 'delete from '+SourceName+ ' where ID = :OLD_ID'; IBDataSet1.RefreshSQL.Text :='select * from '+SourceName+ ' where ID = :ID'; IBDataSet1.ModifySQL.Text := 'update '+SourceName+' set '+Updt+ ' where ID = :OLD_ID'; IBQuery1.SQL.Text := 'Select Max(ID) As MAX_ID From '+SourceName; /// настроем визуальный элемент if ListFields.Count>0 then Begin SetLength(LabelX,ListFields.Count); SetLength(DBEditX,ListFields.Count); for I:=0 to Pred(ListFields.Count) do Begin S:=ListFields.Names[I]; Col := DBGridEh1.Columns.Add; Col.Title.Caption := Trim(ListFields.Values[S]); Col.Title.Alignment := taCenter; Col.Title.TitleButton := True; Col.FieldName := Trim(S); Col.Width := StrToInt(FieldsWidth.Values[S]); if Col.FieldName = FBoolField then begin // Логическое поле Col.Checkboxes := True; With Col.KeyList Do Begin Clear; Add('Y'); Add('N') End; DBCheck := TCheckBox.Create(GroupBox1); DBCheck.Parent := GroupBox1; DBCheck.Caption := Col.Title.Caption; DBCheck.Left := 10; DBCheck.Top := 20 + 30*I; DBCheck.Width := GroupBox1.Width - 40; DBCheck.OnClick := OnChangeDBCheckBox; End Else begin /// ========================================== LX := TLabel.Create(GroupBox1); LX.Parent := GroupBox1; LX.Caption := Col.Title.Caption; LX.Left := 10; LX.Top := 20 + 30*I; LabelX[I] := LX; /// ========================================== DBX := TDBEdit.Create(GroupBox1); DBX.Parent := GroupBox1; DBX.DataSource := DataSource1; DBX.DataField := Trim(S); DBX.Left := 200; DBX.Width := 320; DBX.Top := 15 + 30*I; DBEditX[I] := DBX End end; BitBtn4.Top := 50 + 30*Pred(ListFields.Count); BitBtn5.Top := 50 + 30*Pred(ListFields.Count); GroupBox1.Height := 85 + 30*Pred(ListFields.Count); MaxHeight := 250 + 30*Pred(ListFields.Count) end; /// собственно откроем набор данных IBDataSet1.Active := True; EditMode(True); Caption := NameOfRef end;
|
|