Fórum Select com parametros + DBExpress + SQL Server #392486
15/12/2010
0
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
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
Carlos Souza
Curtir tópico
+ 0
Responder
Posts
15/12/2010
Leonardo Xavier
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;
clientedataset1.prepared;
ClientDataSet1.Open;
ja fez este comando diratamente por sql para ver se ele mostra o que vc deseja?
Responder
Gostei + 0
15/12/2010
Carlos Souza
Sim. Via SQL direto no BD ele executa tranquilo desde que se substituia o :GCODUSU pelo código.
Percebi que se executado da seguinte forma funciona:
SELECT P.PRO_COD
FROM TPROTOCOLOW P
INNER JOIN TPROT_STATUS S ON S.PRO_COD = P.PRO_COD
INNER JOIN TPROT_ITEM I ON I.PRO_COD = P.PRO_COD
WHERE P.PRO_COD = :PRO_COD
Porém, colocando o parâmetro no INNER JOIN ele não funciona: (exemplo apenas)
SELECT P.PRO_COD
FROM TPROTOCOLOW P
INNER JOIN TPROT_STATUS S ON S.PRO_COD = P.PRO_COD
INNER JOIN TPROT_ITEM I ON I.PRO_COD = :PRO_COD
Assim retorna a mensagem: "Syntax error or access violation"
O comando "Prepared" não existe para o ClientDataSet.
Será que o DBExpress tem alguma incompatibilidade com SQL Server???
Percebi que se executado da seguinte forma funciona:
SELECT P.PRO_COD
FROM TPROTOCOLOW P
INNER JOIN TPROT_STATUS S ON S.PRO_COD = P.PRO_COD
INNER JOIN TPROT_ITEM I ON I.PRO_COD = P.PRO_COD
WHERE P.PRO_COD = :PRO_COD
Porém, colocando o parâmetro no INNER JOIN ele não funciona: (exemplo apenas)
SELECT P.PRO_COD
FROM TPROTOCOLOW P
INNER JOIN TPROT_STATUS S ON S.PRO_COD = P.PRO_COD
INNER JOIN TPROT_ITEM I ON I.PRO_COD = :PRO_COD
Assim retorna a mensagem: "Syntax error or access violation"
O comando "Prepared" não existe para o ClientDataSet.
Será que o DBExpress tem alguma incompatibilidade com SQL Server???
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)