⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comedit.pas

📁 delphi作得信息业进销存源码.功能全面,运行稳定.
💻 PAS
📖 第 1 页 / 共 2 页
字号:
            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 + -