Fórum Parametros do Client Data Set somem em tempo de execução #237675
15/06/2004
0
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
Curtir tópico
+ 0Posts
15/06/2004
Paulo_amorim
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é+
Gostei + 0
15/06/2004
Carvajal
Obrigado pela atenção.
Gostei + 0
15/06/2004
Paulo_amorim
Desculpa, passei batido pelo FetchParams...
Como vc seta um CommandText, vc já tentou TIRAR o FetchParams?
Pode ser daí que some...
Só Tentando...
Até+
Gostei + 0
15/06/2004
Tec.doido
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.
Gostei + 0
15/06/2004
Dopi
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)...
Gostei + 0
16/06/2004
Carvajal
...
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
Gostei + 0
17/06/2004
Dopi
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...
Gostei + 0
17/06/2004
Carvajal
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
Gostei + 0
17/06/2004
Paulo_amorim
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
Espeor que ajude
Até+
Gostei + 0
19/06/2004
Carvajal
Valeu mesmo galera
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)