params.createparam
03/03/2005
0
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
Posts
03/03/2005
Gandalf.nho
03/03/2005
Gandalf.nho
Nesse caso, já não sei te dizer. Nunca usei o método CreateParam
03/04/2020
Mário Reis
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;
04/04/2020
Mário Reis
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.
04/04/2020
Mário Reis
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.
Clique aqui para fazer login e interagir na Comunidade :)