Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) stack overflow em campo Lookup no Dbgrid


Sandro AS

Pergunta

Olá, Sou novo por aqui, mas vamos lá.

TABELA= PAGTO > PGT_CODIGO.....

TABELA= FORMA > FGT_CODIGO.....

TABELA= VENDA > EN_CODIGO .....

Tenho um dbgrid onde criei um campo (Field Lookup) onde:

KeyFields= PGT_CODIGO, LookupDataset=CdsForma, LookupKeyField=FGT_CODIGO, LookupResultField=FGT_DESCRICAO.

Com a inteção abrir algo semelhante ao DBLookupComboBox dentro do grid. Até ai tudo bem, Porem quero salvar as informações necessarias dentro do grid onde uso o seguinte codigo.

procedure TDm.CdsPagtoFORMAChange(Sender: TField);

begin

Dm.CdsPagtoPGT_CPS.AsInteger:=Dm.CdsMovVEN_CODIGO.AsInteger;

Dm.CdsPagtoPGT_CODIGO.AsInteger :=Dm.CdsFormaFGT_CODIGO.AsVariant;

Dm.CdsPagtoPGT_VALOR.AsFloat:=Dm.CdsItemTotalG.AsFloat;

Dm.CdsPagtoPGT_USUARIO.AsInteger:=Dm.usuariocodigo;

Dm.CdsPagtoPGT_CADASTRO.AsDateTime:=Now;

Dm.CdsPagtoPGT_DATA.AsDateTime:=Date;

Como visto na procedure estou inserindo no OnChange do Campo Lookup. Mas está o erro "stack overflow' Procurei no google mas todos só me dão o que significa o erro mas ainda não consegui resolver . Se alguém já passou por isso ou tem outra solução por favor me ajude .

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

o erro "stack overflow'

primeiro

Dm.CdsPagtoPGT_CODIGO.AsInteger :=Dm.CdsFormaFGT_CODIGO.AsVariant;

Dm.CdsPagtoPGT_CODIGO.AsInteger :=Dm.CdsFormaFGT_CODIGO.AsInteger;
sempre use tipos iguais ... é possivel usar variant mas sob certas condições Dm.CdsPagtoPGT_DATA.AsDateTime:=Date;
Dm.CdsPagtoPGT_DATA.AsDateTime:=Data;

Date é uma palavra reservada do delphi ... isso pode causar erros

OBS: Coloque o código no evento OnClick do componente ... o evento OnChange é chamado cada vez que uma tecla do teclado é pressionada

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Amigo, fiz as correções mas o erro ainda continua

No campo lookup não existe o evendo Onclick.

procedure TDm.CdsPagtoFORMAChange(Sender: TField);
begin

//Dm.CdsForma.Close;
  Dm.CdsPagtoPGT_CPS.AsInteger:=Dm.CdsMovVEN_CODIGO.AsInteger;
  Dm.CdsPagtoPGT_CODIGO.AsInteger :=Dm.CdsFormaFGT_CODIGO.AsInteger;
  Dm.CdsPagtoPGT_VALOR.AsFloat:=Dm.CdsItemTotalG.AsFloat;
  Dm.CdsPagtoPGT_USUARIO.AsInteger:=Dm.usuariocodigo;
  Dm.CdsPagtoPGT_CADASTRO.AsDateTime:=Date;
  Dm.CdsPagtoPGT_DATA.AsDateTime:=Date

Editado por Sandro AS
Link para o comentário
Compartilhar em outros sites

  • 0

OK... vamos retornar ao começo

voce quer mostrar um campo Lookup no dbgrid ... certo ?

esse campo é calculado ? ou um Lookup ?

Porem quero salvar as informações necessarias dentro do grid onde uso o seguinte codigo.

Dm.CdsForma.Close;
  Dm.CdsPagtoPGT_CPS.AsInteger:=Dm.CdsMovVEN_CODIGO.AsInteger;
  Dm.CdsPagtoPGT_CODIGO.AsInteger :=Dm.CdsFormaFGT_CODIGO.AsInteger;
  Dm.CdsPagtoPGT_VALOR.AsFloat:=Dm.CdsItemTotalG.AsFloat;
  Dm.CdsPagtoPGT_USUARIO.AsInteger:=Dm.usuariocodigo;
  Dm.CdsPagtoPGT_CADASTRO.AsDateTime:=Date;
  Dm.CdsPagtoPGT_DATA.AsDateTime:=Date
seu código esta incompleto ... pois esta faltando a edição dos campos, e posterior salvamento na tabela
Dm.CdsPagto.Edit;

Dm.CdsPagto.Post;

se o campo for calculado, o valor será mostrado somente no dbgrid e não será salvo na tabela

se o campo for lookup, o seu valor estará atrelado a chave do registro e o valor não poderá ser alterado

então, por favor seja mais explicito em sua explicação, pois esta meio confuso o entendimento

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Resolvi dei um select na TABELA PAGTO

SELECT PAGTO.*,FORMA.*, FUN_CODIGO,FUN_LOGIN

FROM PAGTO,FORMA,FUNCIONARIO,VENDA

WHERE PGT_CPS=:fcod AND PGT_CPS=VEN_CODIGO AND PGT_CODIGO=FGT_CODIGO AND PGT_USUARIO=FUN_CODIGO

mudei o Lookup para,

KeyFields= FGT_DESCRICAO, LookupDataset=CdsForma, LookupKeyField=FGT_DESCRICAO. , LookupResultField=FGT_DESCRICAO.

i .... mudei para Onchange para FGT_DESCRICAO

procedure TDm.CdsPagtoFGT_DESCRICAOChange(Sender: TField);

Begim

Dm.CdsPagtoPGT_CODIGO.AsInteger:=Dm.CdsFormaFGT_CODIGO.AsInteger;

Dm.CdsPagtoPGT_CPS.AsInteger:=Dm.CdsMovVEN_CODIGO.AsInteger;

Dm.CdsPagtoPGT_VALOR.AsFloat:=Dm.CdsItemTotalG.AsFloat;

Dm.CdsPagtoPGT_USUARIO.AsInteger:=Dm.usuariocodigo;

Dm.CdsPagtoPGT_CADASTRO.AsDateTime:=Date+Time;

if CdsPagtoPGT_DATA.AsString=EmptyStr then

CdsPagtoPGT_DATA.AsDateTime:=date;

ficou beleza

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,8k
×
×
  • Criar Novo...