怎样对DBGRID进行增加、修改、删除、保存等操作,能否提供例子? 同上 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 append()insert()editdeletepost()applyupdates() 是对连在dbgrid上面的table或query进行操作如append()insert()editdeletepost()applyupdates() 用通过数据集控件才可以对dbgrid进行各种操作增加:adotable.insert; adotable.append;删除:adotable.delete;修改:adotable.edit; 提交:adotable.post; 如果是涉及多表视图就复杂了如果只是单表的就很简单但如果是连接单表的GRID好象也没有什么用处哈哈 1、你设好TABLE的数据原然后建立按钮进行: Table1.insert;//插入 Table1.edit;//编辑 Table1.delete;//删除 tABLE1.APPEND;//追加 Table1.post;//存盘QUERY相同。只要把TABLE换成QUERY PAS文件:unit ProgModule_frm;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, XP_Button, TFlatButtonUnit, DBCtrls, ExtCtrls, DB, ADODB, Grids, DBGrids, StdCtrls;type TProgModuleForm = class(TForm) ModulesDBGrid: TDBGrid; ModulesDataSource: TDataSource; ModulesQuery: TADOQuery; Panel1: TPanel; DBNavigator1: TDBNavigator; FlatButton2: TFlatButton; FlatButton3: TFlatButton; FlatButton1: TFlatButton; DetailQuery: TADOQuery; DataSource2: TDataSource; DBGrid2: TDBGrid; DetailQueryMENUITEM_ID: TStringField; DetailQueryMENUITEM_NAME: TStringField; FlatButton4: TFlatButton; Panel2: TPanel; ModulesQueryMENUGROUP_ID: TStringField; ModulesQueryMENUGROUP_NAME: TStringField; ModulesQueryAPPNAME: TStringField; ModulesQueryREMARK: TStringField; ModulesQuerySEQUENCE: TBCDField; DetailQueryMENUGROUP_ID: TStringField; DetailQueryWINDOW_NAME: TStringField; DetailQueryREMARK: TStringField; DetailQueryCLAUSE: TStringField; DetailQuerySEQUENCE: TBCDField; SelQuery: TADOQuery; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); procedure ModulesDBGridEnter(Sender: TObject); procedure DBGrid2Enter(Sender: TObject); procedure FormActivate(Sender: TObject); procedure FlatButton2Click(Sender: TObject); procedure FlatButton1Click(Sender: TObject); procedure FlatButton3Click(Sender: TObject); procedure FlatButton4Click(Sender: TObject); procedure ModulesQueryAfterDelete(DataSet: TDataSet); procedure DetailQueryAfterEdit(DataSet: TDataSet); procedure DetailQueryAfterInsert(DataSet: TDataSet); procedure DetailQueryBeforePost(DataSet: TDataSet); procedure ModulesQueryBeforePost(DataSet: TDataSet); private Procedure SetButton(IsEnable :Boolean); public { Public declarations } end;var ProgModuleForm: TProgModuleForm;implementationuses DataModule_Unt, Currency_Unt;{$R *.dfm}procedure TProgModuleForm.FormClose(Sender: TObject; var Action: TCloseAction);var tips:Integer;begin if FlatButton1.Enabled then begin tips:= Application.MessageBox('是否要保存当前编辑的数据?','信息',MB_YESNOCANCEL); case tips of IDYES: begin ModulesQuery.UpdateBatch(); DetailQuery.UpdateBatch(); Action:=caFree; end; IDNO: begin DetailQuery.CancelBatch(); ModulesQuery.CancelBatch(); Action:=caFree; end; IDCANCEL: begin Action:=caNone; end; end end else Action:=caFree; {释放这个窗口所占用的内存}end;procedure TProgModuleForm.FormDestroy(Sender: TObject);begin ProgModuleForm:= nil;end;procedure TProgModuleForm.ModulesDBGridEnter(Sender: TObject);begin DBNavigator1.DataSource:= ModulesDataSource;end;procedure TProgModuleForm.DBGrid2Enter(Sender: TObject);begin DBNavigator1.DataSource:= DataSource2;end;procedure TProgModuleForm.FormActivate(Sender: TObject);begin ModulesQuery.Open; DetailQuery.Open;end;procedure TProgModuleForm.FlatButton2Click(Sender: TObject);begin Close;end;procedure TProgModuleForm.SetButton(IsEnable: Boolean);begin FlatButton1.Enabled:= IsEnable; FlatButton3.Enabled:= IsEnable;end;procedure TProgModuleForm.FlatButton1Click(Sender: TObject);begin DetailQuery.UpdateBatch(); ModulesQuery.UpdateBatch(); SetButton(False);end;procedure TProgModuleForm.FlatButton3Click(Sender: TObject);var book:TBook;begin if Application.MessageBox('真要要放弃当前数据的修改吗?','信息',MB_YESNO)=IDYES then begin DetailQuery.CancelBatch(); ModulesQuery.CancelBatch(); SetButton(False); try book:=DetailQuery.GetBook; DetailQuery.Close; DetailQuery.Open; DetailQuery.GotoBook(book); except Exception.Create('数据刷新错误!'); DetailQuery.Prior; end; ModulesDBGrid.Enabled:= True; end;end;procedure TProgModuleForm.FlatButton4Click(Sender: TObject);begin if Application.MessageBox('真要要删除掉当前模块吗?','信息',MB_YESNO)=IDYES then begin if DetailQuery.RecordCount >0 then DetailQuery.Delete else begin if FlatButton1.Enabled then begin Showmessage('请先保存或取消你的操作,再进行删除模块组操作!'); exit; end; ModulesQuery.Delete; end; SetButton(True); end;end;procedure TProgModuleForm.ModulesQueryAfterDelete(DataSet: TDataSet);begin SetButton(True);end;procedure TProgModuleForm.DetailQueryAfterEdit(DataSet: TDataSet);begin SetButton(True);end;procedure TProgModuleForm.DetailQueryAfterInsert(DataSet: TDataSet);begin SetButton(True);end;procedure TProgModuleForm.DetailQueryBeforePost(DataSet: TDataSet);begin If DetailQuery.FieldByName('MENUGROUP_ID').AsString = '' then begin DetailQuery.Edit; DetailQuery.FieldByName('MENUGROUP_ID').AsString := ModulesQuery.FieldByName('MENUGROUP_ID').AsString; end; if not (DataSet.State = dsEdit) then With SelQuery do begin Close; SQL.Clear; SQL.Add('select MENUITEM_ID from MENUITEM where MENUITEM_ID= :MITEM'); Parameters.ParamByName('MITEM').Value := DetailQuery.FieldByName('MENUITEM_ID').AsString; Open; if not eof then Raise Exception.Create('该模块编号已存在,请重新输入!'); close; end;end;procedure TProgModuleForm.ModulesQueryBeforePost(DataSet: TDataSet);begin if not (DataSet.State = dsEdit) then With SelQuery do begin Close; SQL.Clear; SQL.Add('select MENUGROUP_ID from MENUGROUP where MENUGROUP_ID= :MGROUP'); Parameters.ParamByName('MGROUP').Value := ModulesQuery.FieldByName('MENUGROUP_ID').AsString; Open; if not eof then Raise Exception.Create('该模块组编号已存在,请重新输入!'); close; end;end; hehe这个问题可以找本书来看看,很容易明白的:) 什么意思,你可以对dbgrid实现上述操作吗?你的意思估计是对dataset操作,然后可以再dbgrid上看到效果把.上面已经很多了 用navigator就可以了,如果这样的 话但是,最好还是用table query等找本书看看这些是基础啊 来晚了,同意Drate(鸟窝里的虫) before post 事件中用SQL语句啦 Drate(鸟窝里的虫),你好,问题基本解决,还有一个小问题,当DATASET在EDIT状态下怎样判断修改了某个字段(主键)的值,因为我要判断主键值是否重复 请问inno怎样设置公共变量? 怎么实现用户登陆后能使用自己的信息? 如何在dbgrid中添加一个虚拟的行? 一个编程的问题请教各位 快!简单问题大放分!!文件目录的搜索方法和算法是什么? 请教:这样的应用应该采用什么架构?其中负载均衡如何作(有现成的负载均衡软件吗)? 关于全局变量的问题 Edit 控件和 Combobox 控件产生冲突?如何解决。 怎样编程实现全屏显示?以最简单的方法! 如何象winzip一样可以在文件的右键菜单中显示Add to zip? 在delphi中如何调用别人的运用程序,及调用cmd命令! p133的电脑升级成塞羊4,换主版,请问原来的机箱和电源是否也需要换,
edit
delete
post()applyupdates()
如append()insert()edit
delete
post()applyupdates()
提交:adotable.post;
如果只是单表的就很简单
但如果是连接单表的GRID好象也没有什么用处
哈哈
然后建立按钮进行:
Table1.insert;//插入
Table1.edit;//编辑
Table1.delete;//删除
tABLE1.APPEND;//追加
Table1.post;//存盘
QUERY相同。只要把TABLE换成QUERY
unit ProgModule_frm;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, XP_Button, TFlatButtonUnit, DBCtrls, ExtCtrls, DB, ADODB, Grids,
DBGrids, StdCtrls;type
TProgModuleForm = class(TForm)
ModulesDBGrid: TDBGrid;
ModulesDataSource: TDataSource;
ModulesQuery: TADOQuery;
Panel1: TPanel;
DBNavigator1: TDBNavigator;
FlatButton2: TFlatButton;
FlatButton3: TFlatButton;
FlatButton1: TFlatButton;
DetailQuery: TADOQuery;
DataSource2: TDataSource;
DBGrid2: TDBGrid;
DetailQueryMENUITEM_ID: TStringField;
DetailQueryMENUITEM_NAME: TStringField;
FlatButton4: TFlatButton;
Panel2: TPanel;
ModulesQueryMENUGROUP_ID: TStringField;
ModulesQueryMENUGROUP_NAME: TStringField;
ModulesQueryAPPNAME: TStringField;
ModulesQueryREMARK: TStringField;
ModulesQuerySEQUENCE: TBCDField;
DetailQueryMENUGROUP_ID: TStringField;
DetailQueryWINDOW_NAME: TStringField;
DetailQueryREMARK: TStringField;
DetailQueryCLAUSE: TStringField;
DetailQuerySEQUENCE: TBCDField;
SelQuery: TADOQuery;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
procedure ModulesDBGridEnter(Sender: TObject);
procedure DBGrid2Enter(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FlatButton2Click(Sender: TObject);
procedure FlatButton1Click(Sender: TObject);
procedure FlatButton3Click(Sender: TObject);
procedure FlatButton4Click(Sender: TObject);
procedure ModulesQueryAfterDelete(DataSet: TDataSet);
procedure DetailQueryAfterEdit(DataSet: TDataSet);
procedure DetailQueryAfterInsert(DataSet: TDataSet);
procedure DetailQueryBeforePost(DataSet: TDataSet);
procedure ModulesQueryBeforePost(DataSet: TDataSet);
private
Procedure SetButton(IsEnable :Boolean);
public
{ Public declarations }
end;var
ProgModuleForm: TProgModuleForm;implementationuses DataModule_Unt, Currency_Unt;{$R *.dfm}
procedure TProgModuleForm.FormClose(Sender: TObject;
var Action: TCloseAction);
var
tips:Integer;
begin
if FlatButton1.Enabled then
begin
tips:= Application.MessageBox('是否要保存当前编辑的数据?','信息',MB_YESNOCANCEL);
case tips of
IDYES:
begin
ModulesQuery.UpdateBatch();
DetailQuery.UpdateBatch();
Action:=caFree;
end;
IDNO:
begin
DetailQuery.CancelBatch();
ModulesQuery.CancelBatch();
Action:=caFree;
end;
IDCANCEL:
begin
Action:=caNone;
end;
end
end
else
Action:=caFree; {释放这个窗口所占用的内存}
end;procedure TProgModuleForm.FormDestroy(Sender: TObject);
begin
ProgModuleForm:= nil;
end;procedure TProgModuleForm.ModulesDBGridEnter(Sender: TObject);
begin
DBNavigator1.DataSource:= ModulesDataSource;
end;procedure TProgModuleForm.DBGrid2Enter(Sender: TObject);
begin
DBNavigator1.DataSource:= DataSource2;
end;procedure TProgModuleForm.FormActivate(Sender: TObject);
begin
ModulesQuery.Open;
DetailQuery.Open;
end;procedure TProgModuleForm.FlatButton2Click(Sender: TObject);
begin
Close;
end;procedure TProgModuleForm.SetButton(IsEnable: Boolean);
begin
FlatButton1.Enabled:= IsEnable;
FlatButton3.Enabled:= IsEnable;
end;procedure TProgModuleForm.FlatButton1Click(Sender: TObject);
begin
DetailQuery.UpdateBatch();
ModulesQuery.UpdateBatch();
SetButton(False);
end;procedure TProgModuleForm.FlatButton3Click(Sender: TObject);
var
book:TBook;
begin
if Application.MessageBox('真要要放弃当前数据的修改吗?','信息',MB_YESNO)=IDYES then
begin
DetailQuery.CancelBatch();
ModulesQuery.CancelBatch();
SetButton(False);
try
book:=DetailQuery.GetBook;
DetailQuery.Close;
DetailQuery.Open;
DetailQuery.GotoBook(book);
except
Exception.Create('数据刷新错误!');
DetailQuery.Prior;
end;
ModulesDBGrid.Enabled:= True;
end;
end;procedure TProgModuleForm.FlatButton4Click(Sender: TObject);
begin
if Application.MessageBox('真要要删除掉当前模块吗?','信息',MB_YESNO)=IDYES then
begin
if DetailQuery.RecordCount >0 then
DetailQuery.Delete
else
begin
if FlatButton1.Enabled then
begin
Showmessage('请先保存或取消你的操作,再进行删除模块组操作!');
exit;
end;
ModulesQuery.Delete;
end;
SetButton(True);
end;
end;procedure TProgModuleForm.ModulesQueryAfterDelete(DataSet: TDataSet);
begin
SetButton(True);
end;procedure TProgModuleForm.DetailQueryAfterEdit(DataSet: TDataSet);
begin
SetButton(True);
end;procedure TProgModuleForm.DetailQueryAfterInsert(DataSet: TDataSet);
begin
SetButton(True);
end;procedure TProgModuleForm.DetailQueryBeforePost(DataSet: TDataSet);
begin
If DetailQuery.FieldByName('MENUGROUP_ID').AsString = '' then
begin
DetailQuery.Edit;
DetailQuery.FieldByName('MENUGROUP_ID').AsString := ModulesQuery.FieldByName('MENUGROUP_ID').AsString;
end;
if not (DataSet.State = dsEdit) then
With SelQuery do
begin
Close;
SQL.Clear;
SQL.Add('select MENUITEM_ID from MENUITEM where MENUITEM_ID= :MITEM');
Parameters.ParamByName('MITEM').Value := DetailQuery.FieldByName('MENUITEM_ID').AsString;
Open;
if not eof then
Raise Exception.Create('该模块编号已存在,请重新输入!');
close;
end;
end;procedure TProgModuleForm.ModulesQueryBeforePost(DataSet: TDataSet);
begin
if not (DataSet.State = dsEdit) then
With SelQuery do
begin
Close;
SQL.Clear;
SQL.Add('select MENUGROUP_ID from MENUGROUP where MENUGROUP_ID= :MGROUP');
Parameters.ParamByName('MGROUP').Value := ModulesQuery.FieldByName('MENUGROUP_ID').AsString;
Open;
if not eof then
Raise Exception.Create('该模块组编号已存在,请重新输入!');
close;
end;
end;
这个问题可以找本书来看看,很容易明白的
:)
你的意思估计是对dataset操作,然后可以再dbgrid上看到效果把.
上面已经很多了
但是,最好还是用table query等
找本书看看
这些是基础啊
用SQL语句啦