dbgrid preencher uma coluna inexistente na tabela em tempo de execução

Delphi

25/11/2012

Olá Pessoal. Utilizo delphi 7 com firebird 2.5. A duvida é a seguinte, tenho um dbgrid de uma tabela, e quando o formulário é chamado, este dbgrid esta vinculado à esta tabela e automaticamente mostra os mesmos dados. Até ai beleza. Agora uma destas colunas trata-se do código do fornecedor. Eu inclui através do editor do dbgrid a coluna Nome do Fornecedor. Como preencher esta coluna buscando nome do fornecedor na tabela referida ? Abraços
Carlos Cabral

Carlos Cabral

Curtidas 0

Respostas

Claudia Nogueira

Claudia Nogueira

25/11/2012

Não sei se entendi direito.
Você tem um Form e nesse Form tem um DbGrid que está ligado a um DataSource e que está ligado a um IbTable?
Aí esse IbTable está ligado a uma tabela qualquer que tem ligação com a tabela de fornecedor pelo código?

Um detalhe é que todos os campos do DbGrid têm que estarem ligados a um field, então o certo é adicionar o campo no IbTable ou IbQuery.

Se você usar IbQuery, que é a melhor forma, no próprio select você já pega a informação desejada, exemplo:

SELECT t.*, f.nome_fornecedor
FROM tabela t, fornecedor f
WHERE t.cod_fornecedor = f.cod_fornecedor


Aí liga a IbQuery no DataSource e pronto, vai mostrar o campo que você quer.

Já se você usar IbTable, que eu não recomendo, aí fica um pouco mais complicado.

Uma das formas usando o IbTable é você adicionar outro IbTable e ligar na tabela de fornecedores.
No seu outro IbTable que é oque está sendo usado com o DbGrid, você tem que adicionar os fields e depois disso criar um novo field do tipo lookup.
Em KeyField você coloca o campo que é referente ao código do fornecedor, em DataSet você escolhe o outro IbTable.
Em Lookup Keys você escolhe também o campo referente ao código e em Result Field você escolhe o campo referente ao nome do fornecedor.
Feito tudo isso, no DbGrid já vai mostrar o nome também.

Digitei tudo fazendo referência aos componentes da paleta interbase, mas o mesmo serve para outros componentes.
GOSTEI 0
Carlos Cabral

Carlos Cabral

25/11/2012

Não Claudinha. Talvez eu tenha me explicado errado. Eu utilizo o Firebird. Imagine o seguinte Tabela Fornecedores e Tabela Ordem de compra. Na tabela ordem de compra como em todas as tabelas eu apenas coloco o codigo do fornecedor. Criei um form com um dbgrid que é exatamente o tabela de ordem de compra, todas as informações para consulta na tela. Até ai beleza. Porém no proprio grid criei uma coluna de nome do fornecedor. Obviamente nao tenho este campo, porque na tabela apenas existe o codigo. O certo seria esta coluna quando mostrada em tela, eu conseguir preencher o nome do fornecedor, ou criar um dispositivo que fizesse lockup. Mas não sei como. Espero ter explicado. Brigadu.
GOSTEI 0
Rodolpho Silva

Rodolpho Silva

25/11/2012

Se você, no seu Dataset, criar um TField do cujo o FieldType seja Lookup e, usar este campo no Grid, isso já acontecerá automaticamente. O próprio DBGrid cria um DBLookupCombo e posiciona na linha para você.
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

25/11/2012

Você está se confundindo nessa parte:
Porém no proprio grid criei uma coluna de nome do fornecedor
, pois você não vai criar uma coluna no grid e sim no DataSet. Se você criar uma coluna no Grid ela vai ficar perdida, sem utilidade e você não vai preencher, pois não tem o campo no DataSet. O certo é criar o campo no DataSet que está ligado ao DBGrid, conforme o Rodolpho123 explicou, ou como nos exemplos que eu te passei.
GOSTEI 0
Carlos Cabral

Carlos Cabral

25/11/2012

Exato Claudinha. A coluna esta perdida. Pois este eu não criei o dataset, simplesmente relacionei ele diretamente com a tabela.
GOSTEI 0
Carlos Cabral

Carlos Cabral

25/11/2012

Claudinha. Entendi. Desculpe minha ignorancia. Eu posso sim criar no ClientDataSet alem dos campos que vem da tabela, um novo campo, e neste formar um lockup. Desta forma quando eu relacionar um dbgrid com ele, automaticamente o campo ja vem. Po meu, voce é o maximo. Muito obrigado, a voce tambem rodolpho.
GOSTEI 0
Carlos Cabral

Carlos Cabral

25/11/2012

Você está se confundindo nessa parte:
Porém no proprio grid criei uma coluna de nome do fornecedor
, pois você não vai criar uma coluna no grid e sim no DataSet. Se você criar uma coluna no Grid ela vai ficar perdida, sem utilidade e você não vai preencher, pois não tem o campo no DataSet. O certo é criar o campo no DataSet que está ligado ao DBGrid, conforme o Rodolpho123 explicou, ou como nos exemplos que eu te passei.
.
Claudinha, eu estou precisando de uma ajuda de voce em relação a instalação, como posso fazer, para perguntar algo diretamente a voce ?
GOSTEI 0
POSTAR