Select com parametros + DBExpress + SQL Server
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
Curtidas 0
Respostas
Leonardo Xavier
15/12/2010
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?
GOSTEI 0
Carlos Souza
15/12/2010
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???
GOSTEI 0