Fórum Velocidade na consulta a bd usando Indy #321739
19/05/2006
0
Queria pegar algumas opiniões e tirar algumas dúvidas com vcs se possível!!
Tenho dois programas..
O Primeiro através de um Indy(Cliente) me envia uma placa. ex CVT5856
O outro programa através de um Indy(Servidor) recebe a string.
eu pego essa string e consulto no meu bd para ver se a placa existe..
se existir eu gravo os dados na tabela registro..
Fiz de um jeito aqui mas não estou satisfeito com os resultados.. não sei se a forma está correta..
no cliente envio
idtcpclient1.writeln(placa);
no servidor (método onExecute) recebo a string
placa := Athread.Connection.Readln;
recebendo essa placa eu uso o findkey para pesquisar.
Dados.Veiculos.findkey([placa])
se existir eu gravo
database.starttransaction
registro.placa := placa; etc...
database.commit
mas está acontecendo umas coisas meio malucas aqui.. tipo. de vez em qdo não grava determinado campo..
e não sei se o findkey é o mais aconselhável...
e qual a real velocidade que posso enviar a string pelo cliente..
pq são mtos veículos, tipo 2 ou 3 por segundo..
Que vcs me aconselham..
obrigado
Eric
Eric.miranda
Curtir tópico
+ 0Posts
19/05/2006
Massuda
Para evitar maluquices no seu BD, você precisa garantir que está fazendo as operações de BD de modo a suportar multithread. Isso geralmente significa que você precisa ter uma conexão com o BD para cada cliente conectado no servidor Indy ou você tem que implementar um mecanismo que bloqueie o acesso simultaneo de diferentes clientes ao BD (semáforo, critical section, etc). Não entendo muito de BD para poder detalhar mais isso.
Gostei + 0
19/05/2006
Eric.miranda
eu vou ter apenas um servidor e um cliente..
cada msg enviada é tratada pelo servidor como cliente diferente??
O meu grande medo é o seguinte..
enquanto eu estou gravando o registro no bd, ele queira gravar outro e outro..aí ficaria uma fila para gravação..e poderia me gerar problemas..
Será que eu mudando de BDE para DBexpress melhoraria algo??
valew
Gostei + 0
19/05/2006
Massuda
Sobre ´formar fila´, depende de como seus programas estão feitos. Note que no lado do cliente (onde está o TIdTCPClient), qualquer envio de dados para o lado do servidor só retorna (TIdTCPClient.WriteLn por exemplo) quando o servidor completa a operação.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)