Caduzera 0 Denunciar post Postado Dezembro 15, 2010 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
Chrnos 30 Denunciar post Postado Dezembro 16, 2010 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
Caduzera 0 Denunciar post Postado Dezembro 16, 2010 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
Chrnos 30 Denunciar post Postado Dezembro 16, 2010 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
Caduzera 0 Denunciar post Postado Dezembro 16, 2010 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