Delphi修改MemTableEh实现数据保存、修改、新增、删除
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.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了