Fórum Erro de conexão com Windows 7 #377925

20/05/2010

0

Olá.   Utilizo Delphi 7. Tenho uma aplicação funcionando perfeitamente em Windows XP e inferiores acessando Windows Server 2003 com Sql Server 2005. Esta mesma aplicação, quando instalada em Windows Vista ou 7 não consegue logar-se ao servidor. Vejamos:   1 - Ao iniciar o sistema utilizo um componente adoConnection ( conTestaConexao ) o qual recebe em tempo de execução as configurações de acesso ao banco, por meio de sua propriedade ConnectionString. Ex.: Provider=SQLOLEDB.1;Password=SENHA;User ID=USUARIO;Initial Catalog=MINHABASE;Data Source=192.168.1.1   Após preencher a propriedade ConnectionString faço um Open. Caso haja algum erro interrompo a execução do sistema, informando ao usuário a impossibilidade e disponibilizo uma tela para que configure a conexão outra vez.   Nesta tela o usuário tem a possibilidade de testar os dados entrados e verificar se a conexão obterá êxito e, somente nesta hipótese, as informações são salvas para serem utilizadas em conexões futuras.   Até aqui tudo vai bem.   2 - Um segundo adoConnection ( adoCon )  tem sua propriedade ConnectionString alimentada pela ConnectionString do primeiro adoConnection ( conTestaConexao ).   Deste ponto em diante todos os componentes ADOQuery, ADOCommand e etc. têm suas propriedades Connection apontadas para o ADOConnection ( adoCon ).   Aqui ocorre o problema. Sem exceção, quaisquer Query, Command e etc. não são executadas e, o sistema detecta o erro: "Login failed for user 'USUARIO'".   Abaixo uma transcrição do Código:   1 - TESTA PARAMETROS DE CONEXAO   Procedure DefineNovoServidor(iTipo : Integer; sProvider, sSenha, sUsuario, sBanco, sServidor : String);
Begin
 sCon := 'Provider=' + sProvider;
 Case iTipo Of
  0 : //Sql Server
   Begin
    sCon := sCon + ';Password=' + sSenha;
    sCon := sCon + ';User ID=';
    sCon := sCon + sUsuario;
    sCon := sCon + ';Initial Catalog=' + sBanco;
    sCon := sCon + ';Data Source=' + sServidor;
   End;
 End;
End;   Function ConexaoOk : Boolean;
Begin
 Result := True;
 Screen.Cursor := crHourGlass;
 With DmGeral.conTestaConexao Do
  Begin
   ConnectionString := sCon;
   Close;
   Try
    Open;
    Close;
   Except
    On e : Exception Do
     Begin
      MensagemDeAviso( 'Sistema não foi capaz de realizar um teste de conexão' +
       ': "' + e.Message + '".' );
      Result := False;
     End;
   End;
  End;
 Screen.Cursor := crDefault;
End;
2 - CONFIGURAÇÃO VÁLIDA É PASSADA AO SEGUNDO ADOCONNECTION. AS QUERYS, SPs E COMMANDS TÊM SUAS PROPRIEDADES CONNECTION PREENCHIDAS. UMA QUERY SENDO DISPARADA.   Procedure AtribuiStringDeConexao;
Var
 i : Integer;
Begin
 //Atribui a nova string de conexão ao objeto principal de conexão
 DmGeral.adoCon.Close;
 DmGeral.adoCon.ConnectionString := sCon;  Screen.Cursor := crHourGlass;
 Try
  For i := 0 To DmGeral.ComponentCount - 1 Do
   Begin
    If (DmGeral.Components[i] is TADOQuery) Then
     (DmGeral.Components[i] as TADOQuery).Connection := DmGeral.adoCon;
    If (DmGeral.Components[i] is TADOStoredProc) Then
     (DmGeral.Components[i] as TADOStoredProc).Connection := DmGeral.adoCon;
    If (DmGeral.Components[i] is TADOCommand) Then
     (DmGeral.Components[i] as TADOCommand).Connection := DMGeral.adoCon;
   End;
  For i := 0 To DMEstoque.ComponentCount - 1 Do
   Begin
    If (DMEstoque.Components[i] is TADOQuery) Then
     (DMEstoque.Components[i] as TADOQuery).Connection := DMGeral.adoCon;
    If (DMEstoque.Components[i] is TADOStoredProc) Then
     (DMEstoque.Components[i] as TADOStoredProc).Connection := DMGeral.adoCon;
    If (DMEstoque.Components[i] is TADOCommand) Then
     (DMEstoque.Components[i] as TADOCommand).Connection := DMGeral.adoCon;
   End;
 Finally
  Screen.Cursor := crDefault;
 End;
End;   Function  ObtemNomeDoUsuarioLogadoNoMomento( sAplicacao : String; Var cdUsuario : Smallint ) : String;
Var
 qryLocal                         : TADOQuery;
 sScriptParaAR                    : String;
