首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可编辑的DBGrid?

可编辑的DBGrid?
EN

Stack Overflow用户
提问于 2012-09-17 19:38:54
回答 2查看 2.2K关注 0票数 0

我是Delphi的初学者,我需要帮助解决以下问题。我必须在我的表单上实现一个可编辑的DBGrid。DBGrid显示连接3个表的查询的结果。我设法使DBGrid可编辑,但编辑对数据库没有任何影响。我可以在DBGrid中插入、编辑或删除行,但这些更改不会保存到数据库中。我有以下设置:

代码语言:javascript
复制
Query2.DatabaseName=Test
Query2.SQL=SELECT cd.hourstart, cd.hourfinish, o.objname, cd."work", cd.worktime  
           FROM Card c JOIN CardDetail cd ON c.N=cd.card  
           JOIN objects o ON cd.project=o.N  
           WHERE c.worker=5 AND c.data=CONVERT(DATE, GETDATE())
Query2.UpdateObject=UpdateSQL2  
Query2.CachedUpdates=True  
Query2.RequestLive=True

UpdateSQL2.DeleteSQL=delete from CardDetail  
                     where hourstart = :OLD_houerstart and  
                     hourfinish = :OLD_houerfinish and  
                     work = :OLD_work and  
                     worktime = :OLD_worktime
UpdateSQL2.InsertSQL=...  
UpdateSQL2.ModifySQL=...  

DataSource2.DataSet=Query2  
DBGrid2.DataSource=DataSource2 

我可能错过了什么,但我不知道是什么。任何帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-17 20:01:07

据说您需要几个UpdateSQL对象,每个表http://docwiki.embarcadero.com/RADStudio/XE3/en/Using_Multiple_Update_Objects_Index一个

这些对象中的每个对象都应该绑定基本TDataSet,以便引用普通数据。http://docwiki.embarcadero.com/Libraries/en/Bde.DBTables.TDataSetUpdateObject.DataSet

据称,在不同的对象上调用ApplyUpdates/Commit/Commit objects的顺序应该是正确的。http://docwiki.embarcadero.com/RADStudio/en/Applying_Cached_Updates_with_Dataset_Component_Methods

PS。BDE已被弃用,并且与最新的Windows和最新的数据库服务器兼容性很差。

票数 1
EN

Stack Overflow用户

发布于 2012-12-05 17:30:55

代码语言:javascript
复制
// Have a look at the below code, it uses an AdoCommand
procedure DoSomething(DataSet: TDataSet);
var
  ADOCommand : TADOCommand;
begin
  ADOCommand:=TADOCommand.Create(nil);
  try
  try
    ADOCommand.Connection:=Conn;
    ADOCommand.Parameters.Clear;
    Conn.BeginTrans;
    if dataset.State = dsinsert then
    begin
      ADOCommand.CommandText := //Your insert statement
      ADOCommand.ParamCheck:=False;
      ADOCommand.Execute;
    end
    else
    if DataSet.State = dsEdit then
    begin
      ADOCommand.CommandText := //Your edit statement
      ADOCommand.ParamCheck:=False;
      ADOCommand.Execute;
    end
    else
    Begin
      ADOCommand.CommandText := //Your delete statement
      ADOCommand.ParamCheck:=False;
      ADOCommand.Execute;
    End;
    Conn.CommitTrans;
  except
    on E : Exception do
    begin
      Conn.RollbackTrans;
      MessageDlg('An exception occured, Error Class: ' + E.ClassName         +#13+                      'ErrorMessage: '+ E.Message , mtError, [mbOK], 0);
      Abort;
    end;
  end;
  finally
    ADOCommand.Free;
  end;
end;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12458412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档