⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 u_client_dm.pas

📁 以多个信息系统为例
💻 PAS
字号:
unit u_client_DM;interfaceuses  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,  Db, DBClient, MConnect;const  cFileName='CustData.cds';  cCityFile='CityData.cds';  cProvFile='ProvData.cds';  cCounFile='CounData.cds';  cRegIniFile='Software\Client App';  cRegSection='Startup Config';  cRegOnlineIdent='Run Online';type  TDM_main = class(TDataModule)    DCOMConn: TDCOMConnection;    CD_custom: TClientDataSet;    DS_custom: TDataSource;    CD_city: TClientDataSet;    CD_province: TClientDataSet;    CD_country: TClientDataSet;    DS_city: TDataSource;    DS_province: TDataSource;    DS_country: TDataSource;    procedure DataModuleCreate(Sender: TObject);    procedure DataModuleDestroy(Sender: TObject);    procedure CD_customReconcileError(DataSet: TClientDataSet;      E: EReconcileError; UpdateKind: TUpdateKind;      var Action: TReconcileAction);    procedure CD_cityReconcileError(DataSet: TClientDataSet;      E: EReconcileError; UpdateKind: TUpdateKind;      var Action: TReconcileAction);    procedure CD_provinceReconcileError(DataSet: TClientDataSet;      E: EReconcileError; UpdateKind: TUpdateKind;      var Action: TReconcileAction);    procedure CD_countryReconcileError(DataSet: TClientDataSet;      E: EReconcileError; UpdateKind: TUpdateKind;      var Action: TReconcileAction);  private    procedure SetString(V:Variant; var S:String);  public    procedure ApplyUpdateCust;    procedure ApplyUpdateOther;    procedure SetOnLine(const Value:Boolean);    function GetOnline:Boolean;    procedure FilterOnCity;    procedure FilterOnProv;    procedure FilterOnCoun;    procedure NoFilter;  end;var  DM_main: TDM_main;implementationuses u_client_main, Registry;{$R *.DFM}procedure TDM_main.FilterOnCity;var  CityStr:String;  Data:OleVariant;begin  CityStr:=CD_city.FieldValues['CODE'];  if GetOnline then  begin    DCOMConn.AppServer.FilterOnCity(CityStr, Data);    CD_custom.Refresh;  end  else  begin    CD_custom.Filter:='CITY='''+CityStr+'''';    CD_custom.Filtered:=True;//    CD_custom.Refresh;  end;end;procedure TDM_main.FilterOnProv;var  ProvStr:String;  Data:OleVariant;begin  ProvStr:=CD_province.FieldValues['CODE'];  if GetOnline then  begin    DCOMConn.AppServer.FilterOnProv(ProvStr, Data);    CD_custom.Refresh;  end  else  begin    CD_custom.Filter:='PROVINCE='''+ProvStr+'''';    CD_custom.Filtered:=True;//    CD_custom.Refresh;  end;end;procedure TDM_main.FilterOnCoun;var  CounStr:String;  Data:OleVariant;begin  CounStr:=CD_country.FieldValues['CODE'];  if GetOnline then  begin    DCOMConn.AppServer.FilterOnCoun(CounStr, Data);    CD_custom.Refresh;  end  else  begin    CD_custom.Filter:='COUNTRY='''+CounStr+'''';    CD_custom.Filtered:=True;//    CD_custom.Refresh;  end;end;procedure TDM_main.NoFilter;var  Data:OleVariant;begin  if GetOnline then  begin    DCOMConn.AppServer.NoFilter(Data);    CD_custom.Refresh;  end  else  begin    CD_custom.Filtered:=False;//    CD_custom.Refresh;  end;end;function TDM_main.GetOnline:Boolean;begin  Result:=DCOMConn.Connected;end;procedure TDM_main.ApplyUpdateCust;begin  CD_custom.ApplyUpdates(-1);end;procedure TDM_main.ApplyUpdateOther;begin  CD_city.ApplyUpdates(-1);  CD_province.ApplyUpdates(-1);  CD_country.ApplyUpdates(-1);end;procedure TDM_main.SetOnLine(const Value:Boolean);begin  if Value then  begin    {连接并且提交修改}    DCOMConn.Connected:=True;    if CD_custom.ChangeCount>0 then      CD_custom.ApplyUpdates(-1);    if CD_city.ChangeCount>0 then      CD_city.ApplyUpdates(-1);    if CD_province.ChangeCount>0 then      CD_province.ApplyUpdates(-1);    if CD_country.ChangeCount>0 then      CD_country.ApplyUpdates(-1);  end  else  begin    CD_custom.FileName:=cFileName;    CD_city.FileName:=cCityFile;    CD_province.FileName:=cProvFile;    CD_country.FileName:=cCounFile;    DCOMConn.Connected:=False;  end;  {打开数据表并刷新}  CD_custom.Open;  CD_city.Open;  CD_province.Open;  CD_country.Open;end;procedure TDM_main.DataModuleCreate(Sender: TObject);var  RegIniFile:TRegIniFile;  IsOnLine:Boolean;begin  {读取注册信息}  RegIniFile:=TRegIniFile.Create(cRegIniFile);  try    IsOnLine:=RegIniFile.ReadBool(cRegSection, cRegOnlineIdent, True);  finally    RegIniFile.Free;  end;  SetOnLine(IsOnLine);end;procedure TDM_main.DataModuleDestroy(Sender: TObject);var  RegIniFile:TRegIniFile;begin  {保存在线状态}  RegIniFile:=TRegIniFile.Create(cRegIniFile);  try    RegIniFile.WriteBool(cRegSection, cRegOnlineIdent, GetOnLine);  finally    RegIniFile.Free;  end;end;procedure TDM_main.SetString(V:Variant; var S:String);begin  if VarIsNull(V) then    S:=EmptyStr  else    S:=String(V);end;procedure TDM_main.CD_customReconcileError(DataSet: TClientDataSet;  E: EReconcileError; UpdateKind: TUpdateKind;  var Action: TReconcileAction);var  TableName, FieldName, CurStr, NewStr, OldStr:String;  i:integer;  V:Variant;begin  for i:=0 to DataSet.FieldCount-1 do  begin{    Case DataSet.Tag of      0:TableName:='客户信息';      1:TableName:='城市代码';      2:TableName:='省份代码';      3:TableName:='国家代码';    end; }    TableName:='客户信息';    FieldName:=DataSet.Fields[i].FieldName;    V:=DataSet.Fields[i].NewValue;    SetString(V, NewStr);    V:=DataSet.Fields[i].OldValue;    SetString(V, OldStr);    V:=DataSet.Fields[i].CurValue;    SetString(V, CurStr);    if NewStr<>CurStr then      F_main.AddErrorToLV(TableName, FieldName,        OldStr, NewStr, CurStr, E.Message);  end;  Action:=raRefresh;end;procedure TDM_main.CD_cityReconcileError(DataSet: TClientDataSet;  E: EReconcileError; UpdateKind: TUpdateKind;  var Action: TReconcileAction);var  TableName, FieldName, CurStr, NewStr, OldStr:String;  i:integer;  V:Variant;begin  for i:=0 to DataSet.FieldCount-1 do  begin    TableName:='城市代码';    FieldName:=DataSet.Fields[i].FieldName;    V:=DataSet.Fields[i].NewValue;    SetString(V, NewStr);    V:=DataSet.Fields[i].OldValue;    SetString(V, OldStr);    V:=DataSet.Fields[i].CurValue;    SetString(V, CurStr);    if NewStr<>CurStr then      F_main.AddErrorToLV(TableName, FieldName,        OldStr, NewStr, CurStr, E.Message);  end;  Action:=raRefresh;end;procedure TDM_main.CD_provinceReconcileError(DataSet: TClientDataSet;  E: EReconcileError; UpdateKind: TUpdateKind;  var Action: TReconcileAction);var  TableName, FieldName, CurStr, NewStr, OldStr:String;  i:integer;  V:Variant;begin  for i:=0 to DataSet.FieldCount-1 do  begin    TableName:='省份代码';    FieldName:=DataSet.Fields[i].FieldName;    V:=DataSet.Fields[i].NewValue;    SetString(V, NewStr);    V:=DataSet.Fields[i].OldValue;    SetString(V, OldStr);    V:=DataSet.Fields[i].CurValue;    SetString(V, CurStr);    if NewStr<>CurStr then      F_main.AddErrorToLV(TableName, FieldName,        OldStr, NewStr, CurStr, E.Message);  end;  Action:=raRefresh;end;procedure TDM_main.CD_countryReconcileError(DataSet: TClientDataSet;  E: EReconcileError; UpdateKind: TUpdateKind;  var Action: TReconcileAction);var  TableName, FieldName, CurStr, NewStr, OldStr:String;  i:integer;  V:Variant;begin  for i:=0 to DataSet.FieldCount-1 do  begin    TableName:='国家代码';    FieldName:=DataSet.Fields[i].FieldName;    V:=DataSet.Fields[i].NewValue;    SetString(V, NewStr);    V:=DataSet.Fields[i].OldValue;    SetString(V, OldStr);    V:=DataSet.Fields[i].CurValue;    SetString(V, CurStr);    if NewStr<>CurStr then      F_main.AddErrorToLV(TableName, FieldName,        OldStr, NewStr, CurStr, E.Message);  end;  Action:=raRefresh;end;end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -