📄 comdj.pas
字号:
'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 + -