Problemas com o ParmByName

Delphi

07/04/2014

Boas pessoal,

Estou com um problema. Estou usando o Delphi XE5 e estou tentando fazer uma pesquisa na minha tabela, base de dados.
No entanto o "ParamByName" não está sendo aceite pelo programa.

procedure TFormPesquisarRelatorioTurno.Panel2Click(Sender: TObject);
begin
banco2.table2.close;
banco2.table2.ParamByName('NOME_CHEFE').Asstring:=EditPesquisa.Text;
banco2.table2.open;
end;

Dá o erro:
[dcc32 Error] PesquisarRelatoriosTurno.pas(56): E2003 Undeclared identifier: 'ParamByName'
[dcc32 Error] PesquisarRelatoriosTurno.pas(56): E2066 Missing operator or semicolon
[dcc32 Fatal Error] F2063 Could not compile used unit 'PesquisarRelatoriosTurno.pas'

Alguem me consegue ajudar? o que é que se passa?
Daniel Jordão

Daniel Jordão

Curtidas 0

Respostas

Paulo Rodrigues

Paulo Rodrigues

07/04/2014

Você deveria abrir a tabela, inserir registro, atribuir o valor ao registro, gravar e depois fechar, e não o contrário. Eu sempre usei o Parambyname na query, no table eu sempre usei fieldbyname.

procedure TFormPesquisarRelatorioTurno.Panel2Click(Sender: TObject);
begin
    banco2.table2.open;
    banco2.table2.Insert;
    banco2.table2.FieldByName('NOME_CHEFE').text := EditPesquisa.Text;
    banco2.table2.post;
    banco2.table2.close;
end;


Espero ter ajudado
GOSTEI 0
Valquiria Silva

Valquiria Silva

07/04/2014

Não sei que componente de acesso você está usando, mas parece ser falta do "Params"
banco2.table2.close;
banco2.table2.Params.ParamByName('NOME_CHEFE').Asstring:=EditPesquisa.Text;
banco2.table2.open;
GOSTEI 0
Daniel Jordão

Daniel Jordão

07/04/2014

O problema não está em gravar os dados ou editar o que foi gravado, ou eliminar, etc.
isso tudo esta funcionando através do fieldbyname.
O que eu queri fazer agora era uma pesquisa na tabela, ou seja, após ter inserido uns "10 mil registos" eu posso querer ver um deles especificamente como tal queria que quando carrega no botão (imagem) pesquisar, tudo desaparece-se e ficasse apenas o registo que eu escrevi na minha EditPesquisa, na tabela.
GOSTEI 0
Ricardo

Ricardo

07/04/2014

O problema não está em gravar os dados ou editar o que foi gravado, ou eliminar, etc.
isso tudo esta funcionando através do fieldbyname.
O que eu queri fazer agora era uma pesquisa na tabela, ou seja, após ter inserido uns "10 mil registos" eu posso querer ver um deles especificamente como tal queria que quando carrega no botão (imagem) pesquisar, tudo desaparece-se e ficasse apenas o registo que eu escrevi na minha EditPesquisa, na tabela.




Detalhes:

1. ParamByName não vai funcionar com um componente Table.

2. Falta o código SQL.

3. Você não esta passando nenhum parâmetro.


Exemplo usando Query.

With query do
begin
close;
sql.clear;
sql.add('select * from tabela where campo_da_tabela = :Pnome_do_chefe');
parameters.parambyname('Pnome_do_chefe').value := nome_do_chefe;
open;
end;
GOSTEI 0
Daniel Jordão

Daniel Jordão

07/04/2014

Ok.

Então e há alguma maneira de fazer isto sem usar o código SQL?
GOSTEI 0
Alan Souza

Alan Souza

07/04/2014

dá, com Filter / Filtered
GOSTEI 0
Paulo Rodrigues

Paulo Rodrigues

07/04/2014

Então e há alguma maneira de fazer isto sem usar o código SQL?

a maneira mais simples é essa, inclusive o like às vezes é melhor do que o ParamByName, e pode ser combinado os dois.

-conecta um adoconection no banco de dados
-conecta um adoquery no adoconection
-seta strings do adoquery com ‘select * from tabela’
-seta o data source no adoquery
-seta o dbgrid no datasouce
-coloca este código em um botão ou no evento on change do edit2

adoquery.close;
adoquery.SQL.Clear;
adoquery.SQL.Add('select * from tabela');
adoquery.SQL.Add('and tabela.campo = :PARAM1');
adoquery.Parameters.ParamByName('PARAM1').Value := edit1.text;
adoquery.SQL.Add('and tabela.campo2 like' + quotedstr(EDIT2.Text));
adoquery.SQL.Add('order by tabela.campox');
adoquery.OPEN;
GOSTEI 0
Nelson Santos

Nelson Santos

07/04/2014

Desenvolva softwares 3D em Delphi 7
www.3dsistemas.com.br
GOSTEI 0
POSTAR