Gravação de Itens

06/03/2006

0

Olá amigos!!!!

Essa é a primeira vez que estou fazendo este processo. Tenho duas tabelas:

TABELA SOLICITACAO - COD_SOLIC, OPERADOR *, DATA, HORA, UNIDADE

TABELA ITENS - COD_ITEM, COD_SOLIC, CARTUCHO *, MARCA, QTDE

* Não usei código nestas duas situações, pois estou fazendo de uma maneira simples, pois o que me importa neste momento é como fazer o processo.

Este sistema trata-se de um controle de cartuchos, onde é feito um pedido de cartuchos para ser disponibilizado a uma determinada filial.

No botão gravar pedido, não é gerado erros, tanto que o registro é gravaado na tabela de SOLICITACAO, porém estou tendo dificuldades quando tento incluir um item na tabela ITENS.

O código que utilizei no botão GRAVAR SOLICITAÇÃO, que aparentemente está correto, é:

procedure TfrmSolicitacao.btnGravarSolicitacaoClick(Sender: TObject);
var
TDS : TTransactionDesc;
begin
try
TDS.TransactionID := 1;
TDS.IsolationLevel := xilREADCOMMITTED;

with dm.cdsInserirPedido do
begin

dm.sqlConexao.StartTransaction(TDS);
FieldByName(´OPERADOR´).AsString := edtOperador.Text;
FieldByName(´DATA´).AsDateTime := dtpData.Date;
FieldByName(´HORA´).AsDateTime := strtotime(mskedtHora.Text);
FieldByName(´UNIDADE´).AsString := edtUnidade.Text;

dm.sqlConexao.Commit(TDS);
ApplyUpdates(0);
Refresh;
Last;
edtSolicitacao.Text := inttostr(FieldByName(´COD_SOLIC´).AsInteger);

end;
except
on E : Exception do
begin
dm.sqlConexao.Rollback(TDS);
showmessage(E.Message);
end;
end;

// Atualizar o codigo da solicitação na tabela ITENS
with dm.cdsAtualizaCodSolic do
begin
close;
Params.ParamByName(´CODSOLIC´).AsInteger := strtoint(edtSolicitacao.Text);
execute;
end;

btnGravarSolicitacao.Enabled := false;
btnNovaSolicitacao.Enabled := true;
end;

Código do botão IncluirSolicitacao (aqui eu precisarei de uma ajuda) que escrevi é:

procedure TfrmSolicitacao.btnIncluirItemClick(Sender: TObject);
var
TDI : TTransactionDesc;
begin
try
TDI.TransactionID := 1;
TDI.IsolationLevel := xilREADCOMMITTED;

with dm.cdsIncluirItem do
begin
dm.sqlConexao.StartTransaction(TDI);

FieldByName(´COD_SOLIC´).AsInteger := 0;
FieldByName(´ITEM´).AsString := edtItem.Text;
FieldByName(´MARCA´).AsString := edtMarca.Text;
FieldByName(´QTDE´).AsInteger := strtoint(edtQtde.Text);

dm.sqlConexao.Commit(TDI);
ApplyUpdates(0);
Refresh;
Last;
end;
except
on E : Exception do
begin
dm.sqlConexao.Rollback(TDI);
showmessage(E.Message);
end;
end;

btnIncluirItem.Enabled := false;
btnNovoItem.Enabled := true;

end;

Quando clico no botão Incluir Item, aparece a mensagem - traduzida - ´não há nenhuma transação ativa´


Essa é uma típica situação que ocorre, por exemplo, numa venda de produtos, onde é feito um pedido de uma determinada quantidade de itens. Pesquisei, mas não encontrei a solução desejada. Gostaria que me apontassem o erro, e qual seria a melhor solução.

Estou utilizando INTERBASE + DBEXPRESS...

Fico no aguardo.

Um abraço a todos....

Rogério


Roger1976

Roger1976

Responder

Posts

07/03/2006

Paullsoftware

basicamente vc não tem que dar um Post no Maste e depois começar a inserir os dados Detail?


Responder

07/03/2006

Macario

Olá amigos!!!! dm.sqlConexao.Commit(TDS); ApplyUpdates(0); Refresh; Last;


reveja esta parte.

Pois voce está finalizando a transação antes do ApplyUpdates!

Outras Dicas:
[color=orange:4f778a4f73][url=http://forum.clubedelphi.net/viewtopic.php?t=58547&start=0&postdays=0&postorder=asc&highlight==url]Transações com DbExpress[/url][/color:4f778a4f73]

Espero que ajude. :arrow:


Responder

07/03/2006

Adriano Santos

Caramba, esse link para a explicação do Vinicius2K é muito loko.
Até eu, que já trampo com DBExpress, aprendi várias coisas...rsrs...até mais.


Responder

10/03/2006

Roger1976

Amigos, fiz mudanças no meu código, vejam abaixo como ficou:

procedure TfrmIncluirItem.btnIncluirItemClick(Sender: TObject);
var
TDI : TTransactionDesc;
begin
try
TDI.TransactionID := 1;
TDI.IsolationLevel := xilREADCOMMITTED;

//dm.sqlConexao.StartTransaction(TDI);

with dm.cdsIncluirItem do
begin
FetchParams;
dm.sqlConexao.StartTransaction(TDI);

Params.ParamByName(´COD_SOLIC´).AsInteger := strtoint(edtSolicitacao.Text);
Params.ParamByName(´ITEM´).AsString := edtItem.Text;
Params.ParamByName(´MARCA´).AsString := edtMarca.Text;
Params.ParamByName(´QTDE´).AsInteger := strtoint(edtQtde.Text);

execute;
dm.sqlConexao.Commit(TDI);

// mostrar o item gravado na dbgid toda vez que um novo for inserido
with dm.cdsCodSolic do
begin
close;
Params.ParamByName(´CODSOLICIT´).AsInteger := strtoint(edtSolicitacao.Text);
open;

if not isempty then
begin
dbgrid1.DataSource := dm.dsCodSolic;
last;
end;
end;

end;
except
on E : Exception do
begin
dm.sqlConexao.Rollback(TDI);
showmessage(E.Message);
end;
end;

end;

Agora está dentro daquilo que eu queria, caso tenha alguma sugestão, ficarei muito grato.

Macario, estou lendo a matéria referente ao link que me passou, está sendo muito útil, pois estou iniciando.


Obrigado!!!!


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar