Ir para conteúdo
Fórum Script Brasil
  • 0

editando um DBGrid


Guest --nahim --

Pergunta

Guest --nahim --

Pessoal to precisando de uma força;

Tenho um DBGrid ligado a uma select com mais de uma tabela.

Exemplo:

tenho a select codcliente,cliente,numpedido,numnotas from cliente,pedido,notas;

Hoje ao clickar no butao consultar no form ele me mostra o resultado da select no dbgrid

assim gostaria de no campo numpedido poder alterar e motivicar o valor ou no campo notas a mesma coisa

Obrigado

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

nahim, para editar os registros em um DBGrid, o dataset deve permitir isto.

Em geral, apenas tendo um dataset do tipo table ligado ao DBGrid é que você conseguirá isto ou, usando um componente tipo query, quando habilitando a propriedade RequestLive=True, sendo que não há garantia de que funcionará - tornando o resultado ReadOnly. Isto pode ocorrer caso a consulta SQL não respeite alguns requerimentos para que possa ser aplicado pelo BDE, com não ter join's, order by, funções de agregação (sum, avg, ...), bem como o banco de dados sendo utilizado (os Server's, diferentemente dos tipos similares ao Paradox, podem resolver as questões relacionadas a join)

Como você comentou que tem um select com mais que uma tabela (isto é um join) e não indicou o banco utilizado, já há uma grande chance de você não conseguir fazer o que quer.

Na pior das hipóteses, você pode tentar e ver o que acontece. ;)

Abraços

alguma referência:

- TQuery - SQL In Delphi (About.com)

- DataBase Application Developper's Guide (ver capítulo 5 - pag. 120, sobre TQuery)

- TClientDatasets - Gary's Delphi Client Dataset Based Application (ler: Problems with TClientDatasets and their solutions)

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --NAHIM --

VALEU MICHEUS

Mas e o sequinte meu banco e o oracle certo?

na realidade quero trabalha com duas tabelas a de clientes aonde coleto o nome do cliente

e a de pedidos aonde coleto os dados como numero do pedido, qtdeitens, valor, e o campo separador

assim o campo separador tem que deixar eu digitar na dbgrid o codigo do separador.

Tem como eu realizar algo parecido?

Como anteriormente estava como query agora liguei meu dbgrid a tabelas assim gostaria de trabalhar com mais de uma tabela uma como o nome do cliente ligado codcliente da tabela 1 a tabela2 pedidos e trazer o resto mas o campo separador da tabela2 (pedido) tinha que ficar editavel.

Tem uma dica para me ajudar nesse caso?

Link para o comentário
Compartilhar em outros sites

  • 0
na realidade quero trabalha com duas tabelas a de clientes aonde coleto o nome do cliente

e a de pedidos aonde coleto os dados como numero do pedido, qtdeitens, valor, e o campo separador

assim o campo separador tem que deixar eu digitar na dbgrid o codigo do separador.

Tem como eu realizar algo parecido?

Como anteriormente estava como query agora liguei meu dbgrid a tabelas assim gostaria de trabalhar com mais de uma tabela uma como o nome do cliente ligado codcliente da tabela 1 a tabela2 pedidos e trazer o resto mas o campo separador da tabela2 (pedido) tinha que ficar editavel.

Tem uma dica para me ajudar nesse caso?

NAHIM, da forma como você coloca, talvez você pudesse fazer da seguinte forma:

- Use um table para pedidos ligado ao DBGrid (dataset principal, onde será feita a edição);

- Precisaremos de um dataset do tipo query para consultar cada tabela referenciada (no seu exemplo seria a cliente) onde, em cada uma, deverá ser incluso na cláusula SELECT o campo de referência e o campo de descrição (p.e., Nome, Razao_Social, ...);

- Agora, no dataset principal, faremos a referência a estes dataset's de consulta (lookup); Para isso, em design-time, acesse a lista de campos do dataset principal (duplo click no componente); Agora, adicione um novo campo (botão direito -> New field...); Em Name, vamos definir NomeCliente, seguido por Type igual a String e Size conforme definido o referido campo na sua tabela de clientes; A seguir, definimos o tipo deste campo como sendo Lookup; Mais abaixo, fazemos a vinculação à consulta definindo KeyFields com o campo de referência à tabela clientes (codcliente), DataSet apontando para a consulta à clientes (a query), em Lookup Keys selecionamos o campo referenciado (provavelmente, também codcliente) e em Result Field selecionamos o campo a ser apresentado no DBGrid (nome ou razao, ...);

- O procedimento anterior deverá ser repetido para todos os campos do pedido que venham a ser obtidos a partir de outras tabelas (lookups);

- Ao DBGrid, são então adicionados apenas os campos a serem digitados e os que foram criados como Lookup (não os "nativos");

Como resultado, estes tipos de campos são mostrados no DBGrid na forma de uma caixa de lista.

Obs:

1) Antes de o dataset principal ser aberto, as consultas lookup's já devem estar abertas;

2) Se alguma alteração for realizada nas tabelas utilizadas como lookup neste DBGrid, as respectivas consultas tem que ser atualizadas (close e open);

3) Como você mencionou Oracle e uma consulta simples, você poderia sim utilizar o TQuery com a propriedade RequestLive=True. Dou 99% de chances de funcionar nestas condições. :D

Tente por este caminho e veja se você chega onde quer.

Abraços

Editado por Micheus
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...