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

📄 comdj.pas

📁 delphi作得信息业进销存源码.功能全面,运行稳定.
💻 PAS
📖 第 1 页 / 共 4 页
字号:
          'DATASET = ''' + DataSet.Name + ''' and ' +
          'FIELDNAME = ''' + DBGrid1.Columns[i].FieldName + ''' and ' +
          'DEFAULDATE = 2');
  end;
end;

//MxBeforeDelete
procedure TfrmComDj.MxBeforeDelete(DataSet: TDataSet);
var
  i : integer;
begin
  for i := 0 to dsMx.FieldCount - 1 do
  begin
    arrMx[i] := dsMx.Fields[i].Value;
    if (arrMx[i] = null) and (dsMx.Fields[i] is TNumericField) then
      arrMx[i] := 0;
  end;
end;

//MxAfterDelete
procedure TfrmComDj.MxAfterDelete(DataSet: TDataSet);
begin
  CanSave := true;
  SetButton;
  TotalField('D',nil);
end;

//MxBeforeCancel
procedure TfrmComDj.MxBeforeCancel(DataSet: TDataSet);
begin
  if DBGrid1.DataSource.State = Dsinsert then
  begin
    CancelEdit := False;
    TotalField('D',nil);
  end  else
    CancelEdit := true;
end;

//MxAfterCancel
procedure TfrmComDj.MxAfterCancel(DataSet: TDataSet);
begin
  if CancelEdit then
    TotalField('C',nil);
  CanSave := true;
  SetButton;
end;

//MxBeforeApplyUpdates
procedure TfrmComDj.MxBeforeApplyUpdates;
var
  bmMx: TBookMark;
  i, intHh: integer;
  strFields, strField: String;
  slZb, slMx: TStringList;
begin
	if (strZbMxKey = null) or (strZbMxKey = '') then
		Exit;
  strFields := strZbMxKey;
  slZb := TStringList.Create;
  slMx := TStringList.Create;
	while strFields <> '' do
  begin
		if Pos(';', strFields) <> 0 then
    begin
      strField := Copy(strFields, 1, Pos(';', strFields) - 1);
      strFields := Copy(strFields, Pos(';', strFields) + 1, Length(strFields));
    end else
    begin
      strField := strFields;
			strFields := '';
		end;
    slZb.Add(Trim(Copy(strField, 1, Pos(',', strField) - 1)));
    slMx.Add(Trim(Copy(strField, Pos(',', strField) + 1, Length(strField))));
  end;
  with dsMx do
  begin
    DisableControls;
    bmMx := GetBookmark;
    try
      First;
      intHh := 1;
      while not Eof do
      begin
        for i := 0 to slZb.Count - 1 do
          if FieldByName(slMx[i]).Value <> dsZb.FieldByName(slZb[i]).Value then
          begin
            Edit;
            FieldByName(slMx[i]).Value := dsZb.FieldByName(slZb[i]).Value;
            Post;
          end;
        if (strMxHh <> null) and (strMxHh <> '') then
          if FieldByName(strMxHh).AsInteger <> intHh then
          begin
            Edit;
            FieldByName(strMxHh).AsInteger := intHh;
            Post;
          end;
        inc(intHh);
        Next;
      end;
      GotoBookmark(bmMx);
    finally
      EnableControls;
      FreeBookmark(bmMx);
    end;
  end;
end;

//sZbStateChange
procedure TfrmComDj.sZbStateChange(Sender: TObject);
begin
  if TDatasource(Sender).State in [dsEdit, dsInsert] then
    CanSave := true;
end;

//sZbDataChange
procedure TfrmComDj.sZbDataChange(Sender: TObject; Field: TField);
begin
//
end;

//ZbOnNewRecord
procedure TfrmComDj.ZbOnNewRecord(DataSet: TDataSet);
var
  i : integer;
  strS: TStringList;
  intdef: integer;
begin
  for i := 0 to dsZb.FieldCount - 1 do
  begin
    if dsZb.Fields[i] is TNumericField then
      dsZb.Fields[i].Value := 0;
    if pblnLoadAppSelect then
      if dsZb.Fields[i].DataType in [ftString,ftWideString] then
      begin
        Data.AppSelect.Close;
        Data.AppSelect.CommandText := 'select * from AppSelect where DataSet = ''' +
          DataSet.Name + ''' and FieldName = ''' +
          dsZb.Fields[i].FieldName + '''';
        Data.AppSelect.Open;
        intdef := Data.AppSelect.FieldByName('DefaultRow').AsInteger;
        if intDef > 0 then
        begin
          strS := TStringList.Create;
          strS.Text := Data.AppSelect.FieldByName('DataSelect').Value;
          if intDef <= strS.Count then
            dsZb.Fields[i].AsString := strS[intDef-1];
        end;
        Data.AppSelect.CLose;
      end;
    if dsZb.Fields[i].DataType in [ftDate, ftDateTime] then
      with CurDs do
      begin
        CommandText := 'select * from AppDate where uId = ' + IntToStr(pintUserId) + ' and ' +
          'DATASET = ''' + DataSet.Name + ''' and ' +
          'FIELDNAME = ''' + dsZb.Fields[i].FieldName + '''';
        Open;
        if not IsEmpty then
          if FieldByName('DEFAULDATE').AsInteger = 1 then
            dsZb.Fields[i].AsDateTime := Date
          else
            dsZb.Fields[i].AsDateTime := FieldByName('SETDATE').AsDateTime;
        Close;
      end;
  end;
end;

//ZbBeforeEdit
procedure TfrmComDj.ZbBeforeEdit(DataSet: TDataSet);
begin
//
end;

//ZbBeforePost
procedure TfrmComDj.ZbBeforePost(DataSet: TDataSet);
var
  i : integer;
  dsField: TField;
begin
  for i := 0 to dsZb.FieldCount - 1 do
  begin
    if (dsZb.Fields[i] is TNumericField) and not (dsZb.Fields[i] is TAutoIncField) then
      if dsZb.Fields[i].Value = null then
        dsZb.Fields[i].Value := 0
      else if TNumericField(dsZb.Fields[i]).DisplayFormat <> '' then
        dsZb.Fields[i].AsString := FormatFloat(StringReplace(TNumericField(dsZb.Fields[i]).DisplayFormat, ',', '', [rfReplaceAll]), dsZb.Fields[i].Value)
  end;
//处理必填字段
  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 = dsZb) then
    begin
      if (Pos(UpperCase(dsField.FieldName) + ';', strZbKeyFields) <> 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 blnSetZbID 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;

//ZbAfterPost
procedure TfrmComDj.ZbAfterPost(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 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 = #' + DBEditTmp.Text + '# ' +
            'where uId = ' + IntToStr(pintUserId) + ' and ' +
            'DATASET = ''' + DBEditTmp.DataSource.DataSet.Name + ''' and ' +
            'FIELDNAME = ''' + DBEditTmp.DataField + ''' and ' +
            'DEFAULDATE = 2');
    end;
  end;
end;

//ZbBeforeScroll
procedure TfrmComDj.ZbBeforeScroll(DataSet: TDataSet);
begin
  if CanSave then
    SaveQuery;
end;

//ZbAfterScroll
procedure TfrmComDj.ZbAfterScroll(DataSet: TDataSet);
begin
  IniRecord;
end;

//SaveColumnQuery
procedure TfrmComDj.SaveColumnQuery;
var
  i: integer;
  strFileName: string;
  strOld, strNew: string;
begin
  if blnStopSetColumn then exit;
  for i := 0 to self.ComponentCount - 1 do
    if (self.Components[i] is TDBGrid) and (self.Components[i].Tag = 0) and
      (UpperCase(pstrUserCode) <> 'SYS') then
    begin
      strFileName := ExtractFilePath(Application.ExeName) + 'Column\' +
        FormatFloat('0000', pintUserID) +
        self.Name + TDBGrid(self.Components[i]).Name;
      TDBGrid(self.Components[i]).Columns.SaveToFile(strFileName + '.new');
      strOld := self.GetColumnInfo(strFileName + '.cur');
      strNew := self.GetColumnInfo(strFileName + '.new');
      if strOld <> strNew then
        if Application.MessageBox('是否保存对栏目布局的更改?',
          '栏目布局', MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON1) = IDYES then
          TDBGrid(self.Components[i]).Columns.SaveToFile(strFileName + '.cur');
    end;
end;

//GetColumnInfo
function TfrmComDj.GetColumnInfo(FileName: string): string;
var
  strTmp, strTxt: string;
  f: TextFile;
begin
  if FileExists(FileName) then
  begin
    strTxt := '';
    AssignFile(f, FileName);
    Reset(f);
    try
      while not Eof(f) do
      begin
        Readln(f, strTmp);
        strTxt := strTxt + strTmp;
      end;
    finally
      CloseFile(f);
    end;
    result := strTxt;
  end
  else
    result := '';
end;

function TfrmComDj.arMx(FileName: string): Variant;
begin
  Result := arrMx[ dsMx.FieldByName(FileName).Index ];
end;

//DBEdit.Exit
//ZB没有输入值时,自动弹出选择窗口
procedure TfrmComDj.DBEditExit(Sender: TObject);
begin
  if TDBEdit(Sender).Text = '' then
    TDBEdit(Sender).Perform(WM_LBUTTONDBLCLK, 0, 0);
end;

//DBGrid1.ColExit
//MX没有输入值时,自动弹出选择窗口
procedure TfrmComDj.DBGrid1ColExit(Sender: TObject);
begin
  if strMxHelpFields <> '' then
    if (DBGrid1.Columns[DBGrid1.SelectedIndex].ButtonStyle = cbsEllipsis) and
      (Pos(UpperCase(DBGrid1.SelectedField.FieldName) + ';', strMxHelpFields) > 0) and
      (DBGrid1.SelectedField.Text = '') then
      DBGrid1EditButtonClick(nil);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -