📄 frame_usingleedit.~pas
字号:
unit frame_uSingleEdit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, db, frame_uTradeBase, ImgList, ComCtrls, Grids, DBGridEh,
PDBGridEh, StdCtrls, Buttons,frame_utilfunc, ExtCtrls, dcfdes, dcddes,ADOXQuery,
ADODB;
type
Tframe_frmsingleedit = class(Tframe_frmTradeBase)
btnsave: TBitBtn;
btncancel: TBitBtn;
tmpqry: TADOXQuery;
procedure FormShow(Sender: TObject);
procedure btnsaveClick(Sender: TObject);
procedure btncancelClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
miniTabcomp:TwinControl;
public
{ Public declarations }
addstate:boolean;
mydg: Tdbgrideh;
procedure showdata;
function datachange():boolean;
function validate:boolean;virtual;
procedure beforepost;virtual;
procedure showcaption;
end;
var
frame_frmsingleedit: Tframe_frmsingleedit;
implementation
uses frame_uDM;
{$R *.dfm}
procedure Tframe_frmsingleedit.FormShow(Sender: TObject);
var
i, j: integer;
begin
inherited;
showcaption;
showdata;
if (dsinsert= mydg.DataSource.DataSet.State) then addstate:=true
else addstate:=false;
// mydg.DataSource.DataSet.Cancel;
end;
procedure Tframe_frmsingleedit.showcaption;
var
i, j: integer;
begin
for i := 0 to (Componentcount - 1) do
begin
if (Components[i] is TLabel) then
begin
for j := 0 to (mydg.Columns.Count - 1) do
begin
if Uppercase('lbl' + mydg.Fields[j].FieldName) = uppercase(Components[i].Name) then
begin
(Components[i] as TLabel).caption := mydg.Columns[j].Title.Caption;
end;
end;
end;
if (Components[i] is TLabeledEdit) then
begin
for j := 0 to (mydg.Columns.Count - 1) do
begin
if Uppercase('edt' + mydg.Fields[j].FieldName) = uppercase(Components[i].Name) then
begin
(Components[i] as TLabeledEdit).EditLabel.Caption := mydg.Columns[j].Title.Caption;
end;
end;
end;
end;
end;
procedure Tframe_frmsingleedit.showdata;
var
i, j: integer;
begin
for i := 0 to (Componentcount - 1) do
begin
if (Components[i] is TEdit) then
begin
for j := 0 to (mydg.Columns.Count - 1) do
begin
if Uppercase('edt' + mydg.Fields[j].FieldName) = uppercase(Components[i].Name) then
begin
(Components[i] as TEdit).Text := mydg.Columns[j].Field.AsString;
end;
end;
end;
if (Components[i] is Tmemo) then
begin
for j := 0 to (mydg.Columns.Count - 1) do
begin
if Uppercase('mmo' + mydg.Fields[j].FieldName) = uppercase(Components[i].Name) then
begin
(Components[i] as Tmemo).Text := mydg.Columns[j].Field.AsString;
end;
end;
end;
if (Components[i] is TComboBox) then
begin
for j := 0 to (mydg.Columns.Count - 1) do
begin
if Uppercase('cbb' + mydg.Fields[j].FieldName) = uppercase(Components[i].Name) then
begin
(Components[i] as TComboBox).itemindex := (Components[i] as TComboBox).items.indexof(mydg.Columns[j].Field.AsString);
end;
end;
end;
if (Components[i] is TLabeledEdit) then
begin
for j := 0 to (mydg.Columns.Count - 1) do
begin
if Uppercase('edt' + mydg.Fields[j].FieldName) = uppercase(Components[i].Name) then
begin
(Components[i] as TLabeledEdit).Text := mydg.Columns[j].Field.AsString;
end;
end;
end;
end;
end;
function Tframe_frmsingleedit.datachange():boolean;
var
i, j: integer;
begin
result:=false;
for i := 0 to (Componentcount - 1) do
begin
if (Components[i] is TEdit) then
begin
for j := 0 to (mydg.Columns.Count - 1) do
begin
if Uppercase('edt' + mydg.Fields[j].FieldName) = uppercase(Components[i].Name) then
begin
if (Components[i] as TEdit).Text <> mydg.Columns[j].Field.AsString then
begin
result:=true;
break;
end;
end;
end;
end;
if (Components[i] is Tmemo) then
begin
for j := 0 to (mydg.Columns.Count - 1) do
begin
if Uppercase('mmo' + mydg.Fields[j].FieldName) = uppercase(Components[i].Name) then
begin
if (Components[i] as Tmemo).Text <> mydg.Columns[j].Field.AsString then
begin
result:=true;
break;
end;
end;
end;
end;
if (Components[i] is Tcombobox) then
begin
for j := 0 to (mydg.Columns.Count - 1) do
begin
if Uppercase('cbb' + mydg.Fields[j].FieldName) = uppercase(Components[i].Name) then
begin
if (Components[i] as Tcombobox).Text <> mydg.Columns[j].Field.AsString then
begin
result:=true;
break;
end;
end;
end;
end;
if (Components[i] is TLabeledEdit) then
begin
for j := 0 to (mydg.Columns.Count - 1) do
begin
if Uppercase('edt' + mydg.Fields[j].FieldName) = uppercase(Components[i].Name) then
begin
if (Components[i] as TLabeledEdit).Text <> mydg.Columns[j].Field.AsString then
begin
result:=true;
break;
end;
end;
end;
end;
end;
end;
procedure Tframe_frmsingleedit.btnsaveClick(Sender: TObject);
var
i,j:integer;
mainqry:TADOXQuery;
begin
if not validate then exit;
inherited;
// 取得access表的seqn
if addstate and (SysParam.dbType='access') then
begin
mainqry:=(mydg.DataSource.DataSet) as (tAdoxquery);
tmpqry.Connection:=frame_dm.con as TADOConnection;
opensql(tmpqry,'select max('+mainqry.SqlKeyField+') from '+mainqry.SqlUpdateTable,[]);
if (FindComponent('edt'+mainqry.SqlKeyField)<>nil) then
begin
(FindComponent('edt'+mainqry.SqlKeyField) as TEdit).Text:=inttostr(tmpqry.Fields[0].Asinteger+1);
end;
end;
// 保存前处理。
beforepost;
//初始化控件
for i := 0 to (Componentcount - 1) do
begin
if (Components[i] is TEdit) then
begin
for j := 0 to (mydg.Columns.Count - 1) do
begin
if Uppercase('edt' + mydg.Fields[j].FieldName) = uppercase(Components[i].Name) then
begin
mydg.Columns[j].Field.AsString := (Components[i] as TEdit).Text;
if addstate then (Components[i] as TEdit).Text:='';
if (minitabcomp=nil) then
begin
minitabcomp:=components[i] as Twincontrol;
end
else
if (minitabcomp.taborder>(components[i] as Twincontrol).TabOrder) then begin
minitabcomp:=components[i] as Twincontrol;
end;
end;
end;
end;
if (Components[i] is Tcombobox) then
begin
for j := 0 to (mydg.Columns.Count - 1) do
begin
if Uppercase('cbb' + mydg.Fields[j].FieldName) = uppercase(Components[i].Name) then
begin
mydg.Columns[j].Field.AsString := (Components[i] as Tcombobox).Text;
if addstate then (Components[i] as Tcombobox).itemindex:=-1;
if (minitabcomp=nil) then
begin
minitabcomp:=components[i] as Twincontrol;
end
else
if (minitabcomp.taborder>(components[i] as Twincontrol).TabOrder) then begin
minitabcomp:=components[i] as Twincontrol;
end;
end;
end;
end;
if (Components[i] is Tmemo) then
begin
for j := 0 to (mydg.Columns.Count - 1) do
begin
if Uppercase('mmo' + mydg.Fields[j].FieldName) = uppercase(Components[i].Name) then
begin
mydg.Columns[j].Field.AsString := (Components[i] as Tmemo).Text;
if addstate then (Components[i] as Tmemo).Text:='';
if (minitabcomp=nil) then
begin
minitabcomp:=components[i] as Twincontrol;
end
else
if (minitabcomp.taborder>(components[i] as Twincontrol).TabOrder) then begin
minitabcomp:=components[i] as Twincontrol;
end;
end;
end;
end;
if (Components[i] is TLabeledEdit) then
begin
for j := 0 to (mydg.Columns.Count - 1) do
begin
if Uppercase('edt' + mydg.Fields[j].FieldName) = uppercase(Components[i].Name) then
begin
mydg.Columns[j].Field.AsString := (Components[i] as TLabeledEdit).Text;
if addstate then (Components[i] as TLabeledEdit).Text:='';
if (minitabcomp=nil) then
begin
minitabcomp:=components[i] as Twincontrol;
end
else
if (minitabcomp.taborder>(components[i] as Twincontrol).TabOrder) then begin
minitabcomp:=components[i] as Twincontrol;
end;
end;
end;
end;
end;
mydg.DataSource.DataSet.Post;
if addstate then
begin
if QueryDlg('继续增加?',False) then
begin
minitabcomp.SetFocus;
mydg.DataSource.DataSet.append
end
else
begin
Close;
end;
end
else
begin
// mydg.DataSource.DataSet.edit;
InfoOk('修改成功!');
close;
end;
end;
procedure Tframe_frmsingleedit.btncancelClick(Sender: TObject);
begin
inherited;
close;
end;
procedure Tframe_frmsingleedit.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
if (mydg.datasource.DataSet.State in [dsedit,dsinsert]) then
begin
if datachange then
begin
canclose:= querydlg('数据已经修改,确定要退出吗?',True);
end;
end;
if canclose then mydg.datasource.DataSet.Cancel;
end;
function Tframe_frmsingleedit.validate: boolean;
begin
result:=true;
end;
procedure Tframe_frmsingleedit.beforepost;
begin
Application.ProcessMessages;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -