Sql server 如何在新时刻比较相同的db

Sql server 如何在新时刻比较相同的db,sql-server,delphi,sql-server-2008-r2,comparison,delphi-xe2,Sql Server,Delphi,Sql Server 2008 R2,Comparison,Delphi Xe2,通过在Delphi+SQL server中开发客户机-服务器应用程序,我不断地面临这样一个问题:如何准确地报告某个操作对数据库造成的影响 一个简单的例子是: 之前:开始“捕获”数据库 用户更改编辑框中的值 用户按下“保存”按钮 之后:停止“捕获”数据库 我希望有一个比较前后状态的工具(我手动捕获之前和之后状态) 我在谷歌上搜索过这类工具,但我找到的都是在更多数据源之间进行数据或模式比较的工具 谢谢。以下是我们的应用程序摘录。此代码位于链接到应用程序中所有数据集组件的BeforePost事件处理程

通过在Delphi+SQL server中开发客户机-服务器应用程序,我不断地面临这样一个问题:如何准确地报告某个操作对数据库造成的影响

一个简单的例子是:

  • 之前:开始“捕获”数据库

  • 用户更改编辑框中的值

  • 用户按下“保存”按钮

  • 之后:停止“捕获”数据库

  • 我希望有一个比较前后状态的工具(我手动捕获<代码>之前<代码>和<代码>之后<代码>状态)

    我在谷歌上搜索过这类工具,但我找到的都是在更多数据源之间进行数据或模式比较的工具


    谢谢。

    以下是我们的应用程序摘录。此代码位于链接到应用程序中所有数据集组件的BeforePost事件处理程序中。这个链接是使用代码完成的,因为有很多数据集。这实际上并不记录更改(只列出字段),但它应该足够简单,可以更改以满足您的目标。我不知道这是否完全符合您想要实现的目标,因为您需要一个工具,但这将是创建所有更改报告的有效方法

      CurrentReport := Format('Table %s modified', [DataSet.Name]);
      for i := 0 to DataSet.FieldCount - 1 do
      begin
        XField := DataSet.Fields[i];
        if (XField.FieldKind = fkData) and (XField.Value <> XField.OldValue) then
        begin
          CurrentReport := CurrentReport + Format(', %s changed', [XField.FieldName])
        end;
      end;
    
    CurrentReport:=格式('Table%s modified',[DataSet.Name]);
    对于i:=0到DataSet.FieldCount-1 do
    开始
    XField:=DataSet.Fields[i];
    如果(XField.FieldKind=fkData)和(XField.Value XField.OldValue),则
    开始
    CurrentReport:=CurrentReport+格式(“,%s已更改”,[XField.FieldName])
    结束;
    结束;
    

    请注意,我们的代码收集报告,但仅在成功完成post后记录它

    如何?有一次我记得我看到了一个产品的演示,它很难按照我的要求去做,不幸的是我记不起它是哪种产品了。这太神奇了。如果您想捕获对Sql Server db的所有更改,包括应用程序未进行的更改,您可以在db表上设置触发器以记录更改,并且有一些产品可以帮助您设置触发器。OTOH,如果您只对应用程序所做的更改感兴趣,并且一次只更新一行,那么编写自己的日志记录工具并不难。@MartynA想象一下这个场景:反向工程。如果工具告诉我会发生什么,这比在遗留应用程序上编写日志代码更有帮助。好吧,你一开始没有提到反向工程。不管怎么说,这并不是获得产品推荐的好地方:ime,远远地说,获得产品推荐的最好地方是EMBA新闻组的delphi.thirdpartytools.general部分。非常感谢分享代码,在应用程序中使用它是一个好主意,正如我在上面的评论中所写,我需要对一个复杂的应用程序进行反向工程,这就是为什么一个工具会对我帮助很大。