ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Unable to find record. No key specified

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
eremita
Aprendiz
Aprendiz


Registrado: Domingo, 7 de Janeiro de 2007
Mensagens: 228

MensagemEnviada: Qui Nov 05, 2015 6:17 pm    Assunto: Unable to find record. No key specified Responder com Citação

Olá, preciso de um campo que dependendo do lançamento será retornado um fator de juros ou caso contrário será 0 (zerado).
Minha query esta retornando da forma como preciso, acontece que este campo podera ser ou não alterado pelo usuário.
O problema é que quando faço a alteração deste campo me retorna o erro acima. Já setei o ProviderFlags no CDS deste campo para False, criei e recriei várias vezes e o erro continua.
Tirando a linha que se refere ao campo da query e criando uma no CDS, funciona perfeitamente.

Segue a query:

Código:

select
 cab.EMPRES,
 cab.DATOPE,
 case when cab.CEDENT = 12 then 1 else 0 end as TICCED,
 sac.NOME,
 doc.NOME1 as DOCAPE,
 case
  when (det.CMC7 not in ('', '<<>:')) then doc.NOME1 || ' '|| substring(det.CMC7 from 2 for 3) || ' ' || substring(det.CMC7 from 5 for 4) || ' ' || det.NRODOC
 else
  doc.NOME1 || ' '|| det.NRODOC
 end as DOCNRO,
 det.NRODOC,
 mov.ID,
 mov.DATLAN,
 mov.VALLAN,
 mov.TIPPEN,
 case when (pen.TIPMOV is Null) or (pen.TIPMOV = '0') then cast(ced.CFGOP2 as numeric(9,4)) else cast(0 as numeric(9,4)) end as TAXJRS,        ******* COLUNA AONDE GERA O ERRO *******
 ced.ID as CEDCOD,
 ced.NOME as CEDNOM,
 pen.NOME as NOMPEN,
 coalesce(pen.CFGTP1,0) as CFGTP1,
 coalesce(pen.CFGTP2,0) as CFGTP2,
 coalesce(pen.CFGTP3,0) as CFGTP3,
 case when pen.TIPMOV is Null then '0' else pen.TIPMOV end as TIPMOV,
 (select sum(pp.valor2) from PAGPCL pp where (pp.AGENDO = mov.ID)) as TOTREC
from
 AGENDO mov
left join
 DETOPE det
 on (mov.DETOPE = det.ID)
left join
 CABOPE cab
 on (cab.CABOPE = det.CABOPE) and (cab.EMPRES = det.EMPRES)
left join
 TIPDOC doc
 on (det.TIPDOC = doc.ID)
left join
 SACADO sac
 on (det.SACADO = sac.ID)
left join
 CEDENT ced
 on (cab.CEDENT = ced.ID)
left join
 TIPPEN pen
 on (mov.TIPPEN = pen.ID)


Alguma dica?

Desde já agradeço,

*Utilizo D7+FB 2.5
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Nov 06, 2015 8:25 am    Assunto: Responder com Citação

Bom dia,

Experimente setar as ProviderFlags desse campo no DataSet do DataSetProvider do CDS.

Espero que ajude.

_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-alugar-guarulhos-comercial_ou_industrial-galpão
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
eremita
Aprendiz
Aprendiz


Registrado: Domingo, 7 de Janeiro de 2007
Mensagens: 228

MensagemEnviada: Sex Nov 06, 2015 10:33 am    Assunto: Responder com Citação

Já foi feito também e nada ...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Nov 06, 2015 12:45 pm    Assunto: Responder com Citação

Em que momento exatamente está ocorrendo o erro?
Você pretende alterar o banco de dados? Se sim, qual tabela e qual(is) campo(s)?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
eremita
Aprendiz
Aprendiz


Registrado: Domingo, 7 de Janeiro de 2007
Mensagens: 228

MensagemEnviada: Sex Nov 06, 2015 1:20 pm    Assunto: Responder com Citação

O erro se dá quando altero a coluna TAXJRS.
Esta coluna é criada para que o usuário informe uma taxa para atualizar o valor de lançamento. Este campo não será atualizado na tabela de origem apenas, eu apenas estou pegando uma taxa que fica nesta tabela e dependendo de uma condição esta taxa será zerada. Seria como um campo temporário aonde aproveito uma informação que não será atualizada na base de origem.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Nov 06, 2015 2:07 pm    Assunto: Responder com Citação

O erro ocorre ao executar qual método?
Tem algum campo com a ProviderFlag pfInKey igual a true?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
eremita
Aprendiz
Aprendiz


Registrado: Domingo, 7 de Janeiro de 2007
Mensagens: 228

MensagemEnviada: Sex Nov 06, 2015 2:31 pm    Assunto: Responder com Citação

