Fórum No value for parameter #130789

22/03/2010

0

tenho seguinte codigo...   no formulário tenho dbgrid, que estará exibindo a consulta com 1 filtro que o tipo de venda.   ao informar data inicial e  data final e escolher o tipo de venda e clico em ok,   ocorre o seguinte erro > No value for parameter 'ptipo'.   se não informar o tipo de venda e clicar em ok, ele exibi todos os tipos.       procedure Tprincipal.Button2Click(Sender: TObject); var
sqltipo:string;
begin
  sqltipo:='select funcionario, data, tipo, valor from VENDAS where data>=:pinicial and data<=:pfinal';
  if edittipo.Text <> '' then
      sqltipo:= sqltipo + ' and tipo=:ptipo';   dm.cdstipoVenda.Close;
  dm.cdstipoVenda.CommandText:=sqltipo;   dm.cdstipoVenda.Params[0].AsDate:=strtodate(editini.Text);
  dm.cdstipoVenda.Params[1].AsDate:=strtodate(editfim.Text);   if edittipo.Text <> '' then
      dm.cdstipoVenda.Params[2].AsString:=(edittipo.Text);      dm.cdstipoVenda.Open;
end;     alguem poderia dar uma ajudar?
Thiago Silva

Thiago Silva

Responder

Posts

22/03/2010

Thiago Santana

Chará vê se isso aí resolve teu problema...
Vc se atrapalhou na ordem dos seus parametros! Vê esse lance da data aí pq a datainicial e a datafinal vc tá comparando com o mesmo campo! Vê se é realmente isso que vc quer! ( Só foi um toque)...   procedure Tprincipal.Button2Click(Sender: TObject); var
sqltipo:string;
begin
  sqltipo:='select funcionario, data, tipo, valor from VENDAS where data>=:pinicial and data<=:pfinal';
     if edittipo.Text <> '' then
        sqltipo:= sqltipo + ' and tipo=:ptipo';   dm.cdstipoVenda.Close;
  dm.cdstipoVenda.Params[0].AsDate:=strtodate(editini.Text);
  dm.cdstipoVenda.Params[1].AsDate:=strtodate(editfim.Text);      if edittipo.Text <> '' then
        dm.cdstipoVenda.Params[2].AsString:=(edittipo.Text);    dm.cdstipoVenda.CommandText:=sqltipo;
  dm.cdstipoVenda.Open;
end;   Espero ter ajudado! Caso não funcione poste aí para tentarmos resolver o problema!
AbraçoO
Responder

Gostei + 0

22/03/2010

Thiago Silva

Chará vê se isso aí resolve teu problema...
Vc se atrapalhou na ordem dos seus parametros! Vê esse lance da data aí pq a datainicial e a datafinal vc tá comparando com o mesmo campo! Vê se é realmente isso que vc quer! ( Só foi um toque)...   procedure Tprincipal.Button2Click(Sender: TObject); var
sqltipo:string;
begin
  sqltipo:='select funcionario, data, tipo, valor from VENDAS where data>=:pinicial and data<=:pfinal';
     if edittipo.Text <> '' then
        sqltipo:= sqltipo + ' and tipo=:ptipo';   dm.cdstipoVenda.Close;
  dm.cdstipoVenda.Params[0].AsDate:=strtodate(editini.Text);
  dm.cdstipoVenda.Params[1].AsDate:=strtodate(editfim.Text);      if edittipo.Text <> '' then
        dm.cdstipoVenda.Params[2].AsString:=(edittipo.Text);    dm.cdstipoVenda.CommandText:=sqltipo;
  dm.cdstipoVenda.Open;
end;   Espero ter ajudado! Caso não funcione poste aí para tentarmos resolver o problema!
AbraçoO
Responder

Gostei + 0

22/03/2010

Thiago Silva

 
Responder

Gostei + 0

22/03/2010

Thiago Silva

 
Responder

Gostei + 0

22/03/2010

Thiago Silva

Chará vê se isso aí resolve teu problema...
Vc se atrapalhou na ordem dos seus parametros! Vê esse lance da data aí pq a datainicial e a datafinal vc tá comparando com o mesmo campo! Vê se é realmente isso que vc quer! ( Só foi um toque)...   procedure Tprincipal.Button2Click(Sender: TObject); var
sqltipo:string;
begin
  sqltipo:='select funcionario, data, tipo, valor from VENDAS where data>=:pinicial and data<=:pfinal';
     if edittipo.Text <> '' then
        sqltipo:= sqltipo + ' and tipo=:ptipo';   dm.cdstipoVenda.Close;
  dm.cdstipoVenda.Params[0].AsDate:=strtodate(editini.Text);
  dm.cdstipoVenda.Params[1].AsDate:=strtodate(editfim.Text);      if edittipo.Text <> '' then
        dm.cdstipoVenda.Params[2].AsString:=(edittipo.Text);    dm.cdstipoVenda.CommandText:=sqltipo;
  dm.cdstipoVenda.Open;
