📄 comedit.pas
字号:
if intLeft + frmSetCal.Width > screen.Width then
intLeft := screen.Width - frmSetCal.Width - 2;
frmSetCal.Top := intTop;
frmSetCal.Left := intLeft;
frmSetCal.DataSet := TDBEdit(screen.ActiveControl).DataSource.DataSet;
frmSetCal.FieldName := TDBEdit(screen.ActiveControl).DataField;
frmSetCal.ShowModal;
end
end
else if screen.ActiveControl is TDBLookupComboBox then
TDBLookupComboBox(screen.ActiveControl).DropDown;
end;
if Shift = [ssCtrl] then
begin
case Key of
VK_PRIOR: DBNavigator1.BtnClick(nbFirst);
VK_NEXT: DBNavigator1.BtnClick(nbLast);
VK_UP: DBNavigator1.BtnClick(nbPrior);
VK_DOWN: DBNavigator1.BtnClick(nbNext);
end;
Key := 0;
end;
end;
//dsOnNewRecord
procedure TfrmComEdit.dsOnNewRecord(DataSet: TDataSet);
var
i: Integer;
strS: TStringList;
DBEditTmp: TDBEdit;
intdef: Integer;
begin
for i := 0 to self.ComponentCount - 1 do
begin
if (self.Components[i] is TDBRadioGroup) then
with TDBRadioGroup(Components[i]) do
ItemIndex := Tag;
if (self.Components[i] is TDBEdit) then
begin
DBEditTmp := TDBEdit(self.Components[i]);
if pblnLoadAppSelect then
if DBEditTmp.Field.DataType in [ftString, ftWideString] then
begin
Data.AppSelect.Close;
Data.AppSelect.CommandText := 'select * from AppSelect where DataSet = ''' +
DBEditTmp.DataSource.DataSet.Name + ''' and FieldName = ''' +
DBEditTmp.DataField + '''';
Data.AppSelect.Open;
intdef := Data.AppSelect.FieldByName('DefaultRow').AsInteger;
if (intDef > 0) and (intDef < 1000) then
begin
strS := TStringList.Create;
strS.Text := Data.AppSelect.FieldByName('DataSelect').Value;
if intDef <= strS.Count then
DBEditTmp.Field.AsString := strS[intDef-1];
end;
Data.AppSelect.CLose;
end;
if DBEditTmp.Field.DataType in [ftDate, ftDateTime] then
begin
with CurDs do
begin
CommandText := 'select * from AppDate where uId = ' + IntToStr(pintUserId) + ' and ' +
'DATASET = ''' + DBEditTmp.DataSource.DataSet.Name + ''' and ' +
'FIELDNAME = ''' + DBEditTmp.DataField + '''';
Open;
if not IsEmpty then
if FieldByName('DEFAULDATE').AsInteger = 1 then
DBEditTmp.Field.AsDateTime := Date
else
DBEditTmp.Field.AsDateTime := FieldByName('SETDATE').AsDateTime;
Close;
end;
end;
end;
end;
end;
//dsAfterInsert
procedure TfrmComEdit.dsAfterInsert(DataSet: TDataSet);
var
i: integer;
begin
for i := 0 to dsEdits.FieldCount - 1 do
arrEdits[i] := dsEdits.Fields[i].Value;
end;
//dsBeforeEdit
procedure TfrmComEdit.dsBeforeEdit(DataSet: TDataSet);
var
i: integer;
begin
for i := 0 to dsEdits.FieldCount - 1 do
arrEdits[i] := dsEdits.Fields[i].Value;
end;
//sDataChange
procedure TfrmComEdit.sDataChange(Sender: TObject; Field: TField);
begin
//
end;
//dsBeforePost
procedure TfrmComEdit.dsBeforePost(DataSet: TDataSet);
var
i : integer;
dsField: TField;
begin
for i := 0 to dsEdits.FieldCount - 1 do
if (dsEdits.Fields[i] is TNumericField) and not (dsEdits.Fields[i] is TAutoIncField) then
if dsEdits.Fields[i].Value = null then
dsEdits.Fields[i].Value := 0
else if TNumericField(dsEdits.Fields[i]).DisplayFormat <> '' then
dsEdits.Fields[i].AsString := FormatFloat(StringReplace(TNumericField(dsEdits.Fields[i]).DisplayFormat, ',', '', [rfReplaceAll]), dsEdits.Fields[i].Value);
//处理必填字段
for i := 0 to self.ComponentCount - 1 do
begin
dsField := nil;
if (self.Components[i] is TDBEdit) then
dsField := TDBEdit(self.Components[i]).Field
else if (self.Components[i] is TDBListBox) then
dsField := TDBListBox(self.Components[i]).Field
else if (self.Components[i] is TDBComboBox) then
dsField := TDBComboBox(self.Components[i]).Field
else if (self.Components[i] is TDBCheckBox) then
dsField := TDBCheckBox(self.Components[i]).Field
else if (self.Components[i] is TDBLookupListBox) then
dsField := TDBLookupListBox(self.Components[i]).Field
else if (self.Components[i] is TDBLookupComboBox) then
dsField := TDBLookupComboBox(self.Components[i]).Field;
if (dsField <> nil) and (dsField.DataSet = dsEdits) then
begin
if (Pos(UpperCase(dsField.FieldName) + ';', strKeyFields) <> 0) then
begin
if (dsField is TStringField) and (dsField.AsString = '')
or (dsField is TNumericField) and (dsField.AsFloat = 0)
or (dsField is TDateTimeField) and (dsField.value = null) then
begin
Application.MessageBox(Pchar('''' + dsField.DisplayLabel + '''未录入, 请继续录入!'), '录入错误', MB_OK + MB_ICONWARNING);
TWinControl(self.Components[i]).SetFocus;
abort;
end;
end;
end
end;
//Set ID
if blnSetID then
if DataSet.State in [dsInsert] then
SetFieldValue('select iif(isnull(max(ID)), 1, max(ID)+1) from ' +
Copy(TClientDataSet(DataSet).ProviderName, 2, Length(TClientDataSet(DataSet).ProviderName) - 1) + ' where ID > 0', DataSet, 'ID');
//
end;
//dsAfterPost
procedure TfrmComEdit.dsAfterPost(DataSet: TDataSet);
var
i, intIndex: integer;
strS: TStringList;
DBEditTmp: TDBEdit;
begin
for i := 0 to self.ComponentCount - 1 do
begin
if (self.Components[i] is TDBEdit) then
begin
DBEditTmp := TDBEdit(self.Components[i]);
if not DBEditTmp.Visible then
Continue;
if pblnSaveAppSelect then
if (DBEditTmp.Field.DataType in [ftString,ftWideString]) and
(DBEditTmp.Field.AsString <> '') then
begin
Data.AppSelect.Close;
Data.AppSelect.CommandText := 'select * from AppSelect where DataSet = ''' +
DBEditTmp.DataSource.DataSet.Name + ''' and FieldName = ''' +
DBEditTmp.DataField + '''';
Data.AppSelect.Open;
if Data.AppSelect.FieldByName('DataSet').AsString <> '' then
begin
if Data.AppSelect.FieldByName('AutoUpdate').AsBoolean then
begin
strS := TStringList.Create;
strS.Text := Data.AppSelect.FieldByName('DataSelect').Value;
intIndex := strS.IndexOf(DBEditTmp.Text);
if intIndex <> -1 then
strS.Delete(intIndex);
for intIndex := 19 to strS.Count - 1 do
strS.Delete(intIndex);
strS.Insert(0, DBEditTmp.Text);
SqlExec('update AppSelect set DataSelect = ''' + strS.Text +
''' where DataSet = ''' +
DBEditTmp.DataSource.DataSet.Name + ''' and FieldName = ''' +
DBEditTmp.DataField + '''');
end;
end else
SqlExec('insert into AppSelect (DataSet,FieldName,DataSelect,AutoUpdate) values ' +
'(''' + DBEditTmp.DataSource.DataSet.Name + ''',''' +
DBEditTmp.DataField + ''',''' + DBEditTmp.Text + ''',1)' );
Data.AppSelect.CLose;
end;
if (DBEditTmp.Field.DataType in [ftDate, ftDateTime]) and
(DBEditTmp.Field.AsDateTime <> 0) then
if pDataBaseType = 'SERVER' then
SqlExec('update AppDate set SETDATE = ''' + DBEditTmp.Text + ''' ' +
'where uId = ' + IntToStr(pintUserId) + ' and ' +
'DATASET = ''' + DBEditTmp.DataSource.DataSet.Name + ''' and ' +
'FIELDNAME = ''' + DBEditTmp.DataField + ''' and ' +
'DEFAULDATE = 2')
else
SqlExec('update AppDate set SETDATE = #' + DateToStr(strToDateTime(DBEditTmp.Text)) + '# ' +
'where uId = ' + IntToStr(pintUserId) + ' and ' +
'DATASET = ''' + DBEditTmp.DataSource.DataSet.Name + ''' and ' +
'FIELDNAME = ''' + DBEditTmp.DataField + ''' and ' +
'DEFAULDATE = 2');
end;
end;
end;
procedure TfrmComEdit.dsBeforeScroll(DataSet: TDataSet);
begin
//
end;
procedure TfrmComEdit.dsAfterScroll(DataSet: TDataSet);
begin
//
end;
procedure TfrmComEdit.dsAfterApplyUpdates(Sender: TObject;
var OwnerData: OleVariant);
begin
//
end;
//DBNavigator1.BeforeAction
procedure TfrmComEdit.DBNavigator1BeforeAction(Sender: TObject;
Button: TNavigateBtn);
begin
if dsEdits.State in [dsInsert,dsEdit] then
dsEdits.Post;
if dsEdits.ChangeCount > 0 Then
case Application.MessageBox('是否保存对当前资料的修改?', '资料保存',
MB_YESNOCANCEL + MB_ICONQUESTION + MB_DEFBUTTON1 ) of
IDYES:
begin
if dsEdits.State in [dsInsert,dsEdit] then
dsEdits.Post;
if dsEdits.ChangeCount > 0 Then
if dsEdits.ApplyUpdates(0) > 0 then
Abort;
MyAfterApplyUpdates;
end;
IDNO:
dsEdits.CancelUpdates;
else
abort;
end;
end;
procedure TfrmComEdit.MyAfterApplyUpdates;
begin
//
end;
function TfrmComEdit.OldValue(FileName: string): Variant;
begin
Result := arrEdits[ dsEdits.FieldByName(FileName).Index ];
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -