📄 dataedit_baseunt.pas
字号:
unit DataEdit_BaseUnt;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, FormBase_Unt, StdCtrls, Buttons, ExtCtrls, DB, Grids, DBGrids,
ADODB,ComObj;
type
//TInfo=record
//Tag:integer;
//Left:integer;
//Top:integer;
//Height:integer;
//Width:integer;
//end;
TDataEdit_BaseFrm = class(TFormBase_Frm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
BitBtn5: TBitBtn;
BitBtn6: TBitBtn;
BitBtn7: TBitBtn;
Base_DataS: TDataSource;
DBGrid1: TDBGrid;
BitBtn8: TBitBtn;
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn5Click(Sender: TObject);
procedure BitBtn6Click(Sender: TObject);
procedure BitBtn7Click(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtn8Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure SetControl;
//删除数据表中的记录,并把当前指针指向被删除的记录的相应位置:
//若被删除的记录为第一条记录,则删除后当前指针指向删除后表中的第一条记录
//若删除的记录的上一条有记录,则删除后当前指针指向上一条记录
function DelRecord(Tabl:TDataSet):boolean;
//数据表中的记录修改确定
function ModifyRec(Tabl:TDataSet):boolean;
//
function GetLastRecId(AdoTabl:TDataSet;FieldStr:String):variant;
end;
var
DataEdit_BaseFrm: TDataEdit_BaseFrm;
implementation
{$R *.dfm}
procedure TDataEdit_BaseFrm.BitBtn2Click(Sender: TObject);
begin
DelRecord(Base_DataS.DataSet);
end;
procedure TDataEdit_BaseFrm.BitBtn3Click(Sender: TObject);
var i:integer;
begin
try
Base_DataS.DataSet.Post;
except
Base_DataS.DataSet.Cancel;
showmessage('没有进行修改或者数据内容填写有误,数据库更新没有成功!');
end;
for i:=1 to Panel2.ControlCount do
begin
if (Panel2.Controls[i-1].Tag>=0)and(Panel2.Controls[i-1].ClassType<>TLabel)
and(Panel2.Controls[i-1].ClassType<>TDBGrid)and(Panel2.Controls[i-1].ClassType<>TBitBtn) then
Panel2.Controls[i-1].Enabled:=false;
end;
BitBtn3.Enabled:=false;
DBGrid1.ReadOnly:=true;
DBGrid1.Enabled:=true;
BitBtn1.Enabled:=true;
BitBtn2.Enabled:=true;
BitBtn4.Enabled:=true;
BitBtn5.Enabled:=true;
BitBtn6.Enabled:=true;
BitBtn7.Enabled:=true;
BitBtn8.Enabled:=true;
BitBtn1.SetFocus;
end;
procedure TDataEdit_BaseFrm.BitBtn4Click(Sender: TObject);
begin
inherited;
try
Base_DataS.DataSet.Prior;
except
showmessage('数据库未连接正确!');
end;
end;
procedure TDataEdit_BaseFrm.BitBtn5Click(Sender: TObject);
begin
inherited;
try
Base_DataS.DataSet.Next;
// DBGrid1.SelectedRows.
except
showmessage('数据库未连接正确!');
end;
end;
procedure TDataEdit_BaseFrm.BitBtn6Click(Sender: TObject);
begin
inherited;
try
Base_DataS.DataSet.First;
except
showmessage('数据库未连接正确!');
end;
end;
procedure TDataEdit_BaseFrm.BitBtn7Click(Sender: TObject);
begin
inherited;
try
Base_DataS.DataSet.Last;
except
showmessage('数据库未连接正确!');
end;
end;
procedure TDataEdit_BaseFrm.SetControl; //排列Panel2上的控件
var
i,j,m,n,MaxRow,RowHeight,t:integer;
ColumnCount:array of integer;
ColumnWidth:array of integer;
//ControlInfo:array of TInfo;
begin
DBGrid1.Left:=Panel2.Left+4;
DBGrid1.Top:=Panel2.Top+round(Panel2.Height/2);
DBGrid1.Width:=Panel2.Width-8;
DBGrid1.Height:=round(Panel2.Height/2)-4;
MaxRow:=0;
//SetLength(ControlInfo,t+1);//记录控件的信息
for i:=1 to Panel2.ControlCount do
begin
if (Panel2.Controls[i-1].Tag div 10)>MaxRow
then MaxRow:=Panel2.Controls[i-1].Tag div 10;
end;
if MaxRow>0 then RowHeight:=round((DBGrid1.Top-Panel2.Top)/MaxRow)
else exit;
SetLength(ColumnCount,MaxRow+1);
SetLength(ColumnWidth,MaxRow+1);
for i:=1 to MaxRow do
begin
ColumnCount[i]:=0;
ColumnWidth[i]:=0;
for j:=1 to Panel2.ControlCount do
begin
m:=Panel2.Controls[j-1].Tag div 10;
if m=i then
begin
ColumnCount[i]:=ColumnCount[i]+1;
end;
end;
ColumnWidth[i]:=round(Panel2.Width/ColumnCount[i]);
end;
//逐行对面板上的控件按照各自Tag值的含义排列成MaxRow行
//先排列Tlabel控件
for i:=1 to MaxRow do
begin
for j:=1 to Panel2.ControlCount do
begin
if Panel2.Controls[j-1].ClassType<>TLabel then continue;
m:=Panel2.Controls[j-1].Tag div 10;
n:=Panel2.Controls[j-1].Tag mod 10;
if (m=i)and(n>0) then
begin
if Panel2.Controls[j-1].Height>round(4*RowHeight/5) then
Panel2.Controls[j-1].Height:=round(4*RowHeight/5);
//ControlInfo[j].Height:=Panel2.Controls[j-1].Height;
Panel2.Controls[j-1].Width:=round(4*ColumnWidth[i]/5);
//ControlInfo[j].Width:=Panel2.Controls[j-1].Width;
//Panel2.Controls[j-1].Top:=Panel2.Top+(i-1)*RowHeight+
//round((RowHeight/2)-(Panel2.Controls[j-1].Height));
Panel2.Controls[j-1].Top:=Panel2.Top+(i-1)*RowHeight+
round(RowHeight/5);
Panel2.Controls[j-1].Left:=Panel2.Left+
n*ColumnWidth[i]-round(6*Panel2.Controls[j-1].Width/5);
end;
end;
end;
//排列非TLabel控件
for i:=1 to MaxRow do
begin
for j:=1 to Panel2.ControlCount do
begin
if Panel2.Controls[j-1].ClassType=TLabel then continue;
m:=Panel2.Controls[j-1].Tag div 10;
n:=Panel2.Controls[j-1].Tag mod 10;
if (m=i)and(n>0) then
begin
if Panel2.Controls[j-1].Height>RowHeight-4 then
Panel2.Controls[j-1].Height:=round(4*RowHeight/5);
Panel2.Controls[j-1].Width:=round(4*ColumnWidth[i]/5);
//Panel2.Controls[j-1].Top:=Panel2.Top+(i-1)*RowHeight+
//round((RowHeight/2)-(Panel2.Controls[j-1].Height));
Panel2.Controls[j-1].Top:=Panel2.Top+(i-1)*RowHeight+
round(RowHeight/5);
for t:=1 to Panel2.ControlCount do
begin
if (Panel2.Controls[t-1].Tag=Panel2.Controls[j-1].Tag-1)and(Panel2.Controls[t-1].ClassType=TLabel) then
begin
//showmessage(inttostr(Panel2.Controls[t-1].Left));
Panel2.Controls[j-1].Left:=Panel2.Controls[t-1].Left+Panel2.Controls[t-1].Width;
break;
end;
end;
end;
end;
end;
end;
procedure TDataEdit_BaseFrm.FormResize(Sender: TObject);
begin
inherited;
SetControl;
//Self.Refresh;
end;
procedure TDataEdit_BaseFrm.FormCreate(Sender: TObject);
begin
inherited;
try
if not Base_DataS.DataSet.Active then Base_DataS.DataSet.Open;
except
begin
showmessage('数据库连接出现问题!');
end;
end;
end;
function TDataEdit_BaseFrm.DelRecord(Tabl: TDataSet): boolean;
var Bk:Tbookmark;
begin
result:=false;
try
with Tabl do
if (MessageDlg('确定删除该记录吗?',mtConfirmation, [mbYes, mbNo], 0) = mrYes)
and(IsEmpty=false)
then begin
if recordcount=0 then cancel;
if RecordCount=1
then begin
delete;close;open;
end;
if recordcount>1
then begin
if RecNo=1
then begin
//next;
//Bk:=getbookmark;
//prior;
Delete;
close;
open;
first;
end
else begin
prior;
Bk:=getbookmark;
next;
Delete;
close;
open;
if recordcount>1 then GotoBookmark(Bk);
FreeBookmark(Bk);
end;
end;
result:=true;
end;
except
showmessage('数据库未连接正确!');
end;
end;
function TDataEdit_BaseFrm.ModifyRec(Tabl: TDataSet): boolean;
begin
result:=false;
try
if Tabl.RecordCount=0 then
begin
showmessage('数据表为空,无法修改!');
exit;
end;
Tabl.Edit;
Tabl.Post;
result:=true;
except
Tabl.Cancel;
showmessage('更新没有成功!');
end;
end;
procedure TDataEdit_BaseFrm.BitBtn8Click(Sender: TObject);
var i:integer;
begin
BitBtn3.Enabled:=true;
DBGrid1.ReadOnly:=false;
DBGrid1.Enabled:=false;
BitBtn1.Enabled:=false;
BitBtn2.Enabled:=false;
BitBtn4.Enabled:=false;
BitBtn5.Enabled:=false;
BitBtn6.Enabled:=false;
BitBtn7.Enabled:=false;
BitBtn8.Enabled:=false;
//ModifyRec(Base_DataS.DataSet);
Base_DataS.DataSet.Edit;
for i:=1 to Panel2.ControlCount do
begin
if (Panel2.Controls[i-1].Tag>=0)and(Panel2.Controls[i-1].ClassType<>TLabel)
and(Panel2.Controls[i-1].ClassType<>TDBGrid)and(Panel2.Controls[i-1].ClassType<>TBitBtn) then
Panel2.Controls[i-1].Enabled:=true;
end;
//DBGrid1.Columns[0].Font
end;
procedure TDataEdit_BaseFrm.BitBtn1Click(Sender: TObject);
var i:integer;
begin
BitBtn3.Enabled:=true;
DBGrid1.Enabled:=false;
DBGrid1.ReadOnly:=false;
BitBtn1.Enabled:=false;
BitBtn2.Enabled:=false;
BitBtn4.Enabled:=false;
BitBtn5.Enabled:=false;
BitBtn6.Enabled:=false;
BitBtn7.Enabled:=false;
BitBtn8.Enabled:=false;
for i:=1 to Panel2.ControlCount do
begin
if (Panel2.Controls[i-1].Tag>=0)and(Panel2.Controls[i-1].ClassType<>TLabel)
and(Panel2.Controls[i-1].ClassType<>TDBGrid)and(Panel2.Controls[i-1].ClassType<>TBitBtn) then
Panel2.Controls[i-1].Enabled:=true;
end;
end;
function TDataEdit_BaseFrm.GetLastRecId(AdoTabl: TDataSet;
FieldStr: String): variant;
begin
result:=0;
try
if AdoTabl.RecordCount=0 then
begin
exit;
end
else
begin
AdoTabl.Last;
result:=AdoTabl.FieldByName(FieldStr).Value;
end;
except
showmessage('数据库未连接正确!');
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -