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

📄 u_client_dm.~pas

📁 客户信息管理系统
💻 ~PAS
字号:
unit u_client_DM;

interface

uses
  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);
  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;

implementation
uses 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;
    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 + -