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