Parametros do Client Data Set somem em tempo de execução
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...
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
Curtidas 0
Respostas
Paulo_amorim
15/06/2004
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
Isso deve resolver
Até+
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
Carvajal
15/06/2004
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.
Obrigado pela atenção.
GOSTEI 0
Paulo_amorim
15/06/2004
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é+
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
Tec.doido
15/06/2004
tente carregar os parametros primeiro !!!
pode ser que resolva.
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
Dopi
15/06/2004
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)...
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
Carvajal
15/06/2004
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
...
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
Dopi
15/06/2004
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...
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
Carvajal
15/06/2004
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
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
Paulo_amorim
15/06/2004
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 para especificar o provider do cara...
Espeor que ajude
Até+
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
Carvajal
15/06/2004
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
Valeu mesmo galera
GOSTEI 0