GARANTIR DESCONTO

Fórum Sugestão de gravar pedido e itens de pedidos???? #205575

10/01/2004

0

Boa tarde, uso Dbexpress com Firebird

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

Jelves

Responder

Posts

11/01/2004

Jelves

sobe


Responder

Gostei + 0

11/01/2004

Nish

Se você conseguir fazer me avise, estou com um problema parecido...


Responder

Gostei + 0

12/01/2004

Jelves

Ok, digo o mesmo para você.


Responder

Gostei + 0

12/01/2004

Wolverine

o bd é único? digo ele esta no serve e tds gravam lá

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:


Responder

Gostei + 0

12/01/2004

Sanses

varia muito de caso a caso, de banco a banco, não de qual banco, mas como foi criado. Eu faço assim, coloco um trigger e um generator no IB e salvo o novo pedido, dai, pelo código gerado pela inserção desse novo registro eu lanço os itens. Não sei se esta é a melhor forma, mas faço assim por não saber de uma melhor, caso encontrem compartilhem comigo tb. Obrigado!!

Sanses


Responder

Gostei + 0

12/01/2004

Jelves

sobe


Responder

Gostei + 0

12/01/2004

Jelves

Pessoal eu deixei um exemplo fonte disponivel desta dúvida no seguinte endereço: http://www.jelves.hpg.ig.com.br
´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


Responder

Gostei + 0

13/01/2004

Jelves

sobe


Responder

Gostei + 0

13/01/2004

Mprocha

colegas, se eu entendi a pergunta feita, então vejam se assim resolvi:
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


Responder

Gostei + 0

13/01/2004

Jelves

Obrigado Marcos, mais ainda não é isso.. baixe o exemplo que deixei disponivel para vc dar uma olhada, qualquer coisa me mande um email
jelves@bol.com.br


Responder

Gostei + 0

14/01/2004

Jelves

sobe


Responder

Gostei + 0

14/01/2004

Biriga

Meu caro, tenho um sistema parecido, para contorna esse problema utilizo uma tabela de controle de codigo e duas funcoes q controlam a busca, insercao, e atualizacao desses codigos, da seguinte manetira

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...


Responder

Gostei + 0

14/01/2004

Jelves

obrigado biriba, mais ainda não é isto que estou precisando....Se alguém mais tiver alguma sugestão ou exemplo fonte, eu agradeço...
jelves@bol.com.br


Responder

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


Responder

Gostei + 0

14/01/2004

Jelves

Marcos

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar