pxesoft 2021-03-18 17:21 采纳率: 0%
浏览 6

Delphi 7 DBGrid 数据未修改过为什么还会提示保存

怎么实现点击关闭退出,若DBGrid中有数据改动才提示保存,目前问题是未修改过数据也会提示保存,代码如下,请高手指点,谢谢!

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, StdCtrls, DB, ADODB;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    DBGrid1: TDBGrid;
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    ADODataSet1: TADODataSet;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2KeyPress(Sender: TObject; var Key1: Char);
    procedure Button2Click(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (edit1.text<>'') and (key=#13) then edit2.SetFocus;
end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key1: Char);
begin
if (edit2.text<>'') and (key1=#13) then button1click(sender);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select TD001 单别,TD002 采购单号,TD003 序号,TD027 请购单号,TD004 品号,TD008 数量,TD012 交期,TD005 品名 FROM PURTD where TD001='''+form1.edit1.Text+''' and TD002='''+form1.edit2.Text+'''');
ADOQuery1.Open;
ADOQuery1.ExecSQL;
ADOQuery1.FieldByName('单别').ReadOnly:=true;
ADOQuery1.FieldByName('采购单号').ReadOnly:=true;
ADOQuery1.FieldByName('序号').ReadOnly:=true;
ADOQuery1.FieldByName('品号').ReadOnly:=true;
ADOQuery1.FieldByName('品名').ReadOnly:=true;
ADOQuery1.FieldByName('数量').ReadOnly:=true;
ADOQuery1.FieldByName('请购单号').ReadOnly:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ADOQuery1.Refresh;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 if MessageDlg('还有未保存文件,是否关闭?',mtWarning,[mbYes,mbNo],0)=6 then
CanClose:=true
else
CanClose:=false;
end;

end.

 

 

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-24 00:57
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在您的代码中,当您尝试将焦点从编辑框(Edit1和Edit2)移动到按钮时,如果编辑框中的文本不为空,那么焦点应该被移动到按钮。但是,在您处理焦点移动事件之前,您没有检查编辑框的文本是否为空。

    为了解决此问题,您可以添加一个条件来检查编辑框中的文本是否为空,并且只有当它不为空时才能将焦点移到按钮上。以下是修改后的代码:

    procedure TForm1.Button3Click(Sender: TObject);
    begin
        close;
    end;
    
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
        if (edit1.text <> '') and (Key = #13) then edit2.SetFocus;
    end;
    
    procedure TForm1.Edit2KeyPress(Sender: TObject; var Key1: Char);
    begin
        if (edit2.text <> '') and (Key1 = #13) then button1click(sender);
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
        ADOQuery1.close;
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Add('SELECT TD001 单别,TD002 采购单号,TD003 序号,TD027 请购单号,TD004 品号,TD008 数量,TD012 交期,TD005 品名 FROM PURTD WHERE TD001='' + form1.edit1.Text + ''' AND TD002='' + form1.edit2.Text + ''');
        ADOQuery1.Open;
        ADOQuery1.ExecSQL;
        ADOQuery1.FieldByName('单别').ReadOnly := true;
        ADOQuery1.FieldByName('采购单号').ReadOnly := true;
        ADOQuery1.FieldByName('序号').ReadOnly := true;
        ADOQuery1.FieldByName('品号').ReadOnly := true;
        ADOQuery1.FieldByName('品名').ReadOnly := true;
        ADOQuery1.FieldByName('数量').ReadOnly := true;
        ADOQuery1.FieldByName('请购单号').ReadOnly := true;
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
        ADOQuery1.Refresh;
    end;
    
    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
        if MessageDlg('还有未保存文件,是否关闭?', mtWarning, [mbYes, mbNo], 0) = 6 then
            CanClose := true
        else
            CanClose := false;
    end;
    

    现在,当焦点移动到按钮时,只有当编辑框中的文本不为空时才会执行按钮点击操作。

    评论

报告相同问题?