Jump to content
Fórum Script Brasil
  • 0

(Resolvido) stack overflow em campo Lookup no Dbgrid


Sandro AS

Question

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 to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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

Edited by Sandro AS
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...