同上

解决方案 »

  1.   

    append()insert()
    edit
    delete
    post()applyupdates()
      

  2.   

    是对连在dbgrid上面的table或query进行操作
    如append()insert()edit
    delete
    post()applyupdates()
      

  3.   

    用通过数据集控件才可以对dbgrid进行各种操作增加:adotable.insert;  adotable.append;删除:adotable.delete;修改:adotable.edit;
     
    提交:adotable.post;
      

  4.   

    如果是涉及多表视图就复杂了
    如果只是单表的就很简单
    但如果是连接单表的GRID好象也没有什么用处
    哈哈
      

  5.   

    1、你设好TABLE的数据原
    然后建立按钮进行:
       Table1.insert;//插入
       Table1.edit;//编辑
       Table1.delete;//删除
       tABLE1.APPEND;//追加
       Table1.post;//存盘
    QUERY相同。只要把TABLE换成QUERY
      

  6.   

    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;
      

  7.   

    hehe
    这个问题可以找本书来看看,很容易明白的
    :)
      

  8.   

    什么意思,你可以对dbgrid实现上述操作吗?
    你的意思估计是对dataset操作,然后可以再dbgrid上看到效果把.
    上面已经很多了
      

  9.   

    用navigator就可以了,如果这样的 话
    但是,最好还是用table query等
    找本书看看
    这些是基础啊
      

  10.   

    来晚了,同意Drate(鸟窝里的虫)
      

  11.   

    before post 事件中
    用SQL语句啦
      

  12.   

    Drate(鸟窝里的虫),你好,问题基本解决,还有一个小问题,当DATASET在EDIT状态下怎样判断修改了某个字段(主键)的值,因为我要判断主键值是否重复