Begin
 Result   := '';
 qryLocal := TADOQuery.Create( Nil );
 Try
  Screen.Cursor := crHourGlass;
  Progresso( 'Identificando usuário...', 1 );
  If UpperCase( sAplicacao ) = 'APLICACAO' Then
   Begin
    sScriptParaAR                    :=
     'Select ' +
     ' * ' +
     'From ' +
     ' [Log] As l ' +
     'Where ' +
     ' l.nmComputador = ' + QuotedStr( UpperCase( ObtemNomeDoComputador ) ) + ' ' +
     ' And l.chOpcao = ' + QuotedStr( 'ENTRADA NO SISTEMA' ) + ' ' +
     ' And Not Exists ( ' +
     '  Select Top 1 ' +
     '   1 ' +
     '  From ' +
     '   [Log] As lg ' +
     '  Where ' +
     '   lg.nmComputador = l.nmComputador ' +
     '   And lg.chOpcao = ' + QuotedStr( 'SAIDA DO SISTEMA' ) + ' ' +
     '   And lg.DtLog > l.DtLog ' +
     ' ) ' +
     'Order By ' +
     ' l.DtLog Desc ';
    Try
     With qryLocal Do
      Begin
       Connection := DmGeral.adoCon;
       CommandTimeout := 36000;
       Sql.Add( sScriptParaAR );
       Open;
       If Not IsEmpty Then
        Begin
         cdUsuario := FieldByName( 'cdUsuario' ).AsInteger;
         Result    := FieldByName( 'NmCompletoUsuario' ).AsString;
        End;
      End;
    Except
     On e : Exception Do
      Begin
       MensagemDeAviso( 'Não foi possível obter usuário logado no momento: "' + e.Message + '".' );
      End;
    End;
   End;
  Progresso;
 Finally
  Progresso( 'Identificando usuário...', 1, False );
  Screen.Cursor := crDefault;
  FreeAndNil( qryLocal );
 End;
End;

Desde já muito obrigado pela atenção de todos.
Marcio Santos

Marcio Santos

Responder

Posts

20/05/2010

Marcio Santos

Ih... acho que a questão é mesmo delicada... Alguém se candidata a me ajudar? Será que ninguém nunca passou por esta situação?   Mais uma vez, obrigado a todos e, fico no aguardo!
Responder

Gostei + 0

22/05/2010

Marcio Santos

Será que alguém já tem alguma idéia a respeito? Já pensei em particularidades para conexão entre Windows Vista/7 x Windows Server 2003 x Sql Server 2005. Por acaso alguém tem conhecimento de que haja atualização da MIDAS.DLL para W Vista/7??????? Acho que estou mesmo enrroscado!!!!!    
Responder

Gostei + 0

25/07/2013

Ronaldo Barros

Acabei de pegar está situação igual a sua. :(
vc conseguiu resolver? se sim passa a dica ai.
Grato!
Responder

Gostei + 0

28/07/2013

Manoel Jr

A sua base de dados está na mesma máquina que você está rodando ou está em outra máquina da rede??
Tanto o Windows Vista Como O Windows 7 não permitem conexão a banco de dados localmente, se for usar localmente vc tem que usar o ip 127.0.0.1 ou localhost. se não a conexão não acontecerá.
Responder

Gostei + 0

29/07/2013

Marcio Santos

Prezados,

Desculpem por não ter postado a solução encontrada - na verdade, a resposta a percepção que obtive.
Como podem ter notado o post é bastante antigo e, em função de não ter obtido uma resposta junto aos amigos à época, encontrei a solução de forma bastante empírica. Falha minha não ter compartilhado os experimentos e solução adotada. Peço perdão mais uma vez.
Vamos por parte, então:

1 - Quanto a afirmação de nosso amigo Manoel, creio haver um equívoco - por favor, não me entenda mal, pois meu desejo é tão somente contribuir com a comunidade, compartilhando minhas experiências. No acesso local, é possível sim estabelecer uma conexão ao servidor MS SQL sem lançar mão exclusivamente de localhost ou do IP 127.0.0.1. Realizei, desde então, testes com as versões 2000, 2005, 2008 e 2008r2, utilizando o endereço IP do equipamento ou o nome do equipamento seguido ou não do nome da instância - VERIFIQUE AS CONFIGURAÇÕES DO MS SQL SERVER ATRAVÉS DE SUA FERRAMENTA SQL SERVER CONFIGURATION MANAGER, verificando se os protocolos pipes nomeados e tcp/ip estão devidamente configurados;

2 - Quanto a conexão remota, as experiências levaram-me a uma solução muito, muito, muito, mas muito simples mesmo: utilizei senha composta, exclusivamente, por letras maiúsculas ou exclusivamente por letras minúsculas - podendo conter números também.

Explicação: Por alguma razão que depois não procurei saber, pois tinha que entregar o produto rapidamente ao cliente, os Windows Vista ou Sete, interpretavam/enviavam a cadeia de caracteres que continham maiúsculos e minúsculos de uma maneira que o servidor não compreendia como sendo a senha correta.

ex.: usuário: sa senha: Adventista
Falha na conexão
ex.: usuário: sa senha: ADVENTISTA
Conexão realizada com sucesso
ex.: usuário: sa senha: adventista
Conexão realizada com sucesso
ex.: usuário: sa senha:AD98VENDISTA
Conexão realizada com sucesso
ex.: usuário: sa senha:ad98vendista
Conexão realizada com sucesso
ex.: usuário: sa senha: Ad98ventista
Falha na conexão.

O que é curioso é que se o cliente fosse um Windows XP não fazia diferença alguma, a conexão era restabelecida com sucesso.
O Windows Vista e o Windows Sete obrigaram-me, então, a configurar a senha sempre maiúscula ou sempre minúscula.

Cordialmente,
Abraços!
Responder

Gostei + 0

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

Aceitar