Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Giorgio H. Bazzo

Erro em sentenças SQL no SQL Server 2000 e 2008 no Windows XP SP3

Recommended Posts

Estou tendo problemas com algumas consultas no SQL Server 2000 e 2008.

Notei tais problemas apenas em computadores que utilizam windows xp sp3 (nas versões anteriores não testei) e nas versões Vista e Seven os problema não ocorrem.

 

No windows XP sp3 (onde o problema acontece) estou usando o Microsoft Data Access Components (MDAC) 2.8 SP1

 

Usando o OLE DB Provider for SQL Server acontece o seguinte problema:

ao executar a consulta:

 

SELECT tabelaA.ID,

(SELECT COUNT(*) FROM tabelaB where tabelaB.ID = 1 ) as total

FROM tabelaA.ID = :parametro1

 

um erro: “'msado15.dll'. Read of address 001108F3” é retornado

 

Notei que se WHERE da subquery for removido ficando a consulta assim:

 

SELECT tabelaA.ID,

(SELECT COUNT(*) FROM tabelaB ) as total

FROM tabelaA.ID = :parametro1

 

o erro não acontece

 

E também se a subquery for colocada entra parenteses 2 vezes assim:

SELECT tabelaA.ID,

((SELECT COUNT(*) FROM tabelaB where tabelaB.ID = 1 )) as total

FROM tabelaA.ID = :parametro1

 

o erro também não acontece

 

se o para parametro1 for removido e um valor for passado concatenado junto a string do sql o problema também não acontece

 

Testei essa situação usando o SQL Server Native Client 10.0 (também no XP sp3) e esse prolema não acontece. Mas infelizmente outro erro aparece agora em um UPDATE.

 

Quando executo o UPDATE:

 

UPDATE DAV SET NRODAV = (SELECT (ISNULL(MAX(NRODAV),0)+1) FROM DAV)

WHERE ID_DAV = :pID_DAV

 

um erro : “Incorect sintax near set” mas isso só ocorre com o “SQL Server Native Client 10.0 ”, o mesmo código executado com o “OLE DB Provider for SQL Server” roda numa boa sem erro algum.

 

Se o UPDATE for alterado para:

 

UPDATE DAV SET NRODAV = (ISNULL( ( SELECT MAX(NRODAV) FROM DAV ),0)+1)

WHERE ID_DAV = :pID_DAV

 

O erro não ocorre, em nenhum dos provides, assim tanto o “SQL Server Native Client 10.0 ” quanto o “OLE DB Provider for SQL Server” executam numa boa.

 

Todos essas sentenças SQL executam tranquilamente se o computador estiver com windows vista ou Seven, e usando qualquer um dos provides, “SQL Server Native Client 10.0 ” quanto o “OLE DB Provider for SQL Server” não apresentam problemas. Lembrando que no vista e no seven a versão do MDAC é a 6.0 é esta não esta disponível para windows xp.

 

 

Resumindo:

Se for usado o “OLE DB Provider for SQL Server” no windows xp:

Problema com o SELECT citado acima.

Se for “SQL Server Native Client 10.0 ” no windows xp:

Problema com o UPDATE citado acima.

Se o windows for o Vista ou Seven:

Nenhum problema desse ocorre.

 

Este problemas ocorrem dentro da minha aplicação que é desenvolvida em Delphi 2007, usando o ADO para conectar ao SQL Server. O que intriga é que a mesma aplicação roda no windows seven sem problemas, os erros só ocorrem no windows xp.

 

Sei que posso contornar o problema alterando os SQL, mas como desenvolvedor espero que se uma sentença SQL roda em um computador com windows seven, o mesmo vai rodar quando estiver em produção nos clientes que usam windows xp. Ou se der erro no windows xp, que o erro também ocorra no windows seven, caso contrário não podemos ter certeza que o código vai executar igual nas duas plataformas.

Gostaria de saber se existe uma solução para isto, hotfix ou algo assim?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.