Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

tetel

problema para gravar

Recommended Posts

tenhu um cadastro de venda e tenhu uma tabela que seriaitens_compra com o cod_itens e cod_equipamento pra uma loja de informaticaa cada cod_equipamento ele gera altomatico o cod_itens para nao da o erro de antesque foi bem chatinhu pra arruma so qeu tipo ele so gera o cod_itens se eu de o ApplyUpdatesmas o ApplyUpdates eu so doh no botao gravar pq se eu de direto ele nao iria cancelairia grava de uma veis, entao como posso fase o botao cancela ou se há um jeito de dar o ApplyUpdates no botao grava

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa, mas não entendi a sua dúvida, poderia esclarecer em qual a tabela deseja fazer este controle ? É na itens_compra ? Ficou um pouco confuso...

seria na tabela itens_compraantes eu tava com problema pq se eu botace o codigo repetido ele dava errode chave primaria certoagora pra isso nao acontece eu botei para gera um codigo de item a cadaproduto qeu ele coloca gera um codigo de item so que para ele gera esse codigotenhu que da o ApplyUpdates isso seria num cadastro de vendas daih tenhu o codigo de venda tambemno codigo ta assimif (DSITEQ.State = dsinsert) tHENbegin DM.SQLAux.Close; DM.SQLAUX.CommandText := ''; DM.SQLAUX.CommandText:='SELECT MAX(COD_ITEM_E) FROM ITENS_PED_EQUI'; DM.SQLAUX.Open; CDSITEQCOD_ITEM_E.AsInteger :=DM.SQLAux.FIELDBYNAME('MAX').AsInteger + 1; CDSITEQ.Post; CDSITEQ.Append; DBGridItEq.SelectedIndex := 0; CDSItEqCOD_PED.Value := CDSCOD_PED.Value ;end;e o ApplyUpdates eu soh do no botao grava, isso aih tah no onkeypress da dbgrid

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz no evento OnNewRecord da sua tabela... Ali você pode fazer a busca e a atribuição do valor, algo do tipo no OnNewRecord:

 

DM.SQLAux.Close;DM.SQLAUX.CommandText := '';DM.SQLAUX.CommandText:='SELECT MAX(COD_ITEM_E) FROM ITENS_PED_EQUI';DM.SQLAUX.Open;CDSITEQCOD_ITEM_E.AsInteger :=DM.SQLAux.FIELDBYNAME('MAX').AsInteger + 1;CDSItEqCOD_PED.Value := CDSCOD_PED.Value;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz no evento OnNewRecord da sua tabela... Ali você pode fazer a busca e a atribuição do valor, algo do tipo no OnNewRecord:

DM.SQLAux.Close;DM.SQLAUX.CommandText := '';DM.SQLAUX.CommandText:='SELECT MAX(COD_ITEM_E) FROM ITENS_PED_EQUI';DM.SQLAUX.Open;CDSITEQCOD_ITEM_E.AsInteger :=DM.SQLAux.FIELDBYNAME('MAX').AsInteger + 1;CDSItEqCOD_PED.Value := CDSCOD_PED.Value;
se eu num de o ApplUpdates ele nao gera um novo codigoele sempre pega o mesmo se bota o ApplyUpdates aih sim ele somaria mais 1será que se eu dechace com o ApplyUpdates ali e fisece uma rotina no botao cancelapara elimina no caso se o clientdataset tivece em modo insert para deleta o novo codigofuncionaria?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Colocando o ApplyUpdates ali estaria errado, pois ali é quando se pede para inserir um novo item na tabela, o que não entendo é porque de nao funcionar para você, sempre faço desta forma e nunca tive problemas... o applyupdates vai servir somente para depois confirmar a gravação.

No caso tb não sei como esta montando o relacionamento da sua tabela, sendo que se estiver relacionando o item e o código da mestre, pode mudar um pouco o comando, fazendo assim:

 

