Eu tenho um usuário que está tentando acessar algumas tabelas do nosso sistema Microsoft SQL Server 2008 R2 (que recentemente foi movido para uma nova pilha de hardware/software) usando o Access 2007 por meio de uma conexão ODBC, um método que eles usam há anos . Agora eles estão recebendo 'Erro reservado (-7711); não há mensagem para este erro.'
Em meu processo de pesquisa no Google, não consegui identificar nenhuma informação relevante que não esteja relacionada às versões 2003 do Sybase. Eu estou supondo que há alguma segurança de definição de configuração que esqueci de definir na nova caixa, mas para mim o erro parece bastante obscuro e não tenho certeza de onde ir a partir daqui.
Qualquer ajuda que você possa oferecer seria muito apreciada.
Acontece que o problema era com um assembly criado com permissões 'irrestritas', ao tentar a conexão ODBC no Excel, recebi um erro mais detalhado relacionado a um erro .NET e esse assembly, alterando o 'conjunto de permissões' para 'seguro' parecia resolva o problema.
Também descobri que recebo esse erro quando o SQL Server (e presumivelmente qualquer outro provedor ODBC) retorna uma mensagem de erro excessivamente longa. Em meus próprios testes, descobri que o erro é gerado quando uma mensagem de erro ODBC tem mais de 511 caracteres.
Não encontrei nenhuma documentação listando 511 caracteres como o comprimento máximo para essas mensagens, mas corresponde a um número binário redondo (2 9 = 512), portanto, faz sentido como um limite a esse respeito.
É improvável que as mensagens de erro de estoque sejam tão longas, mas se você estiver retornando uma mensagem de erro personalizada, é totalmente possível. A solução alternativa que escolhi foi detectar o erro e cortá-lo antes de lançá-lo novamente.
Há algum texto padrão que sempre é retornado (
[Microsoft][ODBC SQL Server Driver][SQL Server]
) no início da mensagem. Essa string pode ser um pouco diferente dependendo de como a tabela foi vinculada, portanto, pode ser necessário ajustar o comprimento do corte para adequá-lo.Portanto, precisamos reduzir a mensagem de erro original para 464 caracteres. Eu faço isso da seguinte forma: