Transação com aplicação 3 camadas, SQLConnection fica no ser
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
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
Curtidas 0
Respostas
Seu_madruga
20/05/2009
Ninguém?
GOSTEI 0
Edsant
20/05/2009
Acredito que vc vai ter que criar duas procedures no Server..
1º IniciaTransaction
2º FinalizaTransaction
Até mais....
1º IniciaTransaction
2º FinalizaTransaction
Até mais....
GOSTEI 0
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
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....
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
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
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...
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
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
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...
No site tem varios videos sobre o assunto...
GOSTEI 0
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?
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
20/05/2009
pessoal, só para organizar o código do meu post anterior:
Onde Transacao é uma variável global do tipo TTransactionDesc
Método VoltaTransacao, onde tem o código:
Método FinalizaTransacao, onde tem o código:
Bom, a na aplicação cliente, chamo da seguinte forma:
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