在xsxxxg表中找出修改的项目

crtvu中,xsxxxg表没有识别究竟是哪个字段进行了信息修改(sfzh,xbdm,xm)。然尔却要求我们生成报表,找出哪个项目修改过的。但以上项目都有修改前、修改后的信息。因此,想法是对比修改前后数据,如果不一致,记录项目名称(有可能修改多个项目)。
关键:使用Tstringlist.commatext.
事前准备,将xsxxxg表从SQLServer中导出至Access,然后增加mfield,mpos字段。

代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
  i,j,no:integer;
  sl,slpos:Tstringlist;
//生成结果,分别记录修改项目,以及身份证号修改的位置
  osfzh,nsfzh:string;
//记录新旧新份证号
  issfzh:Boolean;
//是否身份证号修改了
begin
   sl:
=TStringList.Create;
   slpos:
=TStringList.Create;
  
with tbl do
   
begin
     Open;
    no:
=tbl.RecordCount;
    First;
    
for i:=1 to no do
      
begin
        issfzh:
=false;
        sl.clear;
        slpos.Clear;
        osfzh:
=Trim(FieldByName('sfzh').AsString);
        nsfzh:
= Trim(FieldByName('ysfzh').AsString);
        
if osfzh<>nsfzh then
           
begin
             issfzh:
=true;
             sl.Add(
'sfzh');
             
for j:=1 to Length(osfzh) do
               
begin
                 
if osfzh[j]<>nsfzh[j] then
                   slpos.add(IntToStr(j));
               
end;
           
end;
                
if Trim(FieldByName('xm').AsString)<>Trim(FieldByName('yxm').AsString) then
           
begin
             sl.Add(
'xm');
           
end;
                
if Trim(FieldByName('xbdm').AsString)<>Trim(FieldByName('yxbdm').AsString) then
           
begin
             sl.Add(
'xbdm');
           
end;
           edit;
           
if issfzh then
              FieldByName(
'mpos').Value:=slpos.CommaText;
           FieldByName(
'mfield').Value:=sl.CommaText;
           Post;
           Next;
      
end;//for
   
end;
   sl.Free;
   slpos.Free;
end;

执行的结果:
mfield记录了修改的项目,mpos是修改身份证号时,记录修改的位置。
原文地址:https://www.cnblogs.com/samsonleung/p/1229658.html