Migração do D7 para o D2010
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.
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
Curtidas 0
Respostas
Douglas
07/02/2015
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"?
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"?
GOSTEI 0
Anconsultoria
07/02/2015
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.
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.
GOSTEI 0
Douglas
07/02/2015
Alvaro, agora um fato curioso. O que na verdade você quer fazer para passar parâmetros para o CDS?
GOSTEI 0
Anconsultoria
07/02/2015
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 ?
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 ?
GOSTEI 0