comit no banco

Delphi

02/10/2012

boa tarde gente sou novo por aqui, agradeço desde ja por tudo, entao vai tenho uma duvida aqui no meu estagio estou com um probleminha em relação em da um comit para fazer o armazenamentos no bando, tou usando um programa da topdata e tenho que guarda no banco todas essas informações da catraca e cancela, iae ta o problema nao tou conserguindo da um comit, o programa so guarda as informações depois que eu saiu e entro do sistema como faço para resolver isso.....
Thiago Jose

Thiago Jose

Curtidas 0

Respostas

Thiago Jose

Thiago Jose

02/10/2012

boa tarde gente sou novo por aqui, agradeço desde ja por tudo, entao vai tenho uma duvida aqui no meu estagio estou com um probleminha em relação em da um comit para fazer o armazenamentos no bando, tou usando um programa da topdata e tenho que guarda no banco todas essas informações da catraca e cancela, iae ta o problema nao tou conserguindo da um comit, o programa so guarda as informações depois que eu saiu e entro do sistema como faço para resolver isso.....


Data := Now;
                        DecodeDate
                        (Data, tAno, tMes, tDia);
                        DecodeTime(Data, tHora, tMinuto, tSegundos, tMiliSegundos);


                        IBDatabase1.Connected := True;
                        IBQuery1.Close;
                        IBQuery1.SQL.Text:= ' insert into LOG_CATRACA (CATRACA, DATA_ENT, HORA_ENT, CARTAO, DATA_MOV, HORA_MOV,TIPO) values (:CATRACA,:DATAENT, :HORAENT, :CARTAO, :DATAMOV, :HORAMOV, :TIPO)';
                        IBQuery1.ParamByName('CATRACA').AsString := IntToStr(Numero);
                        IBQuery1.ParamByName('DATAENT').AsString:= '20'+format('%2d',[Bilhete.Ano]) + format('%2d',[Bilhete.Mes]) + format('%2d',[Bilhete.Dia]);
                        IBQuery1.ParamByName('HORAENT').AsString:= format('%2d',[Bilhete.Hora]) + ':' + format('%2d',[Bilhete.Minuto])+ ':00';
                        IBQuery1.ParamByName('CARTAO').AsSTRING := Bilhete.Cartao;
                        IBQuery1.ParamByName('DATAMOV').AsString:= format('%2d',[tAno])+format('%2d',[tMes])+format('%2d',[Tdia]);
                        IBQuery1.ParamByName('HORAMOV').AsString:= format('%2d',[tHora])+':'+format('%2d',[tMinuto])+':'+format('%2d',[tSegundos]);
                        IBQuery1.ParamByName('TIPO').AsString := IntToStr(Bilhete.Tipo);

                        IBQuery1.ExecSQL;
GOSTEI 0
Marcos Iwazaki

Marcos Iwazaki

02/10/2012

Bem vindo ao forum amigo...

Bom para iniciar sempre bom postar:
Banco que usa (firebird, interbase, oraclo...)
Componentes para acesso ao banco(sqlconncetion +sqlqry+datasetprovider+clientdataset, Zeos...)
Versão do delphi (Delphi 7,2007, XE2....)

por exemplo se estiver usando o clientdataset...
vc deve usar o applyupdate(0) p aplicar no banco.

boa tarde gente sou novo por aqui, agradeço desde ja por tudo, entao vai tenho uma duvida aqui no meu estagio estou com um probleminha em relação em da um comit para fazer o armazenamentos no bando, tou usando um programa da topdata e tenho que guarda no banco todas essas informações da catraca e cancela, iae ta o problema nao tou conserguindo da um comit, o programa so guarda as informações depois que eu saiu e entro do sistema como faço para resolver isso.....
GOSTEI 0
Thiago Jose

Thiago Jose

02/10/2012

opa amigo obg, e desculpa veja só tou usando o banco de dados firebird com ibexpert, sei que vc falou o metodo mais poderia me dizer onde coloca-lo, agradeço muito pela sua ajuda... AQUI ESTA O CODIGO TODO...OUTRO DETALHE NA HORA QUE GRAVO NO BANCO FICA COM UNS ESPAÇO NA SEI OQUE FAZER COM ISSO TB ..OBG AMIGO DESCULPA SE JA ESTOU PEDINDO DE MAIS ...

IF(Ret = RET_COMANDO_OK) THEN BEGIN

                        lstBilhetes.Items.Add('Inner: ' + IntToStr(Numero) + ' ' + IntToStr(Bilhete.Tipo) + ' ' +
                        IntToStr(Bilhete.Dia) + '/' + IntToStr(Bilhete.Mes) + '/' + IntToStr(Bilhete.Ano) + ' ' +
                        IntToStr(Bilhete.Hora) + ':' + IntToStr(Bilhete.Minuto) + ' Cartão: ' + Bilhete.Cartao);

                        cartao_off:=IntToStr(Numero) + ' ' + IntToStr(Bilhete.Tipo) + ' ' + Bilhete.Cartao +  ' ' +
                        IntToStr(Bilhete.Dia) + '/' + IntToStr(Bilhete.Mes) + '/' + IntToStr(Bilhete.Ano) + ' ' +
                        IntToStr(Bilhete.Hora) + ':' + IntToStr(Bilhete.Minuto);

                        //Recupera a data para as variáveis..
                        Data := Now;
                        DecodeDate
                        (Data, tAno, tMes, tDia);
                        DecodeTime(Data, tHora, tMinuto, tSegundos, tMiliSegundos);


                        IBDatabase1.Connected := True;
                        IBQuery1.Close;
                        IBQuery1.SQL.Text:= ' insert into LOG_CATRACA (CATRACA, DATA_ENT, HORA_ENT, CARTAO, DATA_MOV, HORA_MOV,TIPO) values (:CATRACA,:DATAENT, :HORAENT, :CARTAO, :DATAMOV, :HORAMOV, :TIPO)';
                        IBQuery1.ParamByName('CATRACA').AsString := IntToStr(Numero);
                        IBQuery1.ParamByName('DATAENT').AsString:= '20'+format('%2d',[Bilhete.Ano]) + format('%2d',[Bilhete.Mes]) + format('%2d',[Bilhete.Dia]);
                        IBQuery1.ParamByName('HORAENT').AsString:= format('%2d',[Bilhete.Hora]) + ':' + format('%2d',[Bilhete.Minuto])+ ':00';
                        IBQuery1.ParamByName('CARTAO').AsSTRING := Bilhete.Cartao;
                        IBQuery1.ParamByName('DATAMOV').AsString:= format('%2d',[tAno])+format('%2d',[tMes])+format('%2d',[Tdia]);
                        IBQuery1.ParamByName('HORAMOV').AsString:= format('%2d',[tHora])+':'+format('%2d',[tMinuto])+':'+format('%2d',[tSegundos]);
                        IBQuery1.ParamByName('TIPO').AsString := IntToStr(Bilhete.Tipo);

                        IBQuery1.ExecSQL;
//                        ShowMessage(cartao_off+'-'+bilhete.cartao);

                        AssignFile( arq, 'C:\CATRACAS\CAT01\MOVIMENTO.TXT');
                        Append (arq);   // abre para incluir sem destruir
                        WriteLn (arq, cartao_off);
//                        ShowMessage(cartao_off);
                        CloseFile (arq);

                        //Incrementa o tempo de coleta..
                        TempoColeta := Retornar_SegundosSys() + 3;
                END
                //Se o tempo de coleta terminou, vai para proximo estado..
                ELSE BEGIN
                        IF (Retornar_SegundosSys() >= TempoColeta) THEN BEGIN
                                EstadoAtual := ESTADO_ENVIAR_CFG_ONLINE;
                        END;
                END;
        END;
END;
GOSTEI 0
Marcos Iwazaki

Marcos Iwazaki

02/10/2012

pelo jeito vc usa os componente do IB

não uso eles.. não vou poder te ajudar muito...

mas veja se vc não tem um componente de transação

dae vc tenta fazer algo do tipo
Transaction.CommitRetaining;
depois q vc executa o seu comando.

GOSTEI 0
Deivison Melo

Deivison Melo

02/10/2012

use o componente TIBTransaction

É o responsável pelo controle de transações da sua aplicação. Você pode
controlar transações concorrentes, ou em threads independentes. Para
tratarmos de transações, precisaríamos de um artigo a parte.

Propriedades :
Active : Inicia a transação, tem o mesmo efeito do método StartTransaction.

DefaultAction : Indica a sua transação qual será o método executado quando o
parâmetro IdleTimer exceder.

DefaultDataBase : Indica a qual conexão a transação pertence.

Params : Propriedade onde você especifica o tipo de transação, isto é, como a sua transação se portará na sua
aplicação. Em versões atualizadas do IBX, você clica duas vezes no componente para abrir as opções de
transações. Estas opções estão explicadas no capitulo de transações.

IdleTimer : Especifica quanto tempo a transação ira esperar para executar a
propriedade DefaultAction

Eventos :
OnIdleTimer : Ocorre quando o tempo excedido por IdleTimer.

Principais Métodos :

Commit : Método responsável pela confirmação e gravação de toda a transação. Quando se inicia uma
transação, você precisa fechá-la e confirmar ou não os dados envolvidos na transação. Para confirmar os
dados e fechar a transação, você chama o método Commit.

CommitRetaining : Método semelhante ao Commit, mas, diferente do Commit, não fecha a transação, isto é,
a transação ainda fica ativa, mas, foi confirmado a gravação dos Dados envolvidos na transação.

RollBack : Método responsável pelo cancelamento e a não gravação de toda a transação. Quando se inicia
uma transação, você precisa fechá-la e confirmar ou não os dados envolvidos na transação. Para cancelar a
transação e os dados envolvidos nela, você executa o RollBack.

RollBackRetaining : Método semelhante ao RollBack, mas, diferente do RollBack, não fecha a transação,
isto é, a transação ainda fica ativa, mas, foi o cancelado os Dados envolvidos na transação.

StartTransaction : Inicia uma transação, no qual ainda tenha sido iniciada.

InTransaction : Verifica se a transação está ativa “Iniciada” ou não.

TIBTable
Faz a conexão com a sua Base de Dados no mesmo modelo de TTable do Data
Access do Delphi. O uso de TIBTable em modelo Client-Server não é
recomendado, por causa do número de instruções muito grande enviadas ao
servidor. Por causa disto, é recomendável o uso de TIBQuery e ou TIBDataSet.

Fonte: http://www.josevalter.com.br/download/banco_dados/Apostila%20Interbase%206.0.pdf
GOSTEI 0
POSTAR