Passar parâmetros para o Servidor de Aplicação

07/07/2008

1

Meu servidor de aplicação constrói todas as instruções SQL que eu preciso utilizar. No Client eu preciso apenas passar parâmetros. Antes eu executa~va tudo no client, passando inclusive o CommandText dos CDS o que me desaconselharam a fazê-lo. Eu também não gostaria disso. Quero apenas as instruções das querys no SA e os clients passando apenas parâmetros. Tentei usar o AppServer do Objeto SocketConnection, mas não estou conseguindo concluir. Minhas funções eu passo assim:
function PegaVendedor(Cod:Integer):String; begin if not ConGeral.Connected then ConGeral.Open; Result := ConGeral.AppServer.ExecFuncao(PEGA_VENDEDOR,IntToStr(Cod)); end;
Essa função é executada do Client. Está funcionando bem. ExecFuncao é um método criado no RDM principal para executar todas as funções no meu servidor. Esse modelo é legal e bem funcional. Só preciso passar parâmetros para as minhas querys que eu não estou conseguindo. Devo criar mais um método? Como eu faria?


Responder

Posts

07/07/2008

Comodelphi

vc defininiu uma interface no RDM?


Responder

07/07/2008

Paulo

Sim. Esse modelo funciona. Eu só não quero mais é passar CommandText do Client para o Server, só isso. Hoje eu passo, mas como funciona em uma rede local, o impacto é pequeno.


Responder

07/07/2008

Comodelphi

então se já tem uma interface definida com função implementada e tudo, vc passa os parametros normal. o que a sua funcao faz??? é parar abrir a query???? posta a interface implementada do RDM


Responder

07/07/2008

Luiz Henrique

Boa Noite Paulo, tudo blz.

So confirmando, vc usa Cliente->BSS->Servidor Aplicacao , OK.
Nao sei se entendi direito, voce nao esta conseguindo concluir esta funcao que indicou ai ?
PEGA_VENDEDOR e uma especie de constante/ID para a funcao ?, para este exemplo ai, parece ser apenas um retorno do nome do vendedor.
Note que vc esta executando esta funcao do RDM Principal.
Declare um metodo no RDM Principal pela TypeLibrary.
Nome: ExecFuncao
Retorno: WideString
Parametro: id_vendedor: WideString(pelo que vc declarou)

//* TClassePrincipal seria o teu RDM Principal
function TClassePrincipal.ExecFuncao(const id_vendedor: WideString): WideString;
begin
//...aqui poderia fazer este codigo de varias formas, CDS, Qry...e etc
//...exemplifico com um classico que nao deve ser usado no cliente e sim
//...aqui no Servidor. Local de SQL é no Servidor.
cdsVendedor.Close;
cdsVendedor.CommandText:= ´SELECT NOME FROM VENDEDOR WHERE ID= ´+id_vendedor;
cdsVendedor.Open;

if cdsVendedor.RecordCount > 0 then
result:= cdsVEndedor.FieldByName(´NOME´).AsString
else
result:= ´´
//2 Exemplo
...um cds
end;

Existem varias formas de voce passar estes parametros e ate criar Queries dinamicas no Servidor.
Neste teu exemplo ai, o mais indicado seria voce fazer pelo modo mais apropriado, que seria atraves de CDS no cliente(devidamente configurado, RemoteServer/ProviderName para o RDM-Servidor), seta Parametro(naturamente o ID-Vendedor) e CDS.Open...
Para queries em geral e nao ter que ficar alterando na Type Library, a inclusao por exemplo de + um parametro, vc pode usar um array of OleVariant como parametro [vdatai, vdataf, CodCliente]...tem que encapsular este array em um OleVariant para passar ao servidor, no servidor vc acessa Parametro[0], parametro[1] e etc....

Desculpe se nao era isto, questione ai novamente para trocarmos este conhecimento ai.

Espero que ajude al alguma coisa

T+
Abraco , t+


Responder

08/07/2008

Paulo

Me desculpe por não ser muito explícito. Passar parâmetros para uma função eu consigo. Todo o meu sistema se baseia em função no servidor. Eu queria era rodar uma query, um select simples. Esse select tem ParamByName e eu não estou conseguindo passa um Edit1.Text como parâmetro para esse select sem que seja por função. Como essa função me retorna um range de dados, prefiro fazer o select no servidor e via Provider ter esse resultado em meu grid no client. Essa função eu postei apenas para dizer que dessa forma funciona e dei exemplo da minha PEGA_VENDEDOR. Tenho mais de 200 funções sendo executada no server e funcionando bem.


Responder

08/07/2008

Luiz Henrique

Bom dia Paulo, sussegado...
Para ficar mais claro, Paulo, voce teria é que postar algo mais concreto...
Por exemplo, a instrucao SQL que deseja executar no servidor, que voce nao consegue passar ou configurar parametro para ela...
...e tambem se possivel a forma que deseja executar no lado Cliente...
Ai poderemos analisar melhor...
Ah...nao esqueca de dizer qual o componente de acesso que esta utilizando tambem...lado cliente (executar ou receber) e lado servidor...

T+


Responder

10/07/2008

Paulo

É o seguinte: Preciso executar uma Query(CommandText) no servidor e o parâmetro dessa SQL vem do Cliente.
Uso: DBExpress, Socket, Oracle 8i, BDS 2007, usando 3 camadas. O servidor é remoto. É mais ou menos assim:

Select CodigoCor, Produto from
Cor where CodProduto =:Prod.

Esse parãmetro Prod vem do Cliente(ComoboBox1.Text). É isso que eu quero e não estou conseguindo fazer. Tudo é para não passar CommandText remotamente. Dessa forma funciona. Eu quero mesmo é fazer funcionar a query no servidor e os parâmetros via Cliente.


Responder

10/07/2008

Paulo

Já Resolvi. Problemas de BIOS, eheheheheh. Era só criar um parâmetro no CDS e apontar para a SQL no Servidor,nada mais que isso.


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira