Ir para conteúdo

Arquivado

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

Marcelo Ribamar

Campo adicional no DBGrid

Recommended Posts

Caros,

necessito de ajuda, pois tenho várias tabelas filtradas, no dbgrid quando estiver apresentando uma determinada informação, deverá em uma coluna adicional, mostrar a informação não da tabela linkada no DBGrid, mas sim a informação da tabela relacionada a ele, consegui criar um novo campo, porém não mostrar a informação. O Delphi não aceita que informe o outro DataSource, tentei fazer assim

 

csCustomized;

Add;

Items[3].Width := 40;

Items[3].Title.Caption := 'Nome Campo';

Items[3].DataField = 'campo';

Items[3].DataSource = DS; // Tabela Linkada ao DS master do DBGrid.

 

o sistema não roda você sabe como fazer isso?

 

ds1 ds1 ds2-filtro ds1

campo1 campo2 campo1

 

http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode fazer o seguinte, crie um campo do tipo Calculated na sua Table, no evento OnCalcFields, efetue a busca pela informação desejada e atribua a este campo calculado, no DBGrid basta você apontar para este campo novo, no caso ele irá mostrar a informação de forma normal... Lembrando que somente efetua a busca no CalcField quando o registro for do tipo que deseja que seja feito a verificação...

 

Para criar um campo calculado basta, clicar com o direito do mouse, ir em New Field, preencher as informações de Name, Type e Size (se necessário) e setar a opção Calculated e clicar em OK.

 

Depois no evento OnCalcFields pode fazer algo do tipo:

 

if tblCAMPO_DESEJADO.Value = 'RESTRICAO' then	tblCAMPO_CALCULADO.Value:=Informacao_Tabela_Relacionada;

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode fazer o seguinte, crie um campo do tipo Calculated na sua Table, no evento OnCalcFields, efetue a busca pela informação desejada e atribua a este campo calculado, no DBGrid basta você apontar para este campo novo, no caso ele irá mostrar a informação de forma normal... Lembrando que somente efetua a busca no CalcField quando o registro for do tipo que deseja que seja feito a verificação...Para criar um campo calculado basta, clicar com o direito do mouse, ir em New Field, preencher as informações de Name, Type e Size (se necessário) e setar a opção Calculated e clicar em OK.Depois no evento OnCalcFields pode fazer algo do tipo:

if tblCAMPO_DESEJADO.Value = 'RESTRICAO' then	tblCAMPO_CALCULADO.Value:=Informacao_Tabela_Relacionada;
amigo, não consegui fazer, não sei se porqur uso a versão 5, ou estou com algum problema, quando faço um campo calculado, não consigo compilar, o DElphi já dá um a mensagem de erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teria como colocar a mensagem de erro que é gerada ? E o código que colocou no OnCalcFields

Na realidade ele retorna uma caixa de mensagem relatando problemas com indices, é criar o campo mesmo que não tenha atribuido nada a ele, não sei se é porque estou usando minhas tabelas em Paradox 7, será este o problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teria como colocar a mensagem de erro que é gerada ? E o código que colocou no OnCalcFields

Na realidade ele retorna uma caixa de mensagem relatando problemas com indices, é criar o campo mesmo que não tenha atribuido nada a ele, não sei se é porque estou usando minhas tabelas em Paradox 7, será este o problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este seu problema de indíce não pode ter relação com a criação de um campo calculado, verifica este indice...

Quando compilo sem o campo calculado não tenho problemas, mas é só criar o campo o mesmo apresenta esta mensagem.não é permitido enviar por aqui posso enviar par ao seu e-mail?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa, mas dúvidas somente pelo fórum, ou então coloque ele em algum ftp free para que possamos baixar e ver o problema...

O máximo que pude fazer é colocar em um disco virtual, segue dados:mensagem.doc (74Kb) http://discovirtual.terra.com.br/vd.cgi?+_...9745&_we=13Ele ficará disponível até 24/10/2006.Para copiá-lo, clique no nome do arquivo. Uma nova janela abrirá com um pedido de senha. Informe a senha abaixo: Senha: 1D553585 marcelo.ribamar também deixou para você a seguinte mensagem: » Este é um serviço do Disco Virtual Terra: http://www.terra.com.br/discovirtual

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique a situação do IndexFieldName da tabela MPrima, precisa seguir uma ordem de acordo com o MatersFields, que ficaria: Planta;Codigo;Referencia coloque nesta ordem no IndexFieldName.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique a situação do IndexFieldName da tabela MPrima, precisa seguir uma ordem de acordo com o MatersFields, que ficaria: Planta;Codigo;Referencia coloque nesta ordem no IndexFieldName.

Caro, tentei novamente e fiz outro teste, este ó o código, mas mesmo assim não deu certo. object Table1: TTable Active = True DatabaseName = 'C:\Arquivos de programas\Borland\Database Desktop\WorkDir' IndexFieldNames = 'Planta;Nome' TableName = 'teste1.db' Left = 176 Top = 80 end object Table2: TTable DatabaseName = 'C:\Arquivos de programas\Borland\Database Desktop\WorkDir' Filtered = True IndexFieldNames = 'Planta;Nome' MasterFields = 'Planta;Nome' MasterSource = DataSource1 TableName = 'teste2.db' Left = 184 Top = 120 object Table2teste25: TStringField FieldKind = fkCalculated FieldName = 'teste25' Calculated = True end end

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não teria como você disponibilizar a aplicação para testar ? Pois as vezes pode ser uma coisa muito pequena mesmo que esta gerando o erro...

Segue Código Projeto.txt (48Kb) Ele ficará disponível até 25/10/2006.Para copiá-lo, clique no nome do arquivo. Uma nova janela abrirá com um pedido de senha. Informe a senha abaixo: Senha: 24B3C4C8

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual o link ?

Olá! marcelo.ribamar quer compartilhar com você o(s) seguinte(s) arquivo(s): Projeto.txt (48Kb) Ele ficará disponível até 25/10/2006.Para copiá-lo, clique no nome do arquivo. Uma nova janela abrirá com um pedido de senha. Informe a senha abaixo: Senha: 24B3C4C8 marcelo.ribamar também deixou para você a seguinte mensagem: » Este é um serviço do Disco Virtual Terra: http://www.terra.com.br/discovirtual

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outra coisa que pode gerar o problema é o seguinte, a criação de um campo calculado dentro da table sem ter os demais campos da tabela adicionado ao FieldEditor, para adicionar os demais campos, clique duas vezes sobre a tabela, depois com o direito do mouse clique em Add Fields..., para fazer este processo é preciso que a tabela esteja fechada, ou seja, Active = False.

Tente fazendo isto, adicionando todos os campos e tendo tb o campo calculado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outra coisa que pode gerar o problema é o seguinte, a criação de um campo calculado dentro da table sem ter os demais campos da tabela adicionado ao FieldEditor, para adicionar os demais campos, clique duas vezes sobre a tabela, depois com o direito do mouse clique em Add Fields..., para fazer este processo é preciso que a tabela esteja fechada, ou seja, Active = False.

Tente fazendo isto, adicionando todos os campos e tendo tb o campo calculado.

Márcio, beleza valeu consegui vencer mais uma etapa, mas agora estou com o seguinte erro.

 

procedure TForm1.MPrimaCalcFields(DataSet: TDataSet);

begin

if MPrima.FieldbyName('CMateriaPrima') = PMPrima.FieldByName('codigo') then

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

end;

 

[Error] testesaqu.pas(271): Incompatible types: 'String' and 'TField'

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;

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.