GARANTIR DESCONTO

Fórum Problemas com o ParmByName #475436

07/04/2014

0

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

Responder

Posts

07/04/2014

Paulo Rodrigues

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
Responder

Gostei + 0

07/04/2014

Valquiria Silva

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;
Responder

Gostei + 0

07/04/2014

Daniel Jordão

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.
Responder

Gostei + 0

07/04/2014

Ricardo

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;
Responder

Gostei + 0

08/04/2014

Daniel Jordão

Ok.

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

Gostei + 0

08/04/2014

Alan Souza

dá, com Filter / Filtered
Responder

Gostei + 0

08/04/2014

Paulo Rodrigues

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;
Responder

Gostei + 0

27/05/2014

Nelson Santos

Desenvolva softwares 3D em Delphi 7
www.3dsistemas.com.br
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar