Ir para conteúdo

POWERED BY:

Arquivado

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

Caduzera

Select com parametros + DBExpress + SQL Server

Recommended Posts

Salve galera, tudo beleza??

 

Seguinte, estou tentando fazer algo simples. Executar um Select com passagem de parâmetro. Exemplo (apenas um exemplo):

 

SELECT A.PRO_COD, A.PRO_ATIVO, A.PRO_ASSUNTO, A.PRO_TRANS, A.PRO_CONTATO, A.CAP_COD_ORI, A.CAP_COD_DES

FROM TPROTOCOLOW A

LEFT OUTER JOIN TUSUEMP X ON X.CODUSU = :GCODUSU

WHERE A.PRO_ATIVO = 'S'

 

No Delphi, executo o comando com o ClientDataSet (pois minha aplicação trabalha como Client/Server). Então fica assim o código:

 

ClientDataSet1.Close;

ClientDataSet1.Params.Clear;

ClientDataSet1.CommandText := 'SELECT A.PRO_COD,A.PRO_ATIVO,A.PRO_ASSUNTO,A.PRO_TRANS, A.PRO_CONTATO, A.CAP_COD_ORI,A.CAP_COD_DES' +

' FROM TPROTOCOLOW A ' +

' LEFT OUTER JOIN TUSUEMP X ON X.CODUSU = :GCODUSU' +

' WHERE A.PRO_ATIVO = ''S''';

 

ClientDataSet1.Params.ParamByName('GCODUSU').AsInteger := 7;

ClientDataSet1.Open;

 

Porem ele não executa e retorna a mensagem: "Syntax error or access violation"

 

A aplicação rodava em Firebird e como mudei para o SQL Server 2005

 

O que pode ser??? Isso ocorre para qualquer parâmetro de qualquer tipo (String, Data, etc).

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troque as aspas simples no where A.PRO_ATIVO = ''S'' por aspas duplas e tente executar novamente.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela resposta.

 

Mas o problema não esta nesta parte. Mesmo que retire isso do SQL ocorre o erro. Ou se caso eu retirar a linha onde existe o parametro ele funciona normalmente.

 

Creio que seja um BUG do DBExpress com o SQL Server ... no reconhecimento de parametros.

 

Porque quando executo a mesma query utilizando os componentes do ADO funciona que é uma beleza !!

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Possivelmente o clientdataset não reconheça que o :GCODUSU é um nome de parâmetro quando a query é montada da forma que está montando seu sql, via commandtext, e estou sem delphi aqui para poder verificar isso melhor. Agora, se está sempre montando ela em tempo de execução todas as vezes, porque não passar simplesmente o valor direto na query sem usar parâmetros?

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que vi no Delphi, depois de de passar o SQL para o CommandText o ClientDataSet já reconhece que existem parâmetros no SQL. Mas depois de executado uma vez ele aparentemente se perde e não reconhece mais !!

 

O problema é que estou fazendo a migração de um sistema de Firebird para SQL Server 2005 e estou tentando fazer a migração com o menor impacto possível. Se tiver que alterar todas as rotinas que usam parâmetros para passagem da informação direto no SQL iria aumentar e muito o tempo da migração !!

 

Estou entre a cruz e a espada !!

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.