DBGrid(Produtos) para DBGrid(Pedido)
gostaria de uma ajuda denovo :P
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
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
Curtidas 0
Respostas
Webjoel
28/04/2008
Olá!
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:
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!
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
Frega
28/04/2008
estou usando Postgres, e conectando a ele com o componentes Zeos,
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
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
Webjoel
28/04/2008
Ok!
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.
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
Frega
28/04/2008
hmm dei uma lida sobre clientdataset num artigo aki do forum, aprendi o basico, mas ainda tem algumas coisas que nao consigo entender
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
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