Fórum Migração do D7 para o D2010 #509926

07/02/2015

0

Tenho um problema de migração do D7 para D2010 que não acho resposta na WEB:
Estou migrando uma pequena aplicação escrita em D7 para D2010 e o problema é a atribuição do tipo de um parametro. Um exemplo:

No D7 está como cdsXXX.Params.Parambyname('parametro').AsString := 'aaaaa'; ....... --> funciona normalmente.
No D2010 só funciona como cdsXXX.Params.Parambyname('parametro').Value := 'aaaaa';
So ocorre em parametros que esperam o tipo String.

Diga-se de passagem que aplicações escritas no D2010 também têm que estar com o tipo VALUE para parametros que esperam um String.

Alguem pode explicar o porque e se há como manter no D2010 os parametros que recebem String como .....('parametro').AsString ?
Agradeço.
Anconsultoria

Anconsultoria

Responder

Posts

11/02/2015

Douglas

Olá Alvaro, tudo bem?
Até aonde eu sei, tem como manter os parâmetros que recebem String. Até porque a definição do tipo value é quando não se sabe o tipo de dado esperado. Agora, que erro é gerado quando você defini que o seu parâmetro é "AsString"?
Responder

Gostei + 0

12/02/2015

Anconsultoria

Olá Douglas, agradeço a atenção A mensagem que recebo é: Project xxxx raise exception class EOleException with message 'Input parameter count is less than expected'.

Naturalmente os parametros estão certos, se eu troco o .AsString por .Value tudo funciona bem.
Eu citei no início sobre migração do D7 para o D2010, mas veja bem, isto acontece em qq projeto no D2010 Uma curiosidade é que se eu carrego uma variável String com o valor de um parâmetro de retorno, posso colocar String ( em StoredProcedures, por exemplo ):

Variavel1 : String;
Variavel1 := cdsTeste.Params.ParamByName('S_NOMEUSUARIO').AsString; ===> Funciona, parametro de retorno;

cdsTeste.Params.ParamByName('NomeUsuario').AsString := 'jose1; ======> Não funciona, parametro de entrada.
cdsTeste.Params.ParamByName('NomeUsuario').Value:= 'jose1; ======> Funciona, parametro de entrada.

Não sei se ficou confuso, mas é isso.
Responder

Gostei + 0

12/02/2015

Douglas

Alvaro, agora um fato curioso. O que na verdade você quer fazer para passar parâmetros para o CDS?
Responder

Gostei + 0

13/02/2015

Anconsultoria

Douglas, é uma estrutura convencional de acesso a banco de dados em um datamódulo remoto, que é o meu caso, e de uso muito comum.

query --> datasetprovider --> clientdataset1.
Exemplo: Na query teríamos: SELECT * FROM CLIENTE WHERE CNPJ = :PRMCNPJ ( CNPJ É UM CAMPO STRING NA TABELA CLIENTE ). A qry retorna todos os dados da tabela CLIENTE, certo. ? E o clientdataset1 ligado a ela também, claro. A lógica seria:

clientdataset1.Close;
clientdataset1.Params.ParamByName('PRMCNPJ').AsString := '123.456.0001-99';
clientdataset1.open; ---> aqui aparece o erro.

Se eu troco por:
.....
clientdataset1.Params.ParamByName('PRMCNPJ').Value:= '123.456.0001-99';
......

Tudo funciona.

Entendeu ?
Responder

Gostei + 0

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

Aceitar