Fórum Transação DbExpress multi camadas #373626

15/08/2009

0

Alguém pode me informar como fazer uma transção com sistema multi camadas já que o sqlconnection está no servidor?

algum exemplo?


Guibas

Guibas

Responder

Posts

15/08/2009

Paullsoftware

Como você ta controlando as chamadas as rotinas do seu webservice??

tipo: eu tenho um WebService e chamo o Metodo UpDate por exemplo ele é disparado no cliente mas executado no servidor, então, uso a mesma lógica para o controle de transações :wink:

me diz como taz fazendo!
ta usando WebService com SOAP?


Responder

Gostei + 0

16/08/2009

Guibas

nao estou usando soap...

estou usando no servidor
sqlconnection
sqlquery
datasetprovider


cliente
socketconnection
clientdataset
datasource


e como sou iniciante nesse tipo de programacao...

é possivel enviar comandos pra ser executado no servidor?
tipo passar os parametros pra um insert ser executado no servidor?

que ai resolveria meus problemas...


Responder

Gostei + 0

23/08/2009

Paullsoftware

dá uma olhada no blog do [b:c5da71ea86]Bruno Lichot[/b:c5da71ea86] ele tem muita coisa sobre MultCamadas. ( http://cc.embarcadero.com/Author.aspx?ID=795118 ), mas usando SOAP tem sim, não só como enviar os parametros para serem executados, como também enviar um DataSet inteiro contendo todos os dados em tela para serem validades na Camada Servidora por meio de Steam em conjunto com o ClientDataSet... Segue um uma rotina básica de como uso em minha aplicações, não está completa, pois, estou sem Delphi aqui pra testar e desculpa a demora, é que ultimamente o tempo ta curto... um abraço :wink:


[b:c5da71ea86]Camada: Regras de Negócio (executada no Servidor de Aplicação)[/b:c5da71ea86]
function TLocServ.CarregaFeriados(CodFilial:Integer; Chave: WideString;
  var Messagem: WideString): TSOAPAttachment;
  var
  DataModule:TDM_LOCADORA;
  cdsTemp:TClientDataSet;
begin
 if  ValidaChave(Chave) then
  begin
    DataModule := TDM_LOCADORA.Create(nil);
    try
      with DataModule do
       begin
        Messagem := ´´;
        cdsTemp := TClientDataSet.Create(nil);
        strErro := TStringList.Create;
        cdsTemp.Name := ´cdsTemp´;
        cdsTemp.SetProvider(dspConsultas);
        qryCONSULTAS.Close;
        qryCONSULTAS.CommandText := ´select * from FERIADOS where CODFILIAL=:CODFILIAL order by DATA´;
        qryCONSULTAS.Params[0].AsInteger := CodFilial;
        cdsTemp.Open;
        Registro := TStringStream.Create(cdsTemp.XMLData);
        Registro.Position := 0;
        Result := TSOAPAttachment.Create;
        Result.SetSourceStream(Registro);
       end;
    except on msg:Exception do
      begin
       strErro.Add(´Erro no processo de seleção dos Feriados!´);
       strErro.Add(´Mensagem Original: ´ +msg.Message);
       Messagem := ´Erro no processo de seleção dos Feriados!´+#1313+msg.Message;
      end;
    end;
  end else Messagem := ´Chave de Execução Invalida!´;
end;

[b:c5da71ea86]Camada de Aplicação Cliente[/b:c5da71ea86]
//Variavel usada para invocar os métodos da WSDL importadas da Camada Servidora
GetLocadora :=GetILocServ();
//Transporto os dados processados no Servidor para a Camada Cliente passando alguns parametros
cdsCONSULTAS.LoadFromStream(GetLocadora.CarregaFeriados(GlbFilial, ´MINHA_CHAVE_VALIDACAO´, Mensagem).SourceStream);


é só uma parte do código para uma chamada simples com retorno de dados de uma rotina executada na camada de aplicação e retorna o resultado para camada cliente enviado os dados através de Steam em conjunto com o ClientDataSet, muito bom...
espero ter ajudado, qualquer coisas estamos ai :wink:


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar