Delphi修改MemTableEh实现数据保存、修改、新增、删除

发布时间 2023-07-14 11:27:38作者: 冀未然

Delphi修改MemTableEh实现数据保存、修改、新增、删除

unit Unit2;
interface
//download by http://www.okbase.net
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, DB,ADODB, DBGridEhGrouping, GridsEh,
DBGridEh,StrUtils, MemTableDataEh, MemTableEh, Provider, DBTables,
DataDriverEh, DBClient, ComCtrls;
type
TForm2 = class(TForm)
DataSource1: TDataSource;
Memo1: TMemo;
btnrun: TButton;
btnconnect: TButton;
Label1: TLabel;
btnclose: TButton;
ADOConnection2: TADOConnection;
btnadd: TButton;
btndel: TButton;
btnsave: TButton;
Button1: TButton;
DataSetDriverEh1: TDataSetDriverEh;
MemTableEh1: TMemTableEh;
DBGridEh1: TDBGridEh;
btnrecovery: TButton;
procedure btnrunClick(Sender: TObject);
procedure btnconnectClick(Sender: TObject);
procedure btncloseClick(Sender: TObject);
procedure btnsaveClick(Sender: TObject);
procedure btnaddClick(Sender: TObject);
procedure btndelClick(Sender: TObject);
procedure btnrecoveryClick(Sender: TObject);
procedure DBGridEh1GetCellParams(Sender: TObject; Column: TColumnEh;
AFont: TFont; var Background: TColor; State: TGridDrawState);
procedure DBGridEh1CellClick(Column: TColumnEh);
private
{ Private declarations }
aquery : tadoquery;
public
{ Public declarations }
end;
function selectquery(sql : ansistring;tp : word) :TADOQuery ;
var
Form2: TForm2;
implementation
{$R .dfm}
{
***********************************************
memtableeh1的cathedupdates 必须设置为true,
这样memtableeh1才会把修改的信息存储起来。
DataSetDriverEh1的resolvetodataset必须设为true
这样修改的信息才会提交给数据库
如果memtableeh1.cathedupdates = false
而DataSetDriverEh1.resolvetodataset =true
那么客户端修改的信息会直接通过后台提交给数据库
只有memtableeh1.cathedupdates = true
且DataSetDriverEh1.resolvetodataset =true
那么客户端修改的信息会存储在内存中
待执行memtableeh1.ApplyUpdates(-1)后才提交给数据库
************************************************}
function selectquery(sql : ansistring;tp : word) :TADOQuery ;
var vquery : tadoquery;
begin
if length(sql) = 0 then result :=vquery;
vquery := TADOQuery.Create(nil);
vquery.CommandTimeout := 360;
vquery.Connection := form2.adoconnection2;
vquery.SQL.Add(sql);
vquery.Close;
if tp = 2 then showmessage(sql);
if leftstr(sql,6) = 'select' then vquery.open
else vquery.ExecSQL;
result := vquery;
end;

procedure TForm2.btnrecoveryClick(Sender: TObject);
begin
memtableeh1.CancelUpdates;
end;
procedure TForm2.btnrunClick(Sender: TObject);
var
ssql : string;
n,m :integer;
begin
//
if dbgrideh1.FieldCount > 1 then
begin
m := dbgrideh1.FieldCount-1;
for n := 1 to m do
dbgrideh1.columns[1].Destroy;
end;
memtableeh1.Close;
dbgrideh1.Refresh;
ssql := memo1.Text;
aquery := selectquery(trim(ssql),1);
for n := 1 to aquery.FieldCount do
begin
dbgrideh1.columns.add;
dbgrideh1.columns[n].FieldName :=aquery.Fields[n-1].FieldName;
dbgrideh1.columns[n].Title.Alignment := taCenter;
dbgrideh1.columns[n].width := 60;
end;

{ datasetdrivereh1.ProviderDataSet := aquery;
memtableeh1.Assign(datasetdrivereh1.ProviderDataSet.FieldDefs);
memtableeh1.Active := true; }
// datasource1.DataSet := clientdataset1;
// clientdataset1.DataDriver := datasetdrivereh1;
datasetdrivereh1.ProviderDataSet := aquery;
// adoquery1.sql.text := ssql;
// adoquery1.Open;
memtableeh1.Open;
//datasetprovider1.DataSet := aquery;
//ClientDataSet1.Open;
end;

procedure TForm2.btnsaveClick(Sender: TObject);
var n : integer;
begin
// clientdataset1.ApplyUpdates(0)
memtableeh1.ApplyUpdates(-1);
end;

procedure TForm2.DBGridEh1CellClick(Column: TColumnEh);
begin
if Column.FieldName = '选择' then
begin
if DBGridEh1.Columns[0].CheckboxState = cbUnchecked then
DBGridEh1.Columns[0].CheckboxState := cbChecked
else
DBGridEh1.Columns[0].CheckboxState := cbUnchecked;
end;
end;

procedure TForm2.DBGridEh1GetCellParams(Sender: TObject; Column: TColumnEh;
AFont: TFont; var Background: TColor; State: TGridDrawState);
begin
if memtableeh1.UpdateStatus <> usUnmodified then
Background := $00FAD5BC;
end;

procedure TForm2.btnconnectClick(Sender: TObject);
var zspath : string;
begin
zspath := ExtractFilePath(Application.Exename);
try
adoconnection2.Close;
adoconnection2.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+zspath+'\1.mdb;Persist Security Info=False';
except

showmessage('数据库连接失败');

exit;

end;

btnrun.Enabled := true;

end;

procedure TForm2.btndelClick(Sender: TObject);
begin
memtableeh1.Delete;
end;

procedure TForm2.btnaddClick(Sender: TObject);
begin
memtableeh1.Append;
end;

procedure TForm2.btncloseClick(Sender: TObject);
begin
adoconnection2.Close;
Form2.close;
end;

end.