Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcelo Ribamar

Campo adicional no DBGrid

Recommended Posts

Tente assim:

 

 

procedure TForm1.MPrimaCalcFields(DataSet: TDataSet);beginif MPrima.FieldbyName('CMateriaPrima').Value = PMPrima.FieldByName('codigo').Value then	MPrimadescricaoMP.Value := PMPrima.FieldByName('Descricao').Value;end;

Caro já tentei de tudo mas não deu em nada, ele só deixa o Banco entrar e Active 'True' se existir o campo no database MPrima, mas mesmo assim não tras a informação, existe alguma outra forma?

 

 

procedure TForm1.MPrimaCalcFields(DataSet: TDataSet);

var

DescricaoMP: string;

begin

if MPrima.FieldbyName('CMateriaPrima').Value =

PMPrima.FieldByName('codigo').Value then

DescricaoMP.Value := PMPrima.FieldByName('Descricao').Value;end;

 

 

[Error] testesaqu.pas(281): Record, object or class type required

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso você declarou uma variável DescricaoMP nela não existe a opção de Value, tente o seguinte... Na propriedade Active da tabela coloque como False depois clique duas vezes sobre a tabela, irá abri o FieldEditor nele você clica com o direito do mouse e depois em New Field, na opção Name coloque DescricaoMP no Type selecione String na opção Size coloque digamos 50, de OK, depois ainda na tabela pode colocar a propriedade Active como True, vai no OnCalcFields da qry e coloque:

PMPrima.FieldByName('DescricaoMP').Value:=PMPrima.FieldByName('Descricao').Value;
ou

 

você não precisa validar os código, visto que estão ligadas pelo MasterSource, outra forma e acredito que mais simples para este caso é a criação de um campo do tipo Lookup, para configurar faça o seguinte:

Na propriedade Active da tabela coloque como False depois clique duas vezes sobre a tabela, irá abri o FieldEditor nele você clica com o direito do mouse e depois em New Field, na opção Name coloque DescricaoMP no Type selecione String na opção Size coloque digamos 50, selecione a opção Lookup, em Key Fields selecione o campo chave desta tabela que devera se ligar com a outra trazendo a descrição, em DataSet selecione a tabela mestre, neste caso PMPrima, depois em Lookup Keys selecione a chave desta tabela que corresponde a MPrima e por fim em ResultField selecione o campo de retorno, no caso Descricao e clique em OK, depois ainda na tabela pode colocar a propriedade Active como True, e referência este campo no GRID.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso você declarou uma variável DescricaoMP nela não existe a opção de Value, tente o seguinte... Na propriedade Active da tabela coloque como False depois clique duas vezes sobre a tabela, irá abri o FieldEditor nele você clica com o direito do mouse e depois em New Field, na opção Name coloque DescricaoMP no Type selecione String na opção Size coloque digamos 50, de OK, depois ainda na tabela pode colocar a propriedade Active como True, vai no OnCalcFields da qry e coloque:

PMPrima.FieldByName('DescricaoMP').Value:=PMPrima.FieldByName('Descricao').Value;
ou

 

você não precisa validar os código, visto que estão ligadas pelo MasterSource, outra forma e acredito que mais simples para este caso é a criação de um campo do tipo Lookup, para configurar faça o seguinte:

Na propriedade Active da tabela coloque como False depois clique duas vezes sobre a tabela, irá abri o FieldEditor nele você clica com o direito do mouse e depois em New Field, na opção Name coloque DescricaoMP no Type selecione String na opção Size coloque digamos 50, selecione a opção Lookup, em Key Fields selecione o campo chave desta tabela que devera se ligar com a outra trazendo a descrição, em DataSet selecione a tabela mestre, neste caso PMPrima, depois em Lookup Keys selecione a chave desta tabela que corresponde a MPrima e por fim em ResultField selecione o campo de retorno, no caso Descricao e clique em OK, depois ainda na tabela pode colocar a propriedade Active como True, e referência este campo no GRID.

Beleza, com a opção 2 funcionou, só que ele trouxe as informações do último registro do DBGrid para todos demais, não respeitando a diferenciação dos códigos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim:

 

 

procedure TForm1.MPrimaCalcFields(DataSet: TDataSet);beginif MPrima.FieldbyName('CMateriaPrima').Value = PMPrima.FieldByName('codigo').Value then	MPrimadescricaoMP.Value := PMPrima.FieldByName('Descricao').Value;end;

 

Márcio, agora falta pouco para parar de pertubar, mas veja o código abaixo.

 

procedure TForm1.MPrimaCalcFields(DataSet: TDataSet);

var

PrecoMP : Integer;

CustoMP : Integer;

begin

if MPrima.FieldbyName('CMateriaPrima').Value =

PMPrima.FieldByName('codigo').Value then

MPrimaDescricaoMP.Value := PMPrima.FieldByName('Descricao').Value;

if MPrima.FieldbyName('CMateriaPrima').Value =

PMPrima.FieldByName('codigo').Value then

begin

MprimaPrecoMP.Value := PMPrima.FieldbyName('Preco').Value;

PrecoMP := PMPrima.FieldbyName('Preco').asInteger;

CustoMP := Mprima.fieldbyName('QMateriaPrima').asInteger

* PrecoMP;

MPrimaCustoMP.Value := CustoMP;

end;

Tentei aqui

end;

 

está acontecendo o seguinte, desta forma o calculo só é efetuado das pçs com o mesmo código da primeira do DBGrid, se colocar os calculos na indicação, as primeiras peças 'OK', mas as demais dá impressão que pelo valor apresentado, entrou em loop.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.