📄 u_client_dm.~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 + -