怎么實作點擊關閉退出,若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.
uj5u.com熱心網友回復:
ReadOnly不在DataSet中修改,應該在DataSource.AutoEdit:=False中和DBGrid.ReadOnlyuj5u.com熱心網友回復:
1、你的代碼中:ADOQuery1.Open;
ADOQuery1.ExecSQL;
ADOQuery1已經OPEN了,就不需要再ExecSQL。SQL陳述句中使用select的話,只需要OPEN的。
2、CloseQuery中的代碼,根本是沒管你資料是否有修改。你這就是直接提示”還有未保存檔案,是否關閉?“,即便你沒有資料,就一個空表單他都要提示的啊。
3、修改方法:ADOQuery1.State in [dsInsert,dsEdit] //資料集狀態是新增或編輯狀態
if ADOQuery1.State in [dsInsert,dsEdit] then
begin
if MessageDlg('還有未保存檔案,是否關閉?',mtWarning,[mbYes,mbNo],0)=6 then
CanClose:=true
else
CanClose:=false;
end;
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/268865.html
標籤:數據庫相關
上一篇:這樣為啥不對啊
