Fórum Sugestão de gravar pedido e itens de pedidos???? #205575
10/01/2004
0
Já postei esta minha dúvida aqui antes mais até hoje não obtive sucesso..
Alguém poderia me mandar um exemplo, uma sugestão de como eu faço para poder gravar um pedido e seus itens, sem que eu perca a sequencia de pedidos? os itens serão digitado diretamente em um dbgrid.
Obs: estarei efetuando os pedidos em estações da rede, vários usuários estarão fazendo pedido simultaneamente.
Obrigado!
jelves@terra.com.br
Jelves
Curtir tópico
+ 0Posts
11/01/2004
Jelves
Gostei + 0
11/01/2004
Nish
Gostei + 0
12/01/2004
Jelves
Gostei + 0
12/01/2004
Wolverine
tipo assim,no beforePos vc faz um busca no BD do código a ser gravado, se o mesmo ñ existir, ele é gravado, se sim cod:=cod+1 e pesquisa denovo, ou pesquisa o ultimo registro gravado e faz cod:=cod+1
espero ñ ter falado besteira :oops: e ter lhe dado uma luz :idea:
Gostei + 0
12/01/2004
Sanses
Sanses
Gostei + 0
12/01/2004
Jelves
Gostei + 0
12/01/2004
Jelves
´Exemplo da minha dúvida´ está em extensão DOC mude a extensão para ZIP descompacte ele no D: caso vc não tenha repartição no seu HD, poderá descompactar dentro do C: e setar o caminho do SQLCONECTION que está no datamodule ´DM´.
Veja bem não sei se esta é a melhor solução, inclusive se vc tiver uma idéia melhor sou todo ouvido..
Quando vc executar o exemplo vc digita um código de usuário; (18, ou 19), nota-se que o código do pedido e dos itens do pedido será preenchido com ´0´(Zero), o esquema é o seguinte após terminar de digitar os itens dentro do dbgrid, eu irei mandar gravar, e quando eu mandar gravar eu pegarei o próximo generator do Código da tabela Master e substituirei o ´0´ por esse código, e farei um While nos itens e substituirei o ´0´ por este código.
Eu já tentei fazer isto, mais não deu certo, talvez eu não estou sabendo como fazer.
Obrigado a todos!
Jelves
Gostei + 0
13/01/2004
Jelves
Gostei + 0
13/01/2004
Mprocha
se vcs utilizam BD´s que não possuem o objeto SEQUENCE do Oracle e deve estar acontecendo de 2 usuarios criarem pedidos c/ numeros iguais ! entao criem uma tabela que guarde o ultimo numero de pedido feito e até mesmo outros tipos de sequencia.
ex
select * from tab_sequencias
TIPO SEQUENCIA
----------------------------------------
PEDIDO 785145
COD_PRODUTO 5698
COD_FORNECEDOR 563
COD_CLIENTE 124
daí no evento afterInsert da query pedido vc da um lock nesse registro pega a SEQUENCIA e depois soma + 1 e da um Update p/ atualizar e logo em seguida desbloqueia ela, e depois segue o procedimento normal.
A grosso modo a minha ideia é essa, depois é só ir lapidando, recomendo que se trave somente o reg e nao a tabela inteira..
Se não for isso a pergunta, desconsiderem ok !
[]s
Marcos Pinheiro da Rocha
Gostei + 0
13/01/2004
Jelves
jelves@bol.com.br
Gostei + 0
14/01/2004
Jelves
Gostei + 0
14/01/2004
Biriga
TABELA
TabCodigo
---------------------------
tabela | ultimoCodigo
---------------------------
Pedido | 0
---------------------------
DUAS FUNCOES
[b:2128772b26]Novocodigo(nome_tabela);[/b:2128772b26] CHAMADA NO SHOW DO FORM
- efetua uma busca em TabCodigo pelo nome_tabela ordena pelo codigo em forma crescente.
- se tiver apenas um registro incrementa e retorna o novo codigo, no caso acima retornara 1 e a tabela ficara da seguinte forma
---------------------------
tabela | ultimoCodigo
---------------------------
Pedido | 1
---------------------------
- se tiver mais de um registro retorna o de menor codigo excluindo o mesmo.
[b:2128772b26]AbortNovoCodigo(codigo_abortado,nome_tabela) [/b:2128772b26]CHAMADA NO FECHAMENTO DO FORM
- Regrava na tabela TabCodigo o Codigo_abortado
Ex: Se 5 clientes abriram o for_pedido e apenas o c1 e c3 gravaram o pedigo, c2,c4 e c5 cancelaram fecharam o form a tabela ficará, supondo que abriram sequencialmente c1,c2,c3...
---------------------------
tabela | ultimoCodigo
---------------------------
Pedido | 5
---------------------------
Pedido | 2
---------------------------
Pedido | 4
---------------------------
Se uma novo cliente c4 abrir o form_pedido(CHAMA FUNCAO NOVOCODIGO) seu codigo será 2 e a tabela ficara da seguinte maneira
---------------------------
tabela | ultimoCodigo
---------------------------
Pedido | 4
---------------------------
Pedido | 5
---------------------------
Nota: se c4 fechar(CHAMA FUNCAO ABORTNOVOCODIGO) o form novamente a tabela TabCodigo ficara como era antes
---------------------------
tabela | ultimoCodigo
---------------------------
Pedido | 5
---------------------------
Pedido | 2
---------------------------
Pedido | 4
---------------------------
Mas se c4 Gravar(CHAMA NOVOCODIGO APOS GRAVAR PEDIGO) o pedido a tabela TabCodigo ficara da seguinte maneira
---------------------------
tabela | ultimoCodigo
---------------------------
Pedido | 5
---------------------------
e o form_pedido de c4 ja tera um NovoCodigo que sera 4
e assim sucessivamente... pelo menos utilizo assim e nunca deu erro.
NOTA:
quando chamo a funcao novocodigo, geralmente gravo esse codigo em uma variavel global do formulario, costumo chamar de codigo_do_formulario.
Espero ter ajudado, pq foi foda escrever isso tudo... heheheh!!!! mas estamos aqui e pra contribuir...
Gostei + 0
14/01/2004
Jelves
jelves@bol.com.br
Gostei + 0
14/01/2004
Mprocha
eu acho que ainda não entendi sua duvida ...
vê se é isso:
O usuario A, B e C inserem itens de pedidos ao mesmo tempo mas no mesmo pedido de numero 999999 ???
[]s
Marcos Rocha
Gostei + 0
14/01/2004
Jelves
Bom, veja bem.. o usuário A,B,C insere o pedido e itens de pedido ao mesmo tempo, sem problema, pois até ai nenhum deles terão o número do pedido, quando eles mandarem gravar o banco mandará para eles o numero do pedido na sequência, aonde este numero serão colocado no cabeçalho e nos itens.. A = 001 B=002 C=003 e assim sucesivamente.
O meu maior problema tá sendo no lançamento no Dbgrid, pois tenho que fazer um while setando o numero do pedido quando eu mandar gravar..
Acredito que terei que fazer transações, para resolver isto.. só não sei como fazer.. dê uma olhada no exemplo que deixei disponivel na minha página...
Assim que matar este problema estarei disponibilizando a solução na página: http://www.jelves.hpg.ig.com.br
Obrigado
Jelves
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)