Problemas no evento Onvalidate
Pessoal
Estou usando o BDS2006 e quando uso o evento onvalidate do ClientDataset como abaixo nao é executado a linha de comando do ShowMessage.
Obs: Isso acontece qdo uso o dbgrid mas se usar o componente dbedit acontece normalmente
evento onvalidate do clientdataset
Begin
if CDSNEC_PROICOD_LOT.Value>0 then
CDSNEC_PROICOD_PRO.Value:=12;
ShowMessage(´Teste´)
end;
Aguardo Retorno
Estou usando o BDS2006 e quando uso o evento onvalidate do ClientDataset como abaixo nao é executado a linha de comando do ShowMessage.
Obs: Isso acontece qdo uso o dbgrid mas se usar o componente dbedit acontece normalmente
evento onvalidate do clientdataset
Begin
if CDSNEC_PROICOD_LOT.Value>0 then
CDSNEC_PROICOD_PRO.Value:=12;
ShowMessage(´Teste´)
end;
Aguardo Retorno
Rogeranalista
Curtidas 0
Respostas
Martins
06/08/2007
Se vc desejar ver a tela de erro procure por [b:1f27bd5b3d]OnReconcileError[/b:1f27bd5b3d].
Bons códigos!
Bons códigos!
GOSTEI 0
Marco Salles
06/08/2007
se não me falha a memória é o segundopost com o mesmo tipo de dúvida
Pois bem , acho esquisito voce dizer que :
funciona normal quando se usa um DbEdit , e não funciona com o DbGrid
A meu ver o problema esta no processo recursivo que ocorre dentro do proprio evento
Isto é [b:3949e52e3e]CDSNEC_PROICOD_PRO.Value:=12[/b:3949e52e3e]; é [u:3949e52e3e]sufieciente[/u:3949e52e3e] para chamar novamente o evento OnValidade e fica nisso.. Gerando um [b:3949e52e3e]Stark OverFloaw[/b:3949e52e3e]
Pois bem , acho esquisito voce dizer que :
evento onvalidate do clientdataset
Begin
if CDSNEC_PROICOD_LOT.Value>0 then
CDSNEC_PROICOD_PRO.Value:=12;
ShowMessage(´Teste´)
end;
funciona normal quando se usa um DbEdit , e não funciona com o DbGrid
A meu ver o problema esta no processo recursivo que ocorre dentro do proprio evento
Isto é [b:3949e52e3e]CDSNEC_PROICOD_PRO.Value:=12[/b:3949e52e3e]; é [u:3949e52e3e]sufieciente[/u:3949e52e3e] para chamar novamente o evento OnValidade e fica nisso.. Gerando um [b:3949e52e3e]Stark OverFloaw[/b:3949e52e3e]
GOSTEI 0
Rogeranalista
06/08/2007
Colega
O que eu poderia fazer para resolver o problema ???
Fico no Aguardo
Rogério
O que eu poderia fazer para resolver o problema ???
Fico no Aguardo
Rogério
GOSTEI 0
Emerson Nascimento
06/08/2007
[quote:2d4727c124=´Marco Salles´]se não me falha a memória é o segundopost com o mesmo tipo de dúvida
Pois bem , acho esquisito voce dizer que :
funciona normal quando se usa um DbEdit , e não funciona com o DbGrid
A meu ver o problema esta no processo recursivo que ocorre dentro do proprio evento
Isto é [b:2d4727c124]CDSNEC_PROICOD_PRO.Value:=12[/b:2d4727c124]; é [u:2d4727c124]sufieciente[/u:2d4727c124] para chamar novamente o evento OnValidade e fica nisso.. Gerando um [b:2d4727c124]Stark OverFloaw[/b:2d4727c124][/quote:2d4727c124]
E aí, Marco, tudo bem, cara?
Como não foi postado o cabeçalho da procedure associada ao evento OnValidate, fica difícil saber qual campo está sendo tratado. De qualquer forma acho que vou discordar de você, Marco: não deveria entrar em loop porque a verificação é feita num campo, porém a atribuição é feita em outro campo. É necessário publicar o cabeçalho da procedure porque o evento OnValidate não é vinculado diretamente ao clientdataset, mas sim à um campo do clientdataset e, sabendo qual é o campo tratado, poderemos ajudar na solução do problema.
Pois bem , acho esquisito voce dizer que :
evento onvalidate do clientdataset
Begin
if CDSNEC_PROICOD_LOT.Value>0 then
CDSNEC_PROICOD_PRO.Value:=12;
ShowMessage(´Teste´)
end;
funciona normal quando se usa um DbEdit , e não funciona com o DbGrid
A meu ver o problema esta no processo recursivo que ocorre dentro do proprio evento
Isto é [b:2d4727c124]CDSNEC_PROICOD_PRO.Value:=12[/b:2d4727c124]; é [u:2d4727c124]sufieciente[/u:2d4727c124] para chamar novamente o evento OnValidade e fica nisso.. Gerando um [b:2d4727c124]Stark OverFloaw[/b:2d4727c124][/quote:2d4727c124]
E aí, Marco, tudo bem, cara?
Como não foi postado o cabeçalho da procedure associada ao evento OnValidate, fica difícil saber qual campo está sendo tratado. De qualquer forma acho que vou discordar de você, Marco: não deveria entrar em loop porque a verificação é feita num campo, porém a atribuição é feita em outro campo. É necessário publicar o cabeçalho da procedure porque o evento OnValidate não é vinculado diretamente ao clientdataset, mas sim à um campo do clientdataset e, sabendo qual é o campo tratado, poderemos ajudar na solução do problema.
GOSTEI 0
Rogeranalista
06/08/2007
Colega
Segue abaixo a unit completa. Foi colocado dentro do public, mas mesmo assim não funcionou.
unit UNTNECPRO;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBClient, Buttons, ExtCtrls, StdCtrls, Mask, DBCtrls, FMTBcd,
SqlExpr, Provider, Grids, DBGrids,UNTFUNCAO_GERAL;
type
TFRMNECPRO = class(TForm)
DTSNEC_PRO: TDataSource;
Label1: TLabel;
DBEdit1: TDBEdit;
Label2: TLabel;
DBEdit2: TDBEdit;
Label3: TLabel;
DBEdit3: TDBEdit;
Label4: TLabel;
DBEdit4: TDBEdit;
Panel1: TPanel;
SBSAI: TSpeedButton;
SBCON: TSpeedButton;
SBEDT: TSpeedButton;
SBSAL: TSpeedButton;
SBCAN: TSpeedButton;
SBINC: TSpeedButton;
SDSCON_COM1: TSQLDataSet;
CDSCON_COM1: TClientDataSet;
DTSCON_COM1: TDataSource;
DSPCON_COM1: TDataSetProvider;
CDSCON_COM1ICOD_PRO: TIntegerField;
CDSCON_COM1ICOD_GES: TIntegerField;
CDSCON_COM1ICOD_PRO_GES: TIntegerField;
CDSCON_COM1ICOD_IND: TIntegerField;
CDSCON_COM1ICOD_COM: TIntegerField;
CDSCON_COM1VDES_COM: TStringField;
CDSCON_COM1VUND_COM: TStringField;
CDSCON_COM1FQTD_COM: TFloatField;
CDSCON_COM1FVAL_UNI: TFloatField;
CDSCON_COM1FVAL_TOT: TFloatField;
CDSCON_COM1ICOD_GRA: TIntegerField;
CDSCON_COM1ESTOQUE: TFloatField;
SDSCON_COM2: TSQLDataSet;
CDSCON_COM2: TClientDataSet;
DTSCON_COM2: TDataSource;
DSPCON_COM2: TDataSetProvider;
CDSCON_COM2ICOD_PRO: TIntegerField;
CDSCON_COM2ICOD_GES: TIntegerField;
CDSCON_COM2ICOD_PRO_GES: TIntegerField;
CDSCON_COM2ICOD_IND: TIntegerField;
CDSCON_COM2ICOD_COM: TIntegerField;
CDSCON_COM2VDES_COM: TStringField;
CDSCON_COM2VUND_COM: TStringField;
CDSCON_COM2FQTD_COM: TFloatField;
CDSCON_COM2FVAL_UNI: TFloatField;
CDSCON_COM2FVAL_TOT: TFloatField;
CDSCON_COM2ICOD_GRA: TIntegerField;
CDSCON_COM2ESTOQUE: TFloatField;
SDSCAD_PRO: TSQLDataSet;
CDSCAD_PRO: TClientDataSet;
DTSCAD_PRO: TDataSource;
DSPCAD_PRO: TDataSetProvider;
CDSCAD_PROICOD_PRO: TIntegerField;
CDSCAD_PROVDES_PRO: TStringField;
CDSCAD_PROCUN_PRO: TStringField;
DBGrid3: TDBGrid;
SQLCONS1: TSQLDataSet;
CDSNEC_PRO: TClientDataSet;
CDSNEC_PROICOD_PRO: TIntegerField;
CDSNEC_PROVDES_PRO: TStringField;
CDSNEC_PROICOD_GRA: TIntegerField;
CDSNEC_PROFQTD_PRO: TFloatField;
CDSNEC_PROCUN_PRO: TStringField;
CDSNEC_PROICOD_LOT: TIntegerField;
DBGrid2: TDBGrid;
DBGrid1: TDBGrid;
CDSNEC_PROFTEM_FAB: TFloatField;
procedure CDSNEC_PROICOD_LOTValidate(Sender: TField);
private
{ Private declarations }
public
// procedure CDSNEC_PROICOD_LOTValidate(Sender: TField);
{ Public declarations }
end;
var
FRMNECPRO: TFRMNECPRO;
implementation
uses UNTPRINCIPAL;
{$R *.dfm}
procedure TFRMNECPRO.CDSNEC_PROICOD_LOTValidate(Sender: TField);
Begin
CDSNEC_PROICOD_PRO.Value:=12;
ShowMessage(´Teste´)
end;
end.
end
Segue abaixo a unit completa. Foi colocado dentro do public, mas mesmo assim não funcionou.
unit UNTNECPRO;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBClient, Buttons, ExtCtrls, StdCtrls, Mask, DBCtrls, FMTBcd,
SqlExpr, Provider, Grids, DBGrids,UNTFUNCAO_GERAL;
type
TFRMNECPRO = class(TForm)
DTSNEC_PRO: TDataSource;
Label1: TLabel;
DBEdit1: TDBEdit;
Label2: TLabel;
DBEdit2: TDBEdit;
Label3: TLabel;
DBEdit3: TDBEdit;
Label4: TLabel;
DBEdit4: TDBEdit;
Panel1: TPanel;
SBSAI: TSpeedButton;
SBCON: TSpeedButton;
SBEDT: TSpeedButton;
SBSAL: TSpeedButton;
SBCAN: TSpeedButton;
SBINC: TSpeedButton;
SDSCON_COM1: TSQLDataSet;
CDSCON_COM1: TClientDataSet;
DTSCON_COM1: TDataSource;
DSPCON_COM1: TDataSetProvider;
CDSCON_COM1ICOD_PRO: TIntegerField;
CDSCON_COM1ICOD_GES: TIntegerField;
CDSCON_COM1ICOD_PRO_GES: TIntegerField;
CDSCON_COM1ICOD_IND: TIntegerField;
CDSCON_COM1ICOD_COM: TIntegerField;
CDSCON_COM1VDES_COM: TStringField;
CDSCON_COM1VUND_COM: TStringField;
CDSCON_COM1FQTD_COM: TFloatField;
CDSCON_COM1FVAL_UNI: TFloatField;
CDSCON_COM1FVAL_TOT: TFloatField;
CDSCON_COM1ICOD_GRA: TIntegerField;
CDSCON_COM1ESTOQUE: TFloatField;
SDSCON_COM2: TSQLDataSet;
CDSCON_COM2: TClientDataSet;
DTSCON_COM2: TDataSource;
DSPCON_COM2: TDataSetProvider;
CDSCON_COM2ICOD_PRO: TIntegerField;
CDSCON_COM2ICOD_GES: TIntegerField;
CDSCON_COM2ICOD_PRO_GES: TIntegerField;
CDSCON_COM2ICOD_IND: TIntegerField;
CDSCON_COM2ICOD_COM: TIntegerField;
CDSCON_COM2VDES_COM: TStringField;
CDSCON_COM2VUND_COM: TStringField;
CDSCON_COM2FQTD_COM: TFloatField;
CDSCON_COM2FVAL_UNI: TFloatField;
CDSCON_COM2FVAL_TOT: TFloatField;
CDSCON_COM2ICOD_GRA: TIntegerField;
CDSCON_COM2ESTOQUE: TFloatField;
SDSCAD_PRO: TSQLDataSet;
CDSCAD_PRO: TClientDataSet;
DTSCAD_PRO: TDataSource;
DSPCAD_PRO: TDataSetProvider;
CDSCAD_PROICOD_PRO: TIntegerField;
CDSCAD_PROVDES_PRO: TStringField;
CDSCAD_PROCUN_PRO: TStringField;
DBGrid3: TDBGrid;
SQLCONS1: TSQLDataSet;
CDSNEC_PRO: TClientDataSet;
CDSNEC_PROICOD_PRO: TIntegerField;
CDSNEC_PROVDES_PRO: TStringField;
CDSNEC_PROICOD_GRA: TIntegerField;
CDSNEC_PROFQTD_PRO: TFloatField;
CDSNEC_PROCUN_PRO: TStringField;
CDSNEC_PROICOD_LOT: TIntegerField;
DBGrid2: TDBGrid;
DBGrid1: TDBGrid;
CDSNEC_PROFTEM_FAB: TFloatField;
procedure CDSNEC_PROICOD_LOTValidate(Sender: TField);
private
{ Private declarations }
public
// procedure CDSNEC_PROICOD_LOTValidate(Sender: TField);
{ Public declarations }
end;
var
FRMNECPRO: TFRMNECPRO;
implementation
uses UNTPRINCIPAL;
{$R *.dfm}
procedure TFRMNECPRO.CDSNEC_PROICOD_LOTValidate(Sender: TField);
Begin
CDSNEC_PROICOD_PRO.Value:=12;
ShowMessage(´Teste´)
end;
end.
end
GOSTEI 0
Marco Salles
06/08/2007
[b:f297e7372e]citação de emerson.en[/b:f297e7372e]
sua colocação é pertinente e repleta de acertos . Porém acho pouco usual , usar o Onvalidade de um campo para alterar um outro...Isto a meu ver não é uma boa prática ....
[b:f297e7372e]
Enfim , se o Evento Showmessage , não esta sendo executado , deve-se primeiro ver , se o Compilador marca esta linha e segundo tentar acompanhar o Fluxo do programa .. Claro que algo esta desviando a execução deste instrução..Por exemplo , existe mais alguns eventos nessa sua Unit :?: :?: :?: Segundo , voce tem certeza que este Processo não esta num Loop :?: :?: :?: O que acontece se mudarmos a mensagem de lugar ????
Funciona Beleza , dá problema :?: :?: :?:
Como não foi postado o cabeçalho da procedure associada ao evento OnValidate, fica difícil saber qual campo está sendo tratado. De qualquer forma acho que vou discordar de você, Marco: não deveria entrar em loop porque a verificação é feita num campo, porém a atribuição é feita em outro campo.
sua colocação é pertinente e repleta de acertos . Porém acho pouco usual , usar o Onvalidade de um campo para alterar um outro...Isto a meu ver não é uma boa prática ....
[b:f297e7372e]
que eu poderia fazer para resolver o problema ???
[/b:f297e7372e]Enfim , se o Evento Showmessage , não esta sendo executado , deve-se primeiro ver , se o Compilador marca esta linha e segundo tentar acompanhar o Fluxo do programa .. Claro que algo esta desviando a execução deste instrução..Por exemplo , existe mais alguns eventos nessa sua Unit :?: :?: :?: Segundo , voce tem certeza que este Processo não esta num Loop :?: :?: :?: O que acontece se mudarmos a mensagem de lugar ????
procedure TFRMNECPRO.CDSNEC_PROICOD_LOTValidate(Sender: TField); Begin ShowMessage(´Teste´) ; CDSNEC_PROICOD_PRO.Value:=12; end;
Funciona Beleza , dá problema :?: :?: :?:
GOSTEI 0
Emerson Nascimento
06/08/2007
[quote:6caae2915e=´Marco Salles´][...] Porém acho pouco usual , usar o Onvalidade de um campo para alterar um outro...Isto a meu ver não é uma boa prática ....
[/quote:6caae2915e]
eu concordo plenamente.
[/quote:6caae2915e]
eu concordo plenamente.
GOSTEI 0
Martins
06/08/2007
[quote:26eb97f66b=´Marco Salles´][...] Porém acho pouco usual , usar o Onvalidade de um campo para alterar um outro...Isto a meu ver não é uma boa prática ....
eu concordo plenamente.[/quote:26eb97f66b]
Eu também estou de acordo com o ponto de vista dos colegas.
GOSTEI 0