var mainform: Tmainform; // Prn_FieldWidth: Array of integer;
implementation
{$R *.dfm}
uses PRINTERS, ServerContainerUnit1;
procedure Tmainform.Button1Click(Sender: TObject); begin bRestart := True; CLose; end;
procedure Tmainform.FormClose(Sender: TObject; var Action: TCloseAction); begin ServerContainer1.DSServer1.Stop; StatusBar1.Panels[0].Text:='服务已关闭'; sleep(3000); if (bRestart) and (autowf.Checked = True) then ShellExecute(Self.Handle, 'open', PChar(Application.ExeName), nil, nil, SW_SHOWNORMAL); end;
procedure TServerContainer1.Timer1Timer(Sender: TObject); var timevalue: string; ipos: integer; trunctime: integer; begin { Timer1.Enabled := false;
timevalue := FormatDateTime('hh:nn:ss', Now()); ipos := pos(':', timevalue); if ipos > 0 then timevalue := copy(timevalue, 1, ipos - 1); trunctime := strtoint(timevalue); if (trunctime >= 0) and (trunctime <= 1) then begin mainform.bRestart := true; repeat sleep(1000); timevalue := FormatDateTime('hh:nn:ss', Now()); ipos := pos(':', timevalue); if ipos > 0 then timevalue := copy(timevalue, 1, ipos - 1); trunctime := strtoint(timevalue); mainform.Label1.Caption := '服务器将在2个小时内重起'; until (trunctime > 1); mainform.CLose; end;
Timer1.Enabled := true;} end;
procedure TServerContainer1.AddSessionListener; begin TDSSessionManager.Instance.AddSessionEvent( procedure(Sender: TObject; const EventType: TDSSessionEventType; const Session: TDSSession) begin case EventType of SessionCreate: begin // Inc(iSessionNumber); // TThread.Synchronize(nil, UpdateSessionNumber); end; SessionClose: begin ReleaseAnySessionObject(Session); end; end; end); end;
procedure TServerContainer1.ReleaseAnySessionObject(const Session: TDSSession); begin if (Session.HasObject(Session.SessionName)) then begin Session.RemoveObject(Session.SessionName, true); end; end;
procedure TServerContainer1.AddConnectionToList(Conn: TIdTCPConnection; Channel: TDSTCPChannel); VAR pConn: TIdTCPConnection; ConnInfoStr: String; begin pConn := Conn; if (Conn <> nil) and (Channel <> nil) and (Channel.ChannelInfo <> nil) and (Channel.ChannelInfo.ClientInfo.IpAddress <> EmptyStr) then begin with Channel.ChannelInfo.ClientInfo do begin
procedure TServerContainer1.UpdateTCPMonitorInfo; begin // mainform.lbTCPMonitorInfo.Items.AddObject(ConnInfoStr, pConn); end;
procedure TServerContainer1.DataModuleCreate(Sender: TObject); begin FDManager.ConnectionDefs.Clear;
end;
procedure TServerContainer1.DataModuleDestroy(Sender: TObject); begin FDManager.ConnectionDefs.Clear;
end;
procedure TServerContainer1.DisConnectConnection(theConnection : TIdTCPConnection); var theChannel: TDSTCPChannel; begin if (theConnection <> nil) then begin FConnections.TryGetValue(theConnection, theChannel);
{ TThread.Synchronize(nil, procedure var i:integer; sip,sport:string; begin sip:=theChannel.ChannelInfo.ClientInfo.IpAddress; sport:=theChannel.ChannelInfo.ClientInfo.ClientPort; // disstr:=Format('%s:%s',[sIP,sport]); i:= frmMainForm.lbTcpMonitorInfo.Items.IndexOf(Format('%s:%s',[sIP,sport])); if i<>-1 then frmMainForm.lbTcpMonitorInfo.Items[i]:=Format('%s:%s 被动断开',[sip,sport]); end ); } System.TMonitor.Enter(FConnections); FConnections.Remove(theConnection); System.TMonitor.Exit(FConnections);
theChannel.CLose; theChannel := nil; end; end;
procedure TServerContainer1.DSServer1Connect(DSConnectEventObject : TDSConnectEventObject); var ip: string; begin ClientConnection := DSConnectEventObject.ChannelInfo.ClientInfo; ip := ClientConnection.IpAddress; // mainform.Label1.Caption:=ip; ip := ''; end;
procedure TServerContainer1.DSServerClass1GetClass(DSServerClass : TDSServerClass; var PersistentClass: TPersistentClass); begin // PersistentClass := ServerMethodsUnit1.TServerMethods1; end;
procedure TServerContainer1.DSServerClass2GetClass(DSServerClass : TDSServerClass; var PersistentClass: TPersistentClass); begin // PersistentClass := ServerMethodsUnit2.TServerMethods2; end;
procedure TServerContainer1.DSServerClass3GetClass(DSServerClass : TDSServerClass; var PersistentClass: TPersistentClass); begin PersistentClass := ServerMethodsUnit3.TServerMethods3; end;
procedure TServerContainer1.DSTCPServerTransport1Disconnect (Event: TDSTCPDisconnectEventObject); var sip, sport, s: string; Conn: TIdTCPConnection; i: integer; begin { conn:=TIdTCPConnection(Event.Connection);
if Assigned(conn) then begin sip:=conn.Socket.Binding.PeerIP; sport:=IntToStr(conn.Socket.Binding.PeerPort); System.TMonitor.Enter(ServerContainer1.FConnections); if FConnections.ContainsKey(conn) then FConnections.Remove(conn); System.TMonitor.Exit(FConnections); s := Format('%s:%s',[sip,sport]); for I := 0 to mainform.lbTcpMonitorInfo.Items.Count - 1 do begin
if mainform.lbTcpMonitorInfo.Items[i].IndexOf(s)<>-1 then begin mainform.lbTcpMonitorInfo.Items[i]:=Format('%s:%s 主动断开',[sip,sport]); break end; end; end; mainform.edtSessionNumber.Text:=IntToStr(FConnections.Count); } sip := ''; sport := ''; s := '';; Conn := nil;
procedure TServerMethods3.BeginTrans; begin FDConnection1.StartTransaction; end;
procedure TServerMethods3.CommitTrans; begin FDConnection1.Commit; end;
procedure TServerMethods3.RollbackTrans; begin FDConnection1.Rollback; end;
procedure TServerMethods3.setgntb(spn: string); var FDStoredProc1: TFDStoredProc; begin FDStoredProc1 := TFDStoredProc.Create(self); FDStoredProc1.Connection := FDConnection1; // FDStoredProc1.Prepare with FDStoredProc1 do begin storedprocname := spn; // UniDirectional := false; Prepare; // parambyname('tb').Value := tb; // parambyname('fdlist').Value := fdlist; execute; // result:=UniStoredProc1.ParamByName('f150').Value; close; end; end;
procedure TServerMethods3.execsql(sqltxt: string); var execsql: TFDQuery; begin execsql := TFDQuery.Create(self); execsql.Connection := FDConnection1; // FDStoredProc1.Prepare with execsql do begin close; sql.Text := sqltxt; // UniDirectional := false; //Prepare; // parambyname('tb').Value := tb; // parambyname('fdlist').Value := fdlist; execute; // result:=UniStoredProc1.ParamByName('f150').Value; //close; end; end;
function TServerMethods3.getnowtdate: string; var str: string; begin // str:=datetostr(trunc(now)); result := FormatdateTime('c', now); end;
function TServerMethods3.getswdate(year, week, one: string): string; var str: string; begin // year:=formatdatetime('yyyy',date); result := datetostr(StartOfAWeek(strtoint(year), strtoint(week), strtoint(one))); end;
function TServerMethods3.gndspDataRequest(Sender: TObject; Input: OleVariant) : OleVariant; var f672, f61: string; ipos: integer; maxsn: integer; begin { with fdquery6 do begin close; sql.Clear; sql.Add('select MAX(convert(int,c9)) from c9'); //parambyname('f672').Value:=f672; //parambyname('f61').Value:=f61; open; if isempty then maxsn:=1 else maxsn:=fields[0].Value; end; }
ipos := pos(';', Input); if ipos > 0 then begin f672 := copy(Input, 0, ipos - 1); f61 := copy(Input, ipos + 1, length(Input)); with FDQuery6 do begin close; parambyname('f672').Value := f672; parambyname('f61').Value := f61; execsql; end; end; end;
function MyCreateDetailDataSet(AOwner: TComponent; DataSource: TDataSource; const AName: String; const ASQL: String): TDataSet; stdcall; var Qry: TFDQuery; begin Qry := TFDQuery.Create(AOwner); Qry.Connection := TFDQuery(DataSource.DataSet).Connection; Qry.Name := AName; Qry.MasterSource := DataSource; Qry.SQL.Text := ASQL; result := Qry; end;
function MyCreateProviderEx(AOwner: TComponent; FDConnection: TFDConnection; ProviderName, SQL, KeyFields: string; Detail: OleVariant; SetFieldsReadOnly: boolean; EUpdateError: TResolverErrorEvent): boolean; var ProvComp: TComponent; Qry: TFDQuery; DsProvider: TDataSetProviderEx; begin
{ procedure setaqrsn(mxcds,mxsncds: TADOQuery); var maxsn:integer; begin if mxcds.State<>dsInactive then begin maxsn:=getmaxsn(mxsncds); with mxcds do begin //edit; first; repeat if fieldbyname('sn').Value=-1 then begin edit; fieldbyname('sn').Value:=maxsn; post; maxsn:=maxsn+1; end; next until eof; end; end; end; }
function TServerMethods3.EchoString(Value: string): string; begin result := Value; end;
function TServerMethods3.execsqldspDataRequest(Sender: TObject; Input: OleVariant): OleVariant; var sqltxt, txt, paramlist, para, paramvalue: string; sqllist: Tstringlist; ipos, ipos1: integer; begin try sqllist := Tstringlist.Create; sqllist.Text := Input; paramlist := sqllist.Strings[0]; sqllist.Delete(0); // txt:=input; // execsqlqry.sq with execsqlqry do begin close; SQL.Clear; SQL.Add(sqllist.Text); // sql.SaveToFile('c:\123.txt'); // sql:=sqllist; prepared; ipos := pos(',', paramlist); while ipos <> 0 do begin para := copy(paramlist, 0, ipos - 1); paramlist := copy(paramlist, ipos + 1, paramlist.length); ipos1 := pos('=', para); paramvalue := copy(para, ipos1 + 1, para.length); para := copy(para, 1, ipos1 - 1); parambyname(para).Value := paramvalue; ipos := pos(',', paramlist); end; execsql; close; end; finally sqllist.Free; end; end;
{ function TServerMethods3.getserverdspname: string; begin Result := Getdspname();
end;
function TServerMethods3.getdsp(ProviderName:string):TDataSetProviderEx; var i,count:integer; begin count:=self.ComponentCount - 1; result:=nil; for i := 0 to count do begin if self.Components[i] is TDataSetProviderEx then begin if self.Components[i].Name = ProviderName then begin result:=TDataSetProviderEx(self.Components[i]); break; end; //list.Add(self.Components[i]); end; end; end; }
function TServerMethods3.getdjbh(djtype: string): string; var i, count: integer; bhcds: TClientDataSetEx; begin
end; { procedure TServerMethods3.Releaseserverdspname(ProviderName: string); var i: integer; list: Tlist; dsp: TDataSetProviderEx; count:integer; begin //list := Tlist.Create; Releasedspname(ProviderName);
dsp:=nil; dsp:=getdsp(ProviderName); if dsp<>nil then BEGIN dsp.dataset.free; dsp.Free; END;
end; } { function TServerMethods3.cleardsp:TDataSetProviderEx; var i,count:integer; dsp:TDataSetProviderEx; Qry: TUniQuery; begin count:=self.ComponentCount - 1; result:=nil; for i := count downto 0 do //repeat begin if self.Components[i] is TDataSetProviderEx then begin dsp:=TDataSetProviderEx(self.Components[i]); dsp.DataSet.Free; DSP.Free; //count:=self.ComponentCount - 1; end; //list.Add(self.Components[i]);
end;
count:=self.ComponentCount - 1; for i := count downto 0 do begin if self.Components[i] is TUniQuery then begin qry:=TUniQuery(self.Components[i]); //dsp.DataSet.Free; qry.Free; //list.Add(self.Components[i]); end; end; end; }
function TServerMethods3.ReverseString(Value: string): string; begin result := System.StrUtils.ReverseString(Value); end;
function TServerMethods3.CreateDSProvider(ProviderName: String): boolean; begin result := false; // MyCreateProvider(self, 公司数据库, ProviderName, True, DSPUpdateError); result := True; end;
function TServerMethods3.CreateDSProviderEx(ProviderName, SQL, KeyFields: string; Detail: OleVariant): boolean; var i: integer; dsp: TDataSetProviderEx; dspExist: boolean; begin dspExist := false; for i := 0 to self.ComponentCount - 1 do begin if (self.Components[i].Name = ProviderName) then begin dspExist := True; if self.Components[i] is TDataSetProviderEx then begin dsp := (self.Components[i]) as TDataSetProviderEx; {$IFDEF DEBUG_ON} dsp.Free; dspExist := false; {$ENDIF} end else begin {$IFDEF DEBUG_ON} self.Components[i].Free; dspExist := false; {$ENDIF} end; Break; end; end;
if not dspExist then MyCreateProviderEx(self, FDConnection1, ProviderName, SQL, KeyFields, Detail, True, DSPUpdateError); end;
procedure TServerMethods3.DataSetProvider3BeforeApplyUpdates(Sender: TObject; var OwnerData: OleVariant); begin // OwnerData.fieldbyname('sn').value:=-1 end;
procedure TServerMethods3.DSPUpdateError(Sender: TObject; DataSet: TCustomClientDataSet; E: EUpdateError; UpdateKind: TUpdateKind; var Response: TResolverResponse); begin raise E; end;
procedure TServerMethods3.DSServerModuleCreate(Sender: TObject); begin // xx.SaveToStream; // setserverdb('data00000000001'); end;
procedure TServerMethods3.DSServerModuleDestroy(Sender: TObject); begin FDConnection1.close; end;
destructor TServerMethods3.Destroy; begin FDConnection1.Connected := false; inherited; end;
procedure SetSQLProperty(AControl: TComponent; { PropName: string; } Value: String); var pInfo: PPropInfo; objTemp: TObject; begin if IsPublishedProp(AControl, 'CommandText') then begin SetPropValue(AControl, 'CommandText', Value); Exit; end; pInfo := GetPropInfo(AControl.ClassInfo, 'SQL'); if (pInfo <> nil) and (pInfo^.PropType^.Kind = tkClass) then begin objTemp := GetObjectProp(AControl, pInfo); if Assigned(objTemp) then begin TStrings(objTemp).Text := Value; // pInfo := GetPropInfo(objTemp.ClassInfo, 'Text'); // if pInfo <> nil then // SetPropValue(objTemp, 'Text', Value); end; end; end;
function TServerMethods3.ResetDspDataSetSQL(ProviderName, SQL: string): boolean; var i: integer; dsp: TDataSetProvider; begin result := false; for i := 0 to self.ComponentCount - 1 do begin if SameText(self.Components[i].Name, ProviderName) then begin if (self.Components[i] is TDataSetProviderEx) or (self.Components[i] is TDataSetProvider) then begin dsp := (self.Components[i]) as TDataSetProvider; if dsp.DataSet <> nil then begin SetSQLProperty(dsp.DataSet, SQL); result := True; end; end; Break; end; end; end;
procedure ResetDspChildDetailDatasetSQLEx(DetailDataSetItem : TProviderDetailDataSetColumn; const Detail: OleVariant); var i: integer; ChildDetail: OleVariant; begin if not VarIsNull(Detail) and VarIsArray(Detail) and VarIsArray(Detail[0]) then begin for i := 0 to VarArrayHighBound(Detail, 1) do begin with DetailDataSetItem.ChildDetailDataSet.Items[i] do begin DataSet.Name := Detail[i][0]; // name SetSQLProperty(DataSet, Detail[i][1]); // sql KeyFields := Detail[i][2]; ChildDetail := Detail[i][3]; ResetDspChildDetailDatasetSQLEx (DetailDataSetItem.ChildDetailDataSet.Items[i], ChildDetail); end; end; end; end;
function ResetDspDataSetSQLEx2(Provider: TDataSetProviderEx; SQL, KeyFields: string; Detail: OleVariant): boolean; var HighBound, i: integer; ChildDetail: OleVariant; begin // TUniQuery(Provider.DataSet).SQL.text := sql; SetSQLProperty(Provider.DataSet, SQL); // Provider.UpdateMode := upWhereKeyOnly; Provider.KeyFields := KeyFields;
if not VarIsNull(Detail) and VarIsArray(Detail) and VarIsArray(Detail[0]) then begin for i := 0 to VarArrayHighBound(Detail, 1) do begin HighBound := VarArrayHighBound(Detail[i], 1); with Provider.DetailDataSet.Items[i] do begin DataSet.Name := Detail[i][0]; // name SetSQLProperty(DataSet, Detail[i][1]); // sql KeyFields := Detail[i][2]; ChildDetail := Detail[i][3]; ResetDspChildDetailDatasetSQLEx(Provider.DetailDataSet.Items[i], ChildDetail); end; end; end; end;
function TServerMethods3.ResetDspDataSetSQLEx(Provider: TDataSetProviderEx; SQL, KeyFields: string; Detail: OleVariant): boolean; begin result := false; ResetDspDataSetSQLEx2(Provider, SQL, KeyFields, Detail); result := True; end;