Erro ao fazer select passando parâmetros
Bom dia,
Estou fazendo um consulta no banco utilizando um mesmo método para diferentes tabelas usando parâmetros.
Uso Delphi XE7 e banco Firebird 2.3
Segue o código:
Se faço um ShowMessage e mando exigir meus parâmetros ele mostra certo.
Porém ao executar a query da o seguinte erro:
"Token unknown - line 2, column 8
?."
Que seria um erro de sql. o SQL é pra ficar o seguinto "SELECT COD_CADASTROS, DESCRICAO FROM CADASTROS".
Se executo isso no ibexpert vai normal e se escrevo isso a mão sem os parâmetros funciona normal.
Agora se esta passando os valores para os parâmetros onde estaria o erro ?
Alguém pode me ajudar, isto esta travando meu projeto.
OBS: Em um outro projeto de teste que estava fazendo esta funcionando normal com parâmetros, ai neste projeto me deparei com este erro. Voltei para o outro para ver se era problema com o projeto e no outro o que eu já havia feito esta normal funcionando, porem se escrevo uma nova consulta também não funciona e ocorre este erro.
Estou fazendo um consulta no banco utilizando um mesmo método para diferentes tabelas usando parâmetros.
Uso Delphi XE7 e banco Firebird 2.3
Segue o código:
procedure TfrmPrincipal.sbtnBuscarClick(Sender: TObject);
var
pk, tabela: string;
begin
pk := 'COD_' + cbBusca.Text;
tabela := cbBusca.Text;
consultaProblema(pk,tabela);
end;
---------------------------------------------------------------------------------------------
procedure consultaProblema(codtabela, tabela : string);
begin
DM.cdsProblema.Close;
with DM.qryProblema do
begin
SQL.Clear;
SQL.Add('SELECT :PCOD, DESCRICAO ');
SQL.Add(' FROM :PTABELA ');
ParamByName('PCOD').Value := codtabela; //codtabela = COD_CADASTROS
ParamByName('PTABELA').Value := tabela; //tabela = CADASTROS
Open;
end;
DM.cdsProblema.Open;
end;
Se faço um ShowMessage e mando exigir meus parâmetros ele mostra certo.
Porém ao executar a query da o seguinte erro:
"Token unknown - line 2, column 8
?."
Que seria um erro de sql. o SQL é pra ficar o seguinto "SELECT COD_CADASTROS, DESCRICAO FROM CADASTROS".
Se executo isso no ibexpert vai normal e se escrevo isso a mão sem os parâmetros funciona normal.
Agora se esta passando os valores para os parâmetros onde estaria o erro ?
Alguém pode me ajudar, isto esta travando meu projeto.
OBS: Em um outro projeto de teste que estava fazendo esta funcionando normal com parâmetros, ai neste projeto me deparei com este erro. Voltei para o outro para ver se era problema com o projeto e no outro o que eu já havia feito esta normal funcionando, porem se escrevo uma nova consulta também não funciona e ocorre este erro.
Ari Junior
Curtidas 0
Respostas
Cleverson
06/11/2014
Amigo tenta jogar o SQL direto no componente da query, assim você só vai precisar usar Close e Open + os parâmetros.
EDIT: Lembrando que na propriedade SQL quando voce coloca os parametros >> INSERT INTO tbTeste (id, teste) VALUES (NULL, :Valor);
Ele ja cria corretamente (Assim como uso no Zeos :))
Bs
EDIT: Lembrando que na propriedade SQL quando voce coloca os parametros >> INSERT INTO tbTeste (id, teste) VALUES (NULL, :Valor);
Ele ja cria corretamente (Assim como uso no Zeos :))
Bs
GOSTEI 0
Renato Rubinho
06/11/2014
Buenos,
Já tentei fazer algo parecido no oracle, mas ainda não encontrei uma alternativa a não ser montar o comando todo com variáveis no delphi, sem parâmetros do sql, salvando na query já o comando com os campos e tabelas preenchidos.
Posta aí como você fez para funcionar para entender o que você fez para burlar a interpretação do sql.
Teoricamente não funciona porque você está passando um texto na identificação da tabela e do campo e, para o banco, deveriam ser passados "objetos".
Colando o comando com parâmetros desta forma no IBExpert também não funciona pelo mesmo problema.
Abraççç,
Renato
Já tentei fazer algo parecido no oracle, mas ainda não encontrei uma alternativa a não ser montar o comando todo com variáveis no delphi, sem parâmetros do sql, salvando na query já o comando com os campos e tabelas preenchidos.
Posta aí como você fez para funcionar para entender o que você fez para burlar a interpretação do sql.
Teoricamente não funciona porque você está passando um texto na identificação da tabela e do campo e, para o banco, deveriam ser passados "objetos".
Colando o comando com parâmetros desta forma no IBExpert também não funciona pelo mesmo problema.
SELECT :PCOD, DESCRICAO FROM :PTABELA ;
Abraççç,
Renato
GOSTEI 0
Francisco Camurça
06/11/2014
porderia contatenar as string
consultaProblema(pk,tabela);
procedure consultaProblema(codtabela, tabela : string);
begin
DM.cdsProblema.Close;
with DM.qryProblema do
begin
SQL.Clear;
SQL.Add('SELECT ' + codtabela + ' DESCRICAO ');
SQL.Add(' FROM ' + tabela);
Open;
end;
DM.cdsProblema.Open;
end;
consultaProblema(pk,tabela);
procedure consultaProblema(codtabela, tabela : string);
begin
DM.cdsProblema.Close;
with DM.qryProblema do
begin
SQL.Clear;
SQL.Add('SELECT ' + codtabela + ' DESCRICAO ');
SQL.Add(' FROM ' + tabela);
Open;
end;
DM.cdsProblema.Open;
end;
GOSTEI 0
Renato Rubinho
06/11/2014
Boa tarde Francisco,
Desse jeito foi a única forma que consegui fazer.
Mas usando em 3 camadas, a query está no servidor e gostaria apenas de passar os parâmetros para escolher os campos e tabela a serem utilizados.
Abraççç,
Renato
Desse jeito foi a única forma que consegui fazer.
Mas usando em 3 camadas, a query está no servidor e gostaria apenas de passar os parâmetros para escolher os campos e tabela a serem utilizados.
Abraççç,
Renato
GOSTEI 0