Fazer consulta SQL no delphi

SQL Server

Delphi

29/12/2015

Bom, o que estou tentando fazer é um Select em uma tabela temporária no Delphi pelo componente TQuery. Segue o código abaixo:

oQuery.Close;
oQuery.SQL.Clear;
oQuery.SQL.Add('SELECT *');
oQuery.SQL.Add('FROM #TabTemp');
oQuery.SQL.Add('WHERE DES_PROD LIKE "%" ' + EditPesquisa.Text + ' "%" ');
oQuery.Open;

Quando tento abrir a query, recebo o erro na segunda linha. Se alguém puder me ajudar eu agradeço.
Matheus Gomes

Matheus Gomes

Curtidas 0

Respostas

Douglas

Douglas

29/12/2015

Opa Matheus, tudo bem?

Você poderia postar o código com o erro? Assim fica mais fácil de analisar. :)
GOSTEI 0
William

William

29/12/2015

Um dos motivos está na concatenação de strings, faltando espaços então sua instrução SQL estava sendo executada assim:
SELECT *FROM #TabTempWHERE DES_PROD LIKE "%" ' + EditPesquisa.Text + ' "%"


Adicionando espaços ao final das concatenações:
oQuery.Close;
oQuery.SQL.Clear;
oQuery.SQL.Add('SELECT * ');
oQuery.SQL.Add('FROM #TabTemp ');
oQuery.SQL.Add('WHERE DES_PROD LIKE "%" ' + EditPesquisa.Text + ' "%" ');
oQuery.Open;
GOSTEI 0
Douglas

Douglas

29/12/2015

Opa William, tudo bem?

Permita-me fazer uma pequena correção no código? Segue abaixo:

oQuery.Close;
oQuery.SQL.Clear;
oQuery.SQL.Add('SELECT * ');
oQuery.SQL.Add('FROM #TabTemp ');
oQuery.SQL.Add('WHERE DES_PROD LIKE ' +  QuotedStr('%' + EditPesquisa.Text + '%');
oQuery.Open;


No código postado pelo Mateus, irá apresentar um erro ao executar a query por falta de aspas no parâmetro de pesquisa. Isso pode ser facilmente resolvido através da função QuotedStr, pois a mesma adiciona as aspas. É importante que ele post o código com o erro para identificarmos realmente o que é.
GOSTEI 0
William

William

29/12/2015

Perfeito Douglas.
GOSTEI 0
Armaky

Armaky

29/12/2015

Opa William, tudo bem?

Permita-me fazer uma pequena correção no código? Segue abaixo:

oQuery.Close;
oQuery.SQL.Clear;
oQuery.SQL.Add('SELECT * ');
oQuery.SQL.Add('FROM #TabTemp ');
oQuery.SQL.Add('WHERE DES_PROD LIKE ' +  QuotedStr('%' + EditPesquisa.Text + '%');
oQuery.Open;


No código postado pelo Mateus, irá apresentar um erro ao executar a query por falta de aspas no parâmetro de pesquisa. Isso pode ser facilmente resolvido através da função QuotedStr, pois a mesma adiciona as aspas. É importante que ele post o código com o erro para identificarmos realmente o que é.
GOSTEI 0
Arthur Heinrich

Arthur Heinrich

29/12/2015

Opa William, tudo bem?

Permita-me fazer uma pequena correção no código? Segue abaixo:

oQuery.Close;
oQuery.SQL.Clear;
oQuery.SQL.Add('SELECT * ');
oQuery.SQL.Add('FROM #TabTemp ');
oQuery.SQL.Add('WHERE DES_PROD LIKE ' +  QuotedStr('%' + EditPesquisa.Text + '%');
oQuery.Open;


No código postado pelo Mateus, irá apresentar um erro ao executar a query por falta de aspas no parâmetro de pesquisa. Isso pode ser facilmente resolvido através da função QuotedStr, pois a mesma adiciona as aspas. É importante que ele post o código com o erro para identificarmos realmente o que é.


Além de corrigir o problema das aspas simples, ao utilizar o QuotedStr() evitamos problemas com SQL Injection.
Porém, ainda resta um problema de performance, uma vez que o texto pesquisado sempre inicia com '%', invalidando qualquer possibilidade de uso de índices.
GOSTEI 0
POSTAR