DataSnap Delphi 2010 Instância

Delphi

22/04/2010

boa tarde pessoal, criei um servidor de aplicação datasnap vcl no delphi 2010.
Container
  -DSServer
  -DSTCPServerTransport
  -DSServerClass
  -SQLConnection
em DSServerClass criei
function TServerMethods1.ConectaBanco(vBanco, vIP_Servidor, vUsuario, vSenha,
  vCaminho: string): string;
begin
  try
    ServerContainer1.SQLConnection.CloseDataSets;
    ServerContainer1.SQLConnection.Close;
    if vBanco = 'FIREBIRD' then
    begin
      ServerContainer1.SQLConnection.DriverName := 'FIREBIRD';
      ServerContainer1.SQLConnection.Params.Values['blobsize'] := '-1';
      ServerContainer1.SQLConnection.Params.Values['commitretain'] := 'False';
      ServerContainer1.SQLConnection.Params.Values['Database'] := vIP_Servidor+':'+vCaminho;
      ServerContainer1.SQLConnection.localecode := 0000;
      ServerContainer1.SQLConnection.Params.Values['PASSWORD'] := vSenha;
      ServerContainer1.SQLConnection.Params.Values['rolename'] := 'RoleName';
      ServerContainer1.SQLConnection.Params.Values['sqldialect'] := '3';
      ServerContainer1.SQLConnection.Params.Values['isolationlevel'] := 'ReadCommitted';
      ServerContainer1.SQLConnection.Params.Values['USER_NAME'] := vUsuario;
      ServerContainer1.SQLConnection.Params.Values['waitonlocks'] := 'True';
      ServerContainer1.SQLConnection.Params.Values['trim char'] := 'False';
      ServerContainer1.SQLConnection.Open;
    end;

    if vBanco = 'SQLEXPRESS' then
    begin
      ServerContainer1.SQLConnection.DriverName := 'MSSQL';
      ServerContainer1.SQLConnection.Params.Values['schemaoverride'] := '%.dbo';
      ServerContainer1.SQLConnection.Params.Values['HOSTNAME'] :=  'DELPHI-PC\SQLEXPRESS';
      ServerContainer1.SQLConnection.Params.Values['Database'] := 'bcnet';
      ServerContainer1.SQLConnection.Params.Values['USER_NAME'] := 'sa';
      ServerContainer1.SQLConnection.Params.Values['PASSWORD'] := '123456789';
      ServerContainer1.SQLConnection.Params.Values['blobsize'] := '-1';
      ServerContainer1.SQLConnection.localecode := 0000;
      ServerContainer1.SQLConnection.Params.Values['isolationlevel'] := 'ReadCommitted';
      ServerContainer1.SQLConnection.Params.Values['os authentication'] := 'False';
      ServerContainer1.SQLConnection.Params.Values['prepare sql'] := 'False';
      ServerContainer1.SQLConnection.Open;
    end;

  except
    on Exc:Exception do
      raise Exception.Create('Erro ao conectar banco. '+#13+ Exc.Message);
  end;

end
é mais complexa a função, mais coloquei assim pra entendimento de lógica os parametros da configuração estão sendo passados todos em tempo de execução.

o caso é:
dois clientes distintos acessam.. ele não cria uma instância do SQLConnection pra cada cliente, fica valendo no SQLConnection o ultimo q chamou e fez a configuração.... se o ultimo chamou firebird todos ja abertos se conectam ao banco firebird, mesmo antes chamado MSSQL.
sendo q eu chamo a config do cliente e todos os clientes conectados ficam com a última config chamana na SP.


Camilo França

Camilo França

Curtidas 0
POSTAR