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

📄 dataedit_baseunt.pas

📁 煤矿行业采掘接替计划自动生成系统
💻 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 + -