DM.SQLAux.Close;DM.SQLAUX.CommandText := '';DM.SQLAUX.CommandText:='SELECT MAX(COD_ITEM_E) FROM ITENS_PED_EQUI WHERE COD_PED = ' + IntToStr(CDSCOD_PED.Value);DM.SQLAUX.Open;CDSITEQCOD_ITEM_E.AsInteger :=DM.SQLAux.FIELDBYNAME('MAX').AsInteger + 1;CDSItEqCOD_PED.Value := CDSCOD_PED.Value;

Para assim somente buscar o próximo código de item do registro em questão...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Colocando o ApplyUpdates ali estaria errado, pois ali é quando se pede para inserir um novo item na tabela, o que não entendo é porque de nao funcionar para você, sempre faço desta forma e nunca tive problemas... o applyupdates vai servir somente para depois confirmar a gravação.No caso tb não sei como esta montando o relacionamento da sua tabela, sendo que se estiver relacionando o item e o código da mestre, pode mudar um pouco o comando, fazendo assim:

DM.SQLAux.Close;DM.SQLAUX.CommandText := '';DM.SQLAUX.CommandText:='SELECT MAX(COD_ITEM_E) FROM ITENS_PED_EQUI WHERE COD_PED = ' + IntToStr(CDSCOD_PED.Value);DM.SQLAUX.Open;CDSITEQCOD_ITEM_E.AsInteger :=DM.SQLAux.FIELDBYNAME('MAX').AsInteger + 1;CDSItEqCOD_PED.Value := CDSCOD_PED.Value;
Para assim somente buscar o próximo código de item do registro em questão...
ali seria 1 pra muitos antes eu botava que itens_venda era dependente daih agora eu mudeio erro dá por causa de repitiçoes da chave primaria e esse codigo deveria fase toda hora que um novo codigo do produto é adicionado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da forma que lhe passei, deve de dar certo, visto que este evento OnNewRecord esta ligado na tabela de itens, e sempre que adicionar um novo item ele busca o valor maior e incrementa mais um, sendo assim não tem como duplicar registro...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da forma que lhe passei, deve de dar certo, visto que este evento OnNewRecord esta ligado na tabela de itens, e sempre que adicionar um novo item ele busca o valor maior e incrementa mais um, sendo assim não tem como duplicar registro...

ele vai e passa laso que ele nao soma tipo ele pega o ultimo valor tipo 5depois ele passa ali de novo e nao soma pra 6continua 5 cod_intem := 1 e cod_produto := 1cod_intem := 2 e cod_produto := 1 no caso seria + o - isso que seria pra ele fase certo?para nao da o erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deveria de fazer isto, no caso quando ele vai para o novo registro, o anterior já foi salvo, certo ?

no caso isso seria na dbgrid ele ia gerando altomatico so com o post no caso o registro mesmo nao teria sido salvo ainda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim... Mas o que importa é o registro da tabela item, pois neste estando salvo ele deve de pegar corretamente o próximo... Outro local se quiser pode colocar a função para pegar o próximo código é no evento OnBeforePost desta tabela item, onde que somente antes verifica se o estado da tabela esta em dsInsert, caso esteja busca o próximo código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim... Mas o que importa é o registro da tabela item, pois neste estando salvo ele deve de pegar corretamente o próximo... Outro local se quiser pode colocar a função para pegar o próximo código é no evento OnBeforePost desta tabela item, onde que somente antes verifica se o estado da tabela esta em dsInsert, caso esteja busca o próximo código.

mas se eu salva a tabela item equipamento salva o reto tuduestou usando pelo datasetfield usando um sql principal e os outros ligado na datasource

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso somente vai salvar aquele item que esta sendo inserido, e não tudo...

agora ele ta gerando os numero certinhusalva o item_equipamento gera outromas so que se eu cancela nao adiantaele salva a mesma coisa e gera um codigo de vendapor isso qeu eu tava tentando num fase daquele jeito alimas vlw aih pela ajudadesculpa se encomodei de mais =]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente, para isto você terá de criar um controle para quando desejar cancelar, visto que isto é do DBGrid mesmo...

vo ve aqui mas vlw mesmobrigadao aee :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.