DataSnap Delphi 2010 Instância
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.
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
Curtidas 0