Deixe explicar melhor ...
O módulo ao qual estou aplicando é em uma liquidação de pendências do cliente.
Apresento um grid aonde trago data, valor, vencto, tipo de pendência, fator para correção e valor pago.
Neste grid os únicos campos que pode ser alterados são fator para correção e valor pago.

O erro ocorre no refresh após todo processo ter sido executado, como segue abaixo:
Código:
    if (DataModule.cdsPCarteira.ApplyUpdates(0) = 0) then
     DataModule.cdsPCarteira.Refresh;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Nov 06, 2015 2:54 pm    Assunto: Responder com Citação

Você disse anteriormente que não pretende atualizar o banco de dados, então não entendi porque é executado o método ApplyUpdates...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
eremita
Aprendiz
Aprendiz


Registrado: Domingo, 7 de Janeiro de 2007
Mensagens: 228

MensagemEnviada: Sex Nov 06, 2015 2:56 pm    Assunto: Responder com Citação

Não atualizo a tabela de onde estou "pegando" o fator, a tabela aonde ficam as pendências sim é atualizada pois estou processando a liquidação das referidas pendências.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Nov 06, 2015 3:13 pm    Assunto: Responder com Citação

Qual é o nome da tabela e dos campos que deverão ser alterados?
Quando os campos são alterados no Grid é feita alguma alteração via código nos campos que devem ser atualizados?
Qual(is) campo(s) faz(em) parte da PK dessa tabela?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
eremita
Aprendiz
Aprendiz


Registrado: Domingo, 7 de Janeiro de 2007
Mensagens: 228

MensagemEnviada: Sex Nov 06, 2015 3:41 pm    Assunto: Responder com Citação

Acompanhando a query do primeiro post seguem as respostas:

Qual é o nome da tabela e dos campos que deverão ser alterados?
Nome da Tabela: AGENDO
Campo a ser alterado: DATLIQ

Quando os campos são alterados no Grid é feita alguma alteração via código nos campos que devem ser atualizados?
Campo alterado no grid: TAXJRS (**observe como estou trazendo**)
e
VALPAG (criado no cds como InternalCalc)

Qual(is) campo(s) faz(em) parte da PK dessa tabela?
ID
O unico no ProviderFlag pfInkey True
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Nov 06, 2015 4:11 pm    Assunto: Responder com Citação

Não encontrei o campo DATLIQ na sua query.
Qual valor você pretende gravar nesse campo quando os campos TAXJRS e VALPAG são alterados no CDS?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
eremita
Aprendiz
Aprendiz


Registrado: Domingo, 7 de Janeiro de 2007
Mensagens: 228

MensagemEnviada: Sáb Nov 07, 2015 9:51 am    Assunto: Responder com Citação

Vamos tentar simplificar...
Em um grid preciso ter duas colunas que poderão ser alteradas pelo usuário. Criando no CDS e fazendo as devidas configurações, funciona perfeitamente. Acontece que preciso em uma dessas colunas trazer um fator que se encontra em uma outra tabela. Excluindo esta coluna no meu CDS e criando esta coluna pela query, quando faço a alteração e processo a rotina, o erro acontece.
Eu fiz o seguinte teste, criei uma coluna pela query aonde traz este fator e no CDS criei uma outra coluna. Abro o CDS, e percorro todos os registros atualizando este campo criado pelo gerado pela query. Faço as mesmas alterações e nada acontece.
Isto resolve meu problema, mas acredito que tenha a forma correta de se fazer isso.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sáb Nov 07, 2015 4:46 pm    Assunto: Responder com Citação

Até esse ponto entendi, mas não consegui entender o que você quer atualizar no banco de dados.
Você disse que o erro não ocorre se você cria outro campo no CDS e utiliza código para copiar o valor retornado pela query para esse campo, mas imagino que esse processo também não faz nenhuma atualização no banco de dados.
Dessa forma não sei ao certo o que sugerir, mas a idéia básica seria deixar as ProviderFlags iguais no CDS e no DataSet, sendo tudo igual a false para os campos que não devem ser alterados e a pfInKey igual a true para o campo chave da tabela a ser alterada. E em alguns casos também pode ser necessário adicionar código no evento OnGetTableName do DataSetProvider para atribuir o nome da tabela ao parâmetro TableName do evento.

Espero que ajude.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
eremita
Aprendiz
Aprendiz


Registrado: Domingo, 7 de Janeiro de 2007
Mensagens: 228

MensagemEnviada: Sáb Nov 07, 2015 6:14 pm    Assunto: Responder com Citação

Todas as recomendações já foram feitas e o problema permanece.
O curioso é que tenho um módulo semelhante a este e nele tudo corre bem ...
Por enquanto ficarei com o método de criar a coluna pela query e atualizar uma outra coluna criada no cds após abri-lo.

Muito obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB