Fórum Thread de insercao e consulta no FireBird #279086
27/04/2005
0
Estou fazendo um sistema onde preciso consultar e gravar em algumas tabelas do FireBird
O problema é o seguinte
O sistema fica em um loop verificando uma tabela paradox vazia
Qdo existir algum registro nesta tabela crio uma instancia de uma thread passando alguns parametros... assim:
ThreadRodBel := TThreadRodBel.Create(True);
ThreadRodBel.Cod_Barra := tbCodBarra.FieldByName´CODBARRA´).Value;
ThreadRodBel.NumCatraca := tbCodBarra.FieldByName(´NRCAT´).Value;
ThreadRodBel.NumPortaria := NumeroPortaria;
ThreadRodBel.Resume;
tbCodBarra.Delete;
tbCodBarra.Refresh;
A ThreadRodBel faz algumas verificacoes fazendo chamadas de procedures, grava um registro em uma tabela ( Historicos ) e edita uma tabela ( Acessos ) e aind grava um registro em uma tabela paradox
Decidi usar thread pois o sistema deve controlar varias catracas
Fiz um programa q insere um registro na tabela paradox que o sistema fica monitorando.
O problema é que da um pau no FireBird.... simplesmente o sistema trava e o cursor fica em forma de ampulheta SQL.
Passei a usar o componente TIB_Transaction, para ver se dava certo, mas o probela continuou
Colerapunk
Curtir tópico
+ 0Posts
28/04/2005
Ericksasse
http://www.ericksasse.com.br/?p=243
Gostei + 0
29/04/2005
Colerapunk
A minha rotina de gravacao dentro da Thread esta assim
========================================
if not Form_Principal.IB_Transaction1.InTransaction then
Form_Principal.IB_Transaction1.StartTransaction;
Form_Principal.tbHistoricoAcesso.Append;
Form_Principal.tbHistoricoAcesso.FieldByName(´COD_PESSOA´).Value := Cod_pessoa;
Form_Principal.tbHistoricoAcesso.FieldByName(´NOME´).Value := Nome;
Form_Principal.tbHistoricoAcesso.FieldByName(´DATA´).Value := Date;
Form_Principal.tbHistoricoAcesso.FieldByName(´HORA´).Value := Time ;
Form_Principal.tbHistoricoAcesso.FieldByName(´MOTIVO_DESCRICAO´).Value := Motivo;
Form_Principal.tbHistoricoAcesso.FieldByName(´NUM_CARTEIRA´).Value := CodCarteira;
Form_Principal.tbHistoricoAcesso.Post;
if Form_Principal.IB_Transaction1.InTransaction then
Form_Principal.IB_Transaction1.CommitRetaining;
=======================================
Valeu cara
Gostei + 0
29/04/2005
Ericksasse
Você não pode acessar objetos da VCL livremente dentro de uma thread como você está fazendo.
Gostei + 0
29/04/2005
Cabelo
Só um apergunta.. pq vc não cria uma thread para ficar verificando se a tabela paradox está vazia, e se não estiver, pq vc não acessa uma stored procedure direto no banco.. isso lhe pouparia trabalho e ganhartia em velocidade..
Gostei + 0
03/05/2005
Colerapunk
Ja estou fazendo isso.... a thread fica verificando se a tabela esta vazia... se nao estiver chama uma procedure do banco q me retorna os valores q preciso.... ai eu mostro os resultados na tela e mando os comandos para a catraca... so a gravacao do historico q nao estou fazendo por procedure...
Tenho q usar thread pq o sistema fica verificando se a pessoa girou o braço da catraca (fico em um loop verificando isso)...
Mas valeu pela dica e agradeço todos ai do forum....
ja estou resolvendo os problema aki. e ainda aprendi a trabalhar com threads da forma correta...
Valeu d+
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)