Fórum Parametros do Client Data Set somem em tempo de execução #237675

15/06/2004

0

Meu Cliente Data Set funciona corretamente durante o desenvolvimento, porém em tempo de execução, ocorre um erro dizendo que não foi possível encontrar os parametros, testando percebi que o ParamsCount retorna zero, alguem sabe porque ele não esta conseguindo enchergar o parametro?

with CDSInspCada do
begin
Close;
CommandText := ´select tbinspecao.* from tbinspecao where (tbinspecao.cnpjempr = :Pcnpj) and (tbinspecao.nomeseto = :Psetor) and (tbinspecao.logiexecinsp = :Plogin) and (tbinspecao.datainsp = :Pdata);´;
FetchParams;
Params.ParamByName(´Pcnpj´).AsString := CNPJ;
Params.ParamByName(´Psetor´).AsString := Setor;
Params.ParamByName(´Plogin´).AsString := Login;
Params.ParamByName(´Pdata´).AsSQLTimeStamp := StrToSQLTimeStamp(Data);
try
Open;
result := True;
except
Cancel;
result := False;
end;

ERRO: ...CDSInspCada: Parameter ´Pcnpj´ not found. Process stoped...


Carvajal

Carvajal

Responder

Posts

15/06/2004

Paulo_amorim

Olá

Antes de abrir um ClientDataSet, recomenda-se dar um comando para fazer um ´retrieve´ nos parametros.

Portanto, antes de qualquer Open, execute, etc. coloque a procedure
ClientDataSet.FetchParams;


Isso deve resolver
Até+


Responder

Gostei + 0

15/06/2004

Carvajal

O comando FetchParams consta no código acima, pode ser que esteja mal declarado ou em lugar indevido, vc poderia me orientar caso ainda tenha mais sugestões, tenho apanhado um cado.

Obrigado pela atenção.


Responder

Gostei + 0

15/06/2004

Paulo_amorim

Olá

Desculpa, passei batido pelo FetchParams...

Como vc seta um CommandText, vc já tentou TIRAR o FetchParams?
Pode ser daí que some...

Só Tentando...
Até+


Responder

Gostei + 0

15/06/2004

Tec.doido

tente carregar os parametros primeiro !!!
with CDSInspCada do 
begin 
Close; 
FetchParams; 
Params.ParamByName(´Pcnpj´).AsString := CNPJ; 
Params.ParamByName(´Psetor´).AsString := Setor; 
Params.ParamByName(´Plogin´).AsString := Login; 
Params.ParamByName(´Pdata´).AsSQLTimeStamp := StrToSQLTimeStamp(Data); 
CommandText := ´select tbinspecao.* from tbinspecao where (tbinspecao.cnpjempr = :Pcnpj) and (tbinspecao.nomeseto = :Psetor) and (tbinspecao.logiexecinsp = :Plogin) and (tbinspecao.datainsp = :Pdata);´; 
try 
Open; 
result := True; 
except 
Cancel; 
result := False; 
end; 

pode ser que resolva.


Responder

Gostei + 0

15/06/2004

Dopi

Pelo que notei no seu código. Voce está criando uma consulta SQL no ComandText do ClientDataSet que deve estar ligado a um DataSetProvider com a propriedade AlowCommandText em True....

Sendo assim... não há necessidade de FetchPamaters, pois os paramatros estão sendo defindos no CommandText do ClientDataSet (local)... Use o FetchParameters apenas para pegar os paramteros de uma linha de SQL definida lá no SQLDataSet (remoto)...


Responder

Gostei + 0

16/06/2004

Carvajal

Pelo que percebi, tenho muito a aprender sobre componentes de acesso a Banco de Dados, mas me ajudaria muito se alguem me orientesse como passo um valor absoluto do tipo data numa instrução SQL, estou usando assim e esta dando um erro:

...
where tabela.campodata = #01/01/2004 00:00:00;

Já tentei Data e Data com Hora, com e sem ´´, a base q utilizo é Interbase com acosso DBExpress.

Ate mais galera


Responder

Gostei + 0

17/06/2004

Dopi

Essa linha:

Params.ParamByName(´Pdata´).AsSQLTimeStamp := StrToSQLTimeStamp(Data);

Ou

Params.ParamByName(´Pdata´).AsDateTime := now

não funcionaram ?

Não é recomendado passar a data como uma String... pois o formato da Data pode variar de um Sistema Operacional para outro ou de um Banco de Dados para Outro... Com isso o seu programa pode deixar de funcionar em alguns ambientes... Usando ParamByName é mais seguro...


Responder

Gostei + 0

17/06/2004

Carvajal

Desenvolvia utilizando Access e BDE, resolvi mudar para Interbase com DBExpress, e agora tamo aí, suando...

Valeu a dica qto ao uso de strings em SQL, não sabia deste incoveniente, mas quanto o meu problema:

A real é que o problema não chega a ser com o campo do tipo data, este sei que ainda terei que encarar, o fato é que quando tento ativar meu ClientDataSet ele diz que não encontra o 1º parametro, cheguei a excluir o criterio de data e manter os demais, que são string, mesmo assim os params nao foram encontrado, cheguei a checar a qtde de params que ele encherga e deu zero, foi quando...

Num comentario sobre este assunto percebi que os ClientDataSet deveriam se conectar aos DataSetProvider, e ai pensei q como os meus se conectam diretamente ao SQLConnection (o q deve estar errado), poderia ser esse o motivo do erro, resolvi entao rever o organização dos meu componentes de acesso, alguma sugestão?

Qualquer força será bem vinda

Obrigado pela ajuda


Responder

Gostei + 0

17/06/2004

Paulo_amorim

Olá

ClientDataSet - DataSetProvider - DataSet (query, table, etc.)

Essa ligação he a mais aconselhavel...
Se os cds e os providers estão em lugares diferentes, use a procedure
SetProvider
para especificar o provider do cara...

Espeor que ajude
Até+


Responder

Gostei + 0

19/06/2004

Carvajal

O erro era a estruturação dos meus componentes de acesso a dados (utilizando o dbExpress), seguindo a sujestão proposta (SQLConnection - Query - DataSetProvider - ClienteDataSet), consegui realizar consultas parametrizadas sem problemas

Valeu mesmo galera


Responder

Gostei + 0

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

Aceitar