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