数据库日志问题(200分)

  • 主题发起人 主题发起人 bess
  • 开始时间 开始时间
B

bess

Unregistered / Unconfirmed
GUEST, unregistred user!
用SQL6.5数据库,领导要求作数据库的日志,记录下是谁(有用户名)修改过
、删除过、增加过记录,放在一个库中,而我对这些修改是在本地的临时表中
作的,在用Batchmove回去,怎么办???

领导:“做不出下岗!!!!”:((
 
你在Delphi 中应该能找到一个Batchmove 的例子, 为什么不学一学呢 ?
很简单的。 如果还有问题, 可以在这里贴出。
 
可不可以给试试给每个操作数据库的用户分配一个SQL SERVER的用户名,
然后去查看每个用户的日志,或把他从日志表中取来放入您的检索数据库中。
 
谢谢seakey!
我是英语盲,Batchmove 的例子看得云里雾里,请详细一点好吗?
 
谢谢seakey!
补充一点,领导要求看用户修改的记录内容!!即原记录和新记录都要看!
 
>> 领导要求看用户修改的记录内容!!即原记录和新记录都要看!

这个你最好告诉我, 你需要检测数据类型大概是什么样的, 是资料
类, 如人员档案. 还是流水帐类? 如交易记录.

更新的数据量有多大, 表的字段数目, 可能变更的字段数目. 会不会有
SQL 方式更新修改表 . 例如 Update Table Set Field1 = 2
where Field2 < 0 . (这样有可能一次执行就更新了两条记录).

至于batchMove project文件, 是在Delphi/Help/examples/batmove目录.

我想对于你的应用, 并不一定要用BatchMove , 你只需要编一个过程
浏览从源表中读出每一条记录, 并向目标表中添加即可:

table1.disablecontrol;
table1.first;
while not table1.eof do begin
table2.append;
table2['xxx'].value:=table1['xxx'].value;
...
table2.post
table1.next;
end;
table1.enablecontrol;

 
先谢过SeaSky!
问题是这样:
人员档案共分三个表,共有若干个用户可修改,这三个表用Lookup方式连起来,
用一个DBgrid显示,又要求每个字段能排序,所以只好把表从服务器拷到本地操作,
修改完后又送回服务器(用Batchmove的UPdate方式)。所以不知在何处记下
被修改过的记录内容。
修改的数据量不是很大,但添加和删除的量大,每年一次,有10000条记录左右。
 
记录日志:
不知道 mssql 的 sql trace 是如何做的:(
如果是应用程序服务器,那么可以在中间层做记录吧?//未做过

本地临时表:
这不是TClientDataSet吗?又是MIDAS:-(((

总觉得解决你类似的问题 MIDAS 好象比较理想的,//也许最近这东西玩中毒了:)
 
看你的描述也不太明白, 一个人员档案要用三个表吗? 三个表分别
记录什么东西。

关于记录数据的修改的记录,在delphi的更新方式有很多种,并且听你的
说法不太明白, 在本地用临时表, 卸载全部数据吗? 总的感觉是方法设
计不合理。

记录修改过的数据可以用数据库的触发器, 在Update的过程中记录旧值和新值
到一个记录表。这个记录表的设计也有多种方法,

简单的方法: 是在记录表中设立如下结构:

日期时间 Datetime
用户名 char(n)
变更的字段名 Char(n)
原字段值 Char(n)
新字段值 Char(n)

前三个字段定义为主键。
 
一般的来说,首先为了控制起见,所有的操作都使用stored procedure,
这样就可以在stored procedure中直接调用另一个procedure,专门来记录了。

比如:
Insert Into table(@field1,@field2....):
insert @field1,@field2... @system_user_name into log_table;
do_insert;

通过系统函数,可以得到调用者的名字,这个log_insert就可以把用户的
调用记录到一个专门的表中去。至于系统调用的到底是什么函数,就要看你自己
用的是什么数据库了。
 
多人接受答案了。
 
后退
顶部