params.createparam

03/03/2005

0

Em uma query utilizo alguns parâmetros para consulta, os quais estou tentando criar em tempo de execução. ( Delphi 6 )

query1.close;
query1.sql.clear;
query1.sql.add(´ select nome, matricula, curso ´);
query1.sql.add(´ from cadastro1 ´);
query1.sql.add(´ where nome = :nome ´);
query1.sql.add(´ and curso = :curso´);
query1.sql.add(´ and ano_letivo = :ano´);

query1.Params.Clear;

query1.Params.CreateParam(ftstring, ´nome´, ptUnknown);
query1.Params.CreateParam(ftfloat, ´curso´, ptUnknown);
query1.Params.CreateParam(ftfloat, ´ano´, ptUnknown);

query1.ParamByName(´nome´).AsString:= v_nome;
query1.ParamByName(´curso´).AsFloat := v_curso;
query1.ParamByName(´ano´).AsFloat := v_ano;

query1.open;


Porque que ao executar a query aparece a mensagem de erro:

´ Parameter not set in query string ´.


Alguém sabe o que esta errado?


Obrigado


Airoosp

Airoosp

Responder

Posts

03/03/2005

Gandalf.nho

Tente executar o código sem usar o trecho do CreateParam, apenas criando a SQL e passando diretamente os valores para os parâmetros. Eu sempre fiz assim e sempre funcionou


Responder

03/03/2005

Airoosp

Entendi, mas como deveria ser utilizado o createparam ?


Responder

03/03/2005

Gandalf.nho

Entendi, mas como deveria ser utilizado o createparam ?


Nesse caso, já não sei te dizer. Nunca usei o método CreateParam


Responder

03/04/2020

Mário Reis

Estou pesquisando, tente assim:
Var PMV PCC,PDT1,PDT2 : TParam;
begin
PMV:=Qry.Params.CreateParam(ftString,''MV'',ptInput);
PCC:=Qry.Params.CreateParam(ftString,''CC'',ptInput);
PDT1:=Qry.Params.CreateParam(ftString,''DT1'',ptInput);
PDT2:=Qry.Params.CreateParam(ftString,''DT1'',ptInput);
// depois
Qry.Params.AddParam(pMV);
Qry.Params.AddParam(pCC);
Qry.Params.AddParam(pDT1);
Qry.Params.AddParam(pDT2);
// e só depois
Qry.ParamByName(''MV'').AsString:=''PG'';
Qry.ParamByName(''CC'').AsString:=''110658760'';
Qry.ParamByName(''DT1'').AsString:=''2020-01-01'';
Qry.ParamByName(''DT2'').AsString:=''2020-12-31'';
// Finalmente
Qry.Open;
Responder

04/04/2020

Mário Reis

No exemplo acima faltou o Qry.Params.Clear mas a esta hora V. já chegou lá.

Com efeito, há cada vez menos informação disponível sobre estes assuntos "particularidades", porém muito importantes que me levam a questionar a minha permanência com a Devmedia. Na documentação da Embarcadero também não encontrei grande coisa.Ainda assim cheguei lá, ao fim de ler um bom bocado. Demorou algum tempo. Acho que ninguém usa por isso há pouco material sobre isso.
Não percebi também porque é que a sintaxe abaixo gerada pela "GxExperts" não funciona, ainda não percebi porquê:
with IbQry.ParamData.Add do begin
DataType := ftString;
Name := 'MV';
ParamType := ptInput;
end;
Porque uma forma de aprender, sempre que há um assunto novo que não dominamos é recorrer a estes utilitários quando funcionam. Não percebi ainda porque este não funciona?! Talvez seja uma forma mais antiga de fazer já não suportada (uso o D XE7) ou então não actualizada pela GxExpert, ou ainda, um bug. Se me permites aconselho a que investigues também.
Vou continuar porque já agora quero ficar a dominar isto.
Responder

04/04/2020

Mário Reis

Continuando a minha pesquisa eis que encontrei mais alguma informação:
Var Params : TParams; // (diferente)
begin
...
IbQryPagaReceb.Params.Clear;
// Nota aqui cria vazio
Params := TParams.Create(nil);
Try
pMV:=Qry.Params.CreateParam(ftString, 'MV',ptInput);
pCC:=Qry.Params.CreateParam(ftString, 'CC',ptInput);
pDT1:=Qry.Params.CreateParam(ftString, 'DT1',ptInput);
pDT2:=Qry.Params.CreateParam(ftString, 'DT2',ptInput);
finally
// Reccorendo ao TParams.Create(nil);
(* parece que não necessita do bloco abaixo!
Qry.Params.AddParam(pMV);
Qry.Params.AddParam(pCC);
Qry.Params.AddParam(pDT1);
Qry.Params.AddParam(pDT2);
*)
Params.Free; // Não esquecer libertar memória
end;
// Então assignar valores
Qry.ParamByName('MV').AsString:='PG';
Qry.ParamByName('CC').AsString:='110658760';
Qry.ParamByName('DT1').AsString:='2020-01-01';
Qry.ParamByName('DT2').AsString:='2020-12-31';
// Abrir com os parâmetros assignados
Qry.Active := True;
Créditos para Página 31, aqui:
https://books.google.pt/books?id=Y98Y4qJpH8gC&pg=PA23&lpg=PA23&dq=delphi+ParamData&source=bl&ots=9jReKXUEDw&sig=ACfU3U2ZZ5wMNrmAfRo9Du3HzUr0Ss_xWw&hl=pt-PT&sa=X&ved=2ahUKEwjA57ur9c7oAhWKZd8KHcvoA-QQ6AEwAnoECAsQNg#v=onepage&q=delphi%20ParamData&f=false
Ora parece que há duas forma de fazer.Aqui ficam.
Abr.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar