Transação com aplicação 3 camadas, SQLConnection fica no ser

Delphi

20/05/2009

Fala pessoal

Estou migrando minha aplicação Cliente/Servidor para 3 camandas, estou passando o SQLConnection, os Providers e os SQLDataSets para o Servidor de aplicação. Hoje no meu sistema, ativo as transações acessando diretamente o SQLconnection, mas agora o SQLConnection estará no servidor, como faço controle de transações agora? StarTransaction, Commit e Rollback?

Abraço


Seu_madruga

Seu_madruga

Curtidas 0

Respostas

Seu_madruga

Seu_madruga

20/05/2009

Ninguém?


GOSTEI 0
Edsant

Edsant

20/05/2009

Acredito que vc vai ter que criar duas procedures no Server..

1º IniciaTransaction
2º FinalizaTransaction

Até mais....


GOSTEI 0
Seu_madruga

Seu_madruga

20/05/2009

Acredito que vc vai ter que criar duas procedures no Server.. 1º IniciaTransaction 2º FinalizaTransaction Até mais....


Perfeito, mas como eu faço isso? Crio uma procedure comum? Como eu faço para o cliente enxergar essa procedure?


GOSTEI 0
Edsant

Edsant

20/05/2009

Caro amigo,

Para a aplicação cliente enxergar o seu RemoteDataModule, se vc tiver feito todas as conexões corretamente de uma aplicação 3 camadas vc vai fazer assim:

1ºEm View/Type Library Você pode criar as suas procedures/functions...
2º Criar uma procedure Mensagem no servidor: //Exemplo
3º Na aplicação cliente:

procedure TForm1.Button1Click(Sender: TObject);
begin
[b:c5875b32af]SocketConnection1.AppServer.[/b:c5875b32af]Mensagem(´MinhaMensagem´);
end;

O Segredo é o [b:c5875b32af]appServer[/b:c5875b32af] que vai buscar as procedures da aplicação servidora...

No site tem vários vídeos que pode explicar melhor para vc como funciona...

Minha didática é horrível rs....


GOSTEI 0
Seu_madruga

Seu_madruga

20/05/2009

Caro amigo, Para a aplicação cliente enxergar o seu RemoteDataModule, se vc tiver feito todas as conexões corretamente de uma aplicação 3 camadas vc vai fazer assim: 1ºEm View/Type Library Você pode criar as suas procedures/functions... 2º Criar uma procedure Mensagem no servidor: //Exemplo 3º Na aplicação cliente: procedure TForm1.Button1Click(Sender: TObject); begin [b:2be45bbd0e]SocketConnection1.AppServer.[/b:2be45bbd0e]Mensagem(´MinhaMensagem´); end; O Segredo é o [b:2be45bbd0e]appServer[/b:2be45bbd0e] que vai buscar as procedures da aplicação servidora... No site tem vários vídeos que pode explicar melhor para vc como funciona... Minha didática é horrível rs....


Opa, que nada amigo, já me fez dar um enorme passo, agora sim entendo como a aplicação cliente enxerga as procedures e functions no servidor, ja abri o type library, são não sei agora como criar as procedures la dentro.


GOSTEI 0
Edsant

Edsant

20/05/2009

Amigo,

No Type Library vc apenas declara as procedures ou functions..

Vc vai perceber que depois que vc declarou as procedures ou functions elas automaticamente vão aparecer no RemoteDataModule. ai é só implementar...


GOSTEI 0
Seu_madruga

Seu_madruga

20/05/2009

Amigo, No Type Library vc apenas declara as procedures ou functions.. Vc vai perceber que depois que vc declarou as procedures ou functions elas automaticamente vão aparecer no RemoteDataModule. ai é só implementar...


Ok mas como declarar?

Aqui na minha Tye Ltbrary, aparece o nome do projeto, dai ele me cria uma interface e uma CoClass com o nome do mue RemoteDataModule.
Mos onde eu crio as procedures ou funcions? Clico aqui e só me tem criar novas Interfaces, CoClass, metodos, ...


GOSTEI 0
Edsant

Edsant

20/05/2009

Entâo, vc tem que criar Metodos, que são as procedures ou functions....

No site tem varios videos sobre o assunto...


GOSTEI 0
Seu_madruga

Seu_madruga

20/05/2009

Criei 3 métodos dentro de um RemoteDataModule dentro do Servidor de Aplicação que enxerga o DataModule onde fica o SQLConnection:

Método IniciaTransacao, onde tem o código:

Transacao.TransactionID := Random(65535); Transacao.IsolationLevel := xilREADCOMMITTED; DMSQL.sqlConn.StartTransaction(Transacao);

Onde Transacao é uma variável global do tipo TTransactionDesc

Método VoltaTransacao, onde tem o código:

DMSQL.sqlConn.RollBack(Transacao);

Método FinalizaTransacao, onde tem o código:

DMSQL.sqlConn.Commit(Transacao);

Bom, a na aplicação cliente, chamo da seguinte forma:

try DMSQL.SocketConnetion1.AppServer.IniciaTransacao; [Código] DMSQL.SocketConnetion1.AppServer.FinalizaTransacao;except DMSQL.SocketConnetion1.AppServer.VoltaTransacao;end;

O que ocorre é o seguinte: Eu coloquei um breakPoint dentro da função IniciaTranscao e ao sair da função, da um dos seguintes erros na aplicação cliente:

Error reading data from the connection
Error wrinting data to the connection

Sempre é um desses erros e a aplicação servidora congela, tendo que fecha-la só derrubando a aplicação pelo CTRL + ALT + DEL.

Alguém sabe a causa desses erros? Ou seria o problema da transação? O que me sugerem?


GOSTEI 0
Seu_madruga

Seu_madruga

20/05/2009

pessoal, só para organizar o código do meu post anterior:

Transacao.TransactionID := Random(65535); Transacao.IsolationLevel := xilREADCOMMITTED; DMSQL.sqlConn.StartTransaction(Transacao); 


Onde Transacao é uma variável global do tipo TTransactionDesc

Método VoltaTransacao, onde tem o código:

DMSQL.sqlConn.RollBack(Transacao); 


Método FinalizaTransacao, onde tem o código:

DMSQL.sqlConn.Commit(Transacao); 


Bom, a na aplicação cliente, chamo da seguinte forma:

try 
  DMSQL.SocketConnetion1.AppServer.IniciaTransacao; 
  
  [Código] 
  
  DMSQL.SocketConnetion1.AppServer.FinalizaTransacao;
except 
  DMSQL.SocketConnetion1.AppServer.VoltaTransacao;
end; 



GOSTEI 0
POSTAR