Problema com Delphi7 Sql Server ADO
Olá pessoal,
Estou com uma dúvida na aplicação que desenvolvi.
Quando roda na minha máquina(Servidor) a aplicação - Clinte/Servidor(Delphi7 + SqlServer + ADO) não há problemas. Roda bem, com boa performance. tudo certo.
Mas quando está rodando nas máquinas clientes em rede, de vez em quando, apresenta o seguinte problema: Dá um tempinho(sem travar) e depois dá uma mensagem de erro ´Tempo Excedido!!´. aí se tentamos a operação novamente vai numa boa. Daí a alguns segundos, não necessariamente na mesma operação, acontece o mesmo problema.
Não sei se isso tem relação com a configuração do ADOConnection nas propriedades CommandTimeOut ou ConnectionTimeOut.
Se alguém conhece esse problema por favor manda uma mensagem.
Valeu e até mais
Estou com uma dúvida na aplicação que desenvolvi.
Quando roda na minha máquina(Servidor) a aplicação - Clinte/Servidor(Delphi7 + SqlServer + ADO) não há problemas. Roda bem, com boa performance. tudo certo.
Mas quando está rodando nas máquinas clientes em rede, de vez em quando, apresenta o seguinte problema: Dá um tempinho(sem travar) e depois dá uma mensagem de erro ´Tempo Excedido!!´. aí se tentamos a operação novamente vai numa boa. Daí a alguns segundos, não necessariamente na mesma operação, acontece o mesmo problema.
Não sei se isso tem relação com a configuração do ADOConnection nas propriedades CommandTimeOut ou ConnectionTimeOut.
Se alguém conhece esse problema por favor manda uma mensagem.
Valeu e até mais
Leogalindo
Curtidas 0
Respostas
Fer_nanda
05/05/2004
Oi Leandro, tenho um sistema CS rodando com sqlserver e D7....não tive esse tipo de problema, mas vc já tentou alterar o valor dessa propriedade pra ver se funciona na boa? Outra...na sua string de conexão vc está se referenciando pelo nome da máquina ou ip, veja isso tbém...numa dessa.
GOSTEI 0
Tnaires
05/05/2004
Outra...na sua string de conexão vc está se referenciando pelo nome da máquina ou ip, veja isso tbém...numa dessa.
Exatamente. Eu enfrentei problemas semelhantes quando colocava no ConnectionString o nome do servidor direto, e passei a informar o IP. Nunca mais deu erro.
GOSTEI 0
Tathianam
05/05/2004
Olá Amigos!
Eu também estava me matando de tentar solucionar essa questão então achei uma solução para Delphi e decidi compartilhar com vocês.
Primeiro (sem sucesso) tentei configurar o servidor SQL para que não utilizasse o timeout, através da propriedade ´Query Governor´. Fiz a seguinte função (query com execsql):
USE banco_de_dados_sql EXEC sp_configure ´+chr(39)+´QUERY_GOVERNOR_COST_LIMIT´+chr(39)+´, ´+chr(39)+´999999´+chr(39)+ ´ RECONFIGURE WITH OVERRIDE
Porém ainda não sabia que o ADO tinha alguns problemas em relação ao tempo limite excedido, e por mais que eu aumentasse esse valor 999999 ainda assim dava a mensagem.
Então achei a solução definitiva: setar manualmente o timeout das SPs e Querys do meu formulário.
Resolução em Delphi (coloquei esta função em uma unit de sistema):
Aí no form show bastou colocar a seguinte instrução:
É isso aí pessoal, se alguém souber de outra alternativa compartilhe também...!!!
Eu também estava me matando de tentar solucionar essa questão então achei uma solução para Delphi e decidi compartilhar com vocês.
Primeiro (sem sucesso) tentei configurar o servidor SQL para que não utilizasse o timeout, através da propriedade ´Query Governor´. Fiz a seguinte função (query com execsql):
USE banco_de_dados_sql EXEC sp_configure ´+chr(39)+´QUERY_GOVERNOR_COST_LIMIT´+chr(39)+´, ´+chr(39)+´999999´+chr(39)+ ´ RECONFIGURE WITH OVERRIDE
Porém ainda não sabia que o ADO tinha alguns problemas em relação ao tempo limite excedido, e por mais que eu aumentasse esse valor 999999 ainda assim dava a mensagem.
Então achei a solução definitiva: setar manualmente o timeout das SPs e Querys do meu formulário.
Resolução em Delphi (coloquei esta função em uma unit de sistema):
type
TFriendDS = class(TCustomADODataSet);
procedure ResolveTimeOut(xForm:TForm);
var I: integer;
begin
with xForm do
begin
for I := 0 to ComponentCount - 1 do
if (Components[I] is TADOStoredProc) or (Components[I] is TADOQuery) then
TFriendDS(Components[I]).CommandTimeout := 999999;
end;
end;
Aí no form show bastou colocar a seguinte instrução:
ResolveTimeOut(self);
É isso aí pessoal, se alguém souber de outra alternativa compartilhe também...!!!
GOSTEI 0