Fórum DBGrid(Produtos) para DBGrid(Pedido) #357726
28/04/2008
0
tenho as tabelas
-PRODUTOS
Referencia VARCHAR(8)
Descricao VARCHAR(50)
...
-PEDIDO
numeroPed INTEGER
data ....
....
-ProdPed (Produtos do pedido)
refped INTEGER (referente a pedido X)
sequencia INTEGER
referencia VARCHAR(6)
precovenda VARCHAR(6)
no form para cadastrar o pedido tenho um dbgrid com as colunas Sequencia | Referencia | Descrição | Preço | Preço de Venda
ai tem o Form de Produtos, dentro dele tem o DBGrid com Referencia | Descricao | Preço, gostaria que quando o usuario desse um clique duplo sobre o registro selecionado, ele exportasse os dados do form de produtos para o DBGrid do form de pedidos
att
frega
Frega
Curtir tópico
+ 0Posts
28/04/2008
Webjoel
Informe quais componentes de acesso ao banco de dados você está usando para melhor nós o ajudarmos você!
Mas de qualquer forma, a lógica é simples!
evento doubleclick da bdgrid:
PedidoForm.ClientDataSetItensPedido.Insert; PedidoForm.ClientDataSetItensPedidoREFERENCIA.AsString := ClientDataSetProdutosREFERENCIA.AsString; PedidoForm.ClientDataSetItensPedidoDESCRICAO.AsString := ClientDataSetProdutosREFERENCIA.AsString; PedidoForm.ClientDataSetItensPedidoPRECO.AsFloat := ClientDataSetProdutosPRECO.AsFloat; PedidoForm.ClientDataSetItensPedido.Post;
Você precisará fazer algumas validações, por exemplo se o produto já existir você terá que dar um Edit em vez de um Insert e só incrementar a quantidade..etc...
Essa é só a lógica, você também pode fechar o FormProdutos depois do Post, ai volta para a sua tela de pedido, mas tudo depende da estrutura do seu projeto!
E dá-lhe F9!
Gostei + 0
28/04/2008
Frega
entendi a logica!, mas nao entendi como funciona o ClientDataSet
a informaçao nao fica no dbgrid, e sim no datasource, entao a logica eh no doubleclick pega o datasource.registro da tabela produtos := datasource.registro da tabela produtos do pedido...
Ok, mas nao entendi a parte dos comandos, na parte ClientDataSet.
att
Frega
Gostei + 0
29/04/2008
Webjoel
O ClientDataSet é um client que trabalha em memória, você faz toda a parte de inserção, edição e gravação nele, tudo na memoria, com as alterações confirmadas você grana no banco:
Comandos:
ClientDataSet1.Insert : insere novo valor no client.
ClientDataSet1.Edit : altera valor no client.
ClientDataSet1.Post : grava novo valor no client.
ClientDataSet1.ApplyUpdates : grava alterações no banco.
No seu caso, não sei a estrutura programada do seuprojeto, mas a idéia com o doubleclick, é que nesse método, você pode pegar o registro atual que você clicou, assim você tem todas as informações para jogar em outro Form ou dbgrid.
Não posso te ajudar quanto ao Zeos, pois não trabalho com ele.
Seria bem interessante você dar uma olhada nos componentes de acesso a banco de dados na paleta dbExpress, juntamente com a paleta Data Access formam a melhor dupla de acesso a banco de dados em Delphi. Não digo mudar seu projeto, mas para efeito de estudo e em novos projetos pode ser implantado e a manutenção é muito mais simples, qualquer coisas estamos ai.
Gostei + 0
29/04/2008
Frega
o ClientDataSet no Form de pedidos esta funcionando perfeito, os registros estao sendo adicionados pelo dbgrid etc...
o clientdataset (CDS) do form de produtos que complica, nao sei como pegar o registro do DataSet e transferir ele para o clientdataset, fiz asim mas nao deu:
CDS
Fields = referencia(CDSProdReferencia) para testes
no double click fiz como vc mostrou
CadPedido.ClientDataSet.Insert;
CadPedido.ClientDataSetREFERENCIA.AsString := CDSProdREFERENCIA.AsString;
CadPedido.ClientDataSet.Post;
no CDSProd > Field -> referencia (que fica no form de produtos) botei
KeyFields -> referencia
Lookupdataset -> qPRODUTOS (query dos produtos)
LookupKeyFields -> referencia
Lookupresultfield -> referencia
isso foi uma tentatia, mas nao deu certo, quando dou 2 cliques no DBGrid, dos produtos, o DBGrid dos Produtos do Pedido só adiciona uma linha, nao chega a receber a referencia..
desculpe a biblia
ATT
Frega
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)