end;   Espero ter ajudado! Caso não funcione poste aí para tentarmos resolver o problema!
AbraçoO
  rapaz fiz umas lambanças no post aki, gravo uns em branco...enfim   amigo em relação a data é isso msm, to comparando com o msm campo! o codigo apresentou outro erro   list index out of bounds(1).   o que poderia ser? obrigado pela ajuda
Responder

Gostei + 0

22/03/2010

Wilson Junior

Este erro ocorre quando você tenta acessar uma posição não existente em uma lista. Você possui todos os seus parâmetros cadastrados?

Espero ter colaborado.
Responder

Gostei + 0

22/03/2010

Emerson Nascimento

tente:

procedure Tprincipal.Button2Click(Sender: TObject);
var
  sqltipo:string;
begin
  sqltipo:='select funcionario, data, tipo, valor from VENDAS where data between :pinicial and :pfinal';
  if edittipo.Text <> '' then
      sqltipo:= sqltipo + ' and tipo='+QuotedStr(edittipo.Text);

  dm.cdstipoVenda.Close;
  dm.cdstipoVenda.CommandText:=sqltipo;
  dm.cdstipoVenda.Params[0].AsDate:=strtodate(editini.Text);
  dm.cdstipoVenda.Params[1].AsDate:=strtodate(editfim.Text);
  dm.cdstipoVenda.Open;
end;

note que só irá funcionar se o provider permitir alteração no commandtext.
Responder

Gostei + 0

22/03/2010

Thiago Silva

Este erro ocorre quando você tenta acessar uma posição não existente em uma lista. Você possui todos os seus parâmetros cadastrados?

Espero ter colaborado.
  o rapaz estão sim... axo q se nao tivessem o programa nao ia rodar, ou to errado?   mais ta tudo certinho em relação os parametros, as caixas de textos existem. teria outra solução ou uma dica?   grato
Responder

Gostei + 0

22/03/2010

Thiago Silva

tente:

procedure Tprincipal.Button2Click(Sender: TObject);
var
  sqltipo:string;
begin
  sqltipo:='select funcionario, data, tipo, valor from VENDAS where data between :pinicial and :pfinal';
  if edittipo.Text <> '' then
      sqltipo:= sqltipo + ' and tipo='+QuotedStr(edittipo.Text);

  dm.cdstipoVenda.Close;
  dm.cdstipoVenda.CommandText:=sqltipo;
  dm.cdstipoVenda.Params[0].AsDate:=strtodate(editini.Text);
  dm.cdstipoVenda.Params[1].AsDate:=strtodate(editfim.Text);
  dm.cdstipoVenda.Open;
end;

note que só irá funcionar se o provider permitir alteração no commandtext.
    aí funcionou cara, ficou joia....agora vou aplicar o codigo nos outros formulários que estavam dando o msm erro!   me explica uma coisa... q bizu é esse?   var
  sqltipo:string;
begin
  sqltipo:='select funcionario, data, tipo, valor from VENDAS where data between :pinicial and :pfinal';
  if edittipo.Text <> '' then       sqltipo:= sqltipo + ' and tipo='+QuotedStr(edittipo.Text);   dm.cdstipoVenda.Close;
  dm.cdstipoVenda.CommandText:=sqltipo;
  dm.cdstipoVenda.Params[0].AsDate:=strtodate(editini.Text);
  dm.cdstipoVenda.Params[1].AsDate:=strtodate(editfim.Text);
  dm.cdstipoVenda.Open;
end;   vlw abração!
Responder

Gostei + 0

22/03/2010

Marcelo Cavalcanti

Na unit SysUtils você encontra essa função. Veja código:   -- para cada caractere apóstrofo na seqüência, outra é adicionada   function QuotedStr(const S: string): string;
var
  I: Integer;
begin
  Result := S;
  for I := Length(Result) downto 1 do
    if Result[I] = '''' then Insert('''', Result, I);
  Result := '''' + Result + '''';
end;   Sds,   Marcelo Rezende Cavalcanti
--------------------------------------------------------------------
www.swg2.com.br (Transformando suas informações em dados gerenciais)
Responder

Gostei + 0

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

Aceitar