Fórum Excluir dois lançamentos ao mesmo tempo na mesma tabela? #326269
27/07/2006
0
//grava debito dm.TBconta.EDIT; dm.TBconta.fieldbyname(´contad´).value:=e1.text; dm.TBconta.fieldbyname(´valord´).value:=e3.text; dm.TBconta.fieldbyname(´valor´).value:=e3.text; //valor fixo p/calculo soma dm.TBconta.POST; //-grava credito-------------- dm.TBconta.EDIT; dm.TBconta.fieldbyname(´contac´).value:=e2.text; dm.TBconta.fieldbyname(´valorc´).value:=e3.text; dm.TBconta.fieldbyname(´valor´).value:=e3.text; //valor fixo p/calculo soma dm.TBconta.POST;
Bom o que eu quero dizer é qui tenho uma tabela com os campos contad, contac, valord, valorc, valor....
Ai preciso gravar no mesmo tempo em duplicidade cfe. o lançamento, só qui uma cai na contad (conta débito) e outra cai na contac (conta crédito), entaum nesti caso tem dois lançamentos feitos num só, ficando o dbgrid com o unico dado identico somente o campo valor.
Bom funciona, mais quando preciso excluir como fazer pois ai quando excluir alguma linha, tem que excluir linha aonde esta o débito e linha aonde está o crédito.
Como uso Table para lançar e excluir pensei que se fizessi dois table usando o mastersource do segundo table para ligar no primeiro table e no master fields usar o campo VALOR. Assim achei que iria excluir os dois, naum funcionou.
Entaum pergunto eu devo fazer como para excluir, ou naum pode fazer desta forma para gravar na tabela.
Gradecido.
____________________
JLima_Jrº.
Jlimajr
Curtir tópico
+ 0Posts
28/07/2006
Jlimajr
if trim(edit1.text)=´´ then begin showmessage(´Selecione a linha que vc deseja excluir´); end else with dm.qtbcontalan do begin close; sql.clear; sql.add(´delete from tbconta´); //codigo SQL para deletar linha sql.add(´where sequencia = ´+quotedstr(edit1.text)+´´); ExecSQL; end;
e agora para alterar usando update? Nunca usei update, nao sei como monta-la certinho o que colocar no where
if trim(edit1.text)=´´ then begin showmessage(´Selecione a linha que vc deseja excluir´); end else dm.qtbcontalan.Active := False; dm.qtbcontalan.SQL.Clear; dm.qtbcontalan.SQL.Add(´update tbconta set valor = ´+´´´´+e3.Text+´´´´+´ where = COD´); dm.qtbcontalan.ExecSQL;
Alguem pode mi ajudar?
Gostei + 0
28/07/2006
Marco Salles
eu não sei se entendi direito , mas o mais indicado nesta situação é deixar com que o Banco Faça as Exclusões e Inserçoes para voce
Mas não sei se seu Banco permite o uso de Trigger ...
Qual é o Banco que voce esta usando ???
Gostei + 0
28/07/2006
Jlimajr
Gostei + 0
29/07/2006
Marco Salles
Gostei + 0
29/07/2006
Jlimajr
Naum amigo, a exclusão ja consegui fazer atravez do comando delete.
O que eu quero agora é saber como se faz para alterar dois lançamentos ao mesmo tempo
Exemplo
gostaria de alterar somente a linha que eu selecionar no dbgrid
exemplo no grid vamos supor qui esta assim:
Ai supondo que seleciono o primeiro quero que altere ele o o segundo tambem as linhas que estaum em negrito, que o segundo lançamento é a sequencia do primeiro lançamento.
Ai axo que deve ser feito com o [b:f2d7bc9bc5]update[/b:f2d7bc9bc5], assim se optar pela sequiencia 001 vai alterar os dois lançamentos.
O problema é qui naum sei como montar por sql, pois sempre trabalhei com table e dbedit usando append/edit/post/delete, só que bem simple agora esti aqui naum tem como fazer isso
Gostei + 0
29/07/2006
Marco Salles
O que caracteriza ser os lançamentos é o Campo Sequencia ????
é o que voce quer alterar ???????
No seu exemplo voce poderia especificar momento antes da alteração , e momento depois da alteração :?: :?: :?:
[b:abaa3c4a0d]Isto é antes ou depois da alteração[/b:abaa3c4a0d] ???
[b:abaa3c4a0d]Pelo que estou entendo a Sequencia que ser alterada vem do Edit1.text
Mas quias os campos que vovce quer alterar e eles recebem os novos valores de onde ???[/b:abaa3c4a0d]
Gostei + 0
31/07/2006
Jlimajr
O que eu gostaria de saber se é possivel alterar os dois valores assim que desse um clique no dbgrid de algum lançamento. Ai abrir um form aonde tenho varios dbedits que ja possuem o mesmo valor que está no dbgrid. No caso se eu der um clique no campo aonte tem um lançamento debito ai tem que alterar o valor que possui nos dois campos debito e credito tem como automaticamente alterar tamebm o valor credito? Agora se alterar somente o campo aonde tem o numero da conta debito ai nao alterar o campo da conta credito por nao possuir valor algum ou seja esta null como mosteri na citação.
Espero ter sido mais claro na pergunta.
Gradecido.
Gostei + 0
01/08/2006
Jlimajr
Gostei + 0
01/08/2006
Marco Salles
Fiz um exemplo aqui bem básico.. Eu não sei se é isto que voce quer
[b:5e6389355e]No Incioi minha Base De Dados esta assim [/b:5e6389355e]:
[URL=http://imageshack.us][img:5e6389355e]http://img213.imageshack.us/img213/3258/imagemjlimajr1rd7.png[/img:5e6389355e][/URL]
[b:5e6389355e]O usuário altera o valor do Campo ValorC ..... Ele edita 300 , quando o valor original era 500.[/b:5e6389355e]
[URL=http://imageshack.us][img:5e6389355e]http://img74.imageshack.us/img74/9716/imagemjlimajr2uf8.png[/img:5e6389355e][/URL]
[b:5e6389355e]e ao sair do registros o valor é gravado nos demais campo...[/b:5e6389355e]
[URL=http://imageshack.us][img:5e6389355e]http://img216.imageshack.us/img216/2128/imagemjlimajr3rn6.png[/img:5e6389355e][/URL]
é isto que voce deseja ????
Gostei + 0
01/08/2006
Jlimajr
fasso isso usando um update?
é isso?
Gostei + 0
01/08/2006
Marco Salles
Não tão perfeito assim...
Não gosto muito desta abordagem , porque tenho que ter controle quase que total sobre a Grid...
Por Exemplo ,
1)evitar que o cara digite valores nun campo aonde Null
2)Ter sempre na Grid Dois Registros com a mesma sequencia
3)etc...
Em outra palavras , na minha opinião , fica a aplicação tendo que ter um controle quase que total sobre a Base de Dados... Isto eu não acho legal, Porque se algo sair errado , na inserção ou Eliminação dos Regsitros , o aplicativo fica todo comprometido...
A saída :
´Talves´ Duas tabelas aonde a inserção e a elimação Edição dos registros
se faça usando Trigger no Proprio Banco , ai sim , voce tem um controle maior na base de dados..
Esta é a minha opiniâo , mas se voce preferir pelo outro caminho e largar esta abordagem eu passo o codigo para voce , sem problema
Gostei + 0
01/08/2006
Jlimajr
Bom tambem concordo com voçe amigo.
Mais eu como naum sei usar [b:7da55daea0]trigger[/b:7da55daea0] naum saberia como fazer.
Agora se tu quiser dispor do codigo que tu fez figo grato.
Mais vou estudar como fazer essa [b:7da55daea0]trigger[/b:7da55daea0], pois naum tenho nem ideia como fazer.
Gostei + 0
02/08/2006
Marco Salles
Gostei + 0
02/08/2006
Jlimajr
Gostei + 0
02/08/2006
Marco Salles
Apenas um exemplo , usando SlqConection , SqlQuery , ClientDateset , DatasetProvinder etc...
O que eu faço aqui...Atualizo todos os campos ValorD e Valor De todos os Registros que tem a sequencia definidos pelo edit2.tex e que tem o Valor do Campo CONTAD diferente de Null
Note ainda que os valores neste caso ve, de um StrtoCurr(Edit1.Text);
Olha a instrução Sql Acredito que voce ira conseguir adaptar para os seus DatSets.... Conseguindo executar esta instrução em um botão , a gente passa para a parte 2 Ok...
var Transacao : TTransactionDesc; begin try Transacao.TransactionID := 1; Transacao.IsolationLevel := xilREADCOMMITTED; sqlU.SQL.Clear; sqlU.SQL.Text:=´update TBCONTA set ValorD = :pValorD , Valor = :pValor ´+ ´Where (Sequencia = :pSequencia)and(not CONTAD is null)´; sqlU.ParamByName(´pValorD´).AsCurrency:=strtoCurr(edit1.text); sqlU.ParamByName(´pValor´).AsCurrency:=strtoCurr(edit1.text); sqlU.ParamByName(´pSequencia´).AsString:=edit2.text; sqlConnection1.StartTransaction(Transacao); sqlU.ExecSql; sqlConnection1.Commit(Transacao); cdsTbConta.close; cdsTbConta.open; except on E:EDataBaseError do begin ShowMessage(´Erro no Update:´ + #1313 + E.Message); sqlConnection1.RollBack(Transacao); end; end;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)