Erro (dbExpress Erro: Ivalide Field Type) na hora de consulta!

Delphi

25/08/2010

Boa tarde,

Caros amigos do DevMedia, estou com um problema na montagem de um relatário, estou montando uma consulta para mostrar os dads em um DBGrid, essa consulta é filtrada por data, eu coloca as datas para o filtro e na hora que eu clico no botão pesquisa dá o seguinte erro:

"dbExpress Erro: Ivalide Field Type"

Estou usando o Seguinte Componentes:

SQLConnection
SQLQuery
DataSetPrivider
ClientDataSet
DataSource

Estou usando banco oracle 10g

Segue o codigo do botão Pesquisar:

procedure TFormPrincipal.SpeedButton1Click(Sender: TObject);
begin
  if (StrToDate(Edit1.Text)<=StrToDate(Edit2.Text))then
begin
  SQLBeno.Close;
  SQLBeno.SQL.Clear;
  SQLBeno.SQL.Add('select CD_CLIENTE,CD_CARTAO,DT_BONUS,TP_OPERACAO,VL_BONUS,CD_EMPLIQ,DT_LIQ from UBENOLIEL.CTC_BONUS');
  SQLBeno.SQL.Add('WHERE DT_LIQ BETWEEN :D1 and :D2');
  SQLBeno.SQL.Add('ORDER BY DT_LIQ');
  SQLBeno.Params[0].AsDateTime := StrToDate(Edit1.Text);
  SQLBeno.Params[1].AsDateTime := StrToDate(Edit2.Text);
  SQLBeno.Open;
end;
end;

Se alguém poder me ajudar eu agradeço.

Eliézio Mesquita

Eliézio Mesquita

Eliézio Mesquita

Curtidas 0

Respostas

Eriley Barbosa

Eriley Barbosa

25/08/2010

O campo DT_LIQ guarda data e hora junto? Vamos fazer um teste para ver se não é os parametros, tente assim: procedure TFormPrincipal.SpeedButton1Click(Sender: TObject);
begin
  if (StrToDate(Edit1.Text)<=StrToDate(Edit2.Text))then
begin
  SQLBeno.Close;
  SQLBeno.SQL.Clear;
  SQLBeno.SQL.Add('select CD_CLIENTE,CD_CARTAO,DT_BONUS,TP_OPERACAO,VL_BONUS,CD_EMPLIQ,DT_LIQ from UBENOLIEL.CTC_BONUS');
  SQLBeno.SQL.Add('WHERE DT_LIQ BETWEEN ' + QuotedStr((Edit1.Text)) + ' and ' +  QuotedStr((Edit2.Text)));
  SQLBeno.SQL.Add(' ORDER BY DT_LIQ');
  //SQLBeno.Params[0].AsDateTime := StrToDate(Edit1.Text);
  //SQLBeno.Params[1].AsDateTime := StrToDate(Edit2.Text);
  SQLBeno.Open;
end;
end;
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

25/08/2010

Esqueci de tirar alguns parenteses
O campo DT_LIQ guarda data e hora junto? Vamos fazer um teste para ver se não é os parametros, tente assim: procedure TFormPrincipal.SpeedButton1Click(Sender: TObject);
begin
  if (StrToDate(Edit1.Text)<=StrToDate(Edit2.Text))then
begin
  SQLBeno.Close;
  SQLBeno.SQL.Clear;
  SQLBeno.SQL.Add('select CD_CLIENTE,CD_CARTAO,DT_BONUS,TP_OPERACAO,VL_BONUS,CD_EMPLIQ,DT_LIQ from UBENOLIEL.CTC_BONUS');
  SQLBeno.SQL.Add('WHERE DT_LIQ BETWEEN ' + QuotedStr(Edit1.Text) + ' and ' +  QuotedStr(Edit2.Text));
  SQLBeno.SQL.Add(' ORDER BY DT_LIQ');
  //SQLBeno.Params[0].AsDateTime := StrToDate(Edit1.Text);
  //SQLBeno.Params[1].AsDateTime := StrToDate(Edit2.Text);
  SQLBeno.Open;
end;
end;
GOSTEI 0
Eliézio Mesquita

Eliézio Mesquita

25/08/2010

Só data, a parte de hora fica tudo zerado, eu ja fiz a mudança conforme sua indicação, mas ai está dando o seguinte erro "LIST INDEX OUT OF BOUNDS (0)"


GOSTEI 0
Eriley Barbosa

Eriley Barbosa

25/08/2010

O campo é só data, tente assim: procedure TFormPrincipal.SpeedButton1Click(Sender: TObject);
begin
  if (StrToDate(Edit1.Text)<=StrToDate(Edit2.Text))then
begin
  SQLBeno.Close;
  SQLBeno.SQL.Clear;
  SQLBeno.SQL.Add('select CD_CLIENTE,CD_CARTAO,DT_BONUS,TP_OPERACAO,VL_BONUS,CD_EMPLIQ,DT_LIQ from UBENOLIEL.CTC_BONUS');
  SQLBeno.SQL.Add('WHERE DT_LIQ BETWEEN :D1 and :D2');
  SQLBeno.SQL.Add('ORDER BY DT_LIQ');
  SQLBeno.Params[0].AsDate := StrToDate(Edit1.Text);
  SQLBeno.Params[1].AsDate := StrToDate(Edit2.Text);
  SQLBeno.Open;
end;
end;

GOSTEI 0
Eliézio Mesquita

Eliézio Mesquita

25/08/2010

Foi feito esse código ai e deu não dá erro, mas não está dando nada!


  SQLBeno.Close;
  SQLBeno.SQL.Clear;
  SQLBeno.SQL.Add('select CD_CLIENTE,CD_CARTAO,DT_BONUS,TP_OPERACAO,VL_BONUS,CD_EMPLIQ,DT_LIQ from UBENOLIEL.CTC_BONUS');
  SQLBeno.SQL.Add('WHERE DT_LIQ BETWEEN ' + QuotedStr((Edit1.Text)) + ' and ' +  QuotedStr((Edit2.Text)));
  SQLBeno.SQL.Add('ORDER BY DT_LIQ');
  //SQLBeno.Params[0].AsDateTime := StrToDate(Edit1.Text);
  //SQLBeno.Params[1].AsDateTime := StrToDate(Edit2.Text);
  SQLBeno.Open;


GOSTEI 0
Eriley Barbosa

Eriley Barbosa

25/08/2010

SQLBeno.Close;
  SQLBeno.SQL.Clear;
  SQLBeno.SQL.Add('select CD_CLIENTE,CD_CARTAO,DT_BONUS,TP_OPERACAO,VL_BONUS,CD_EMPLIQ,DT_LIQ from UBENOLIEL.CTC_BONUS');
  SQLBeno.SQL.Add('WHERE DT_LIQ BETWEEN ' + QuotedStr((Edit1.Text)) + ' and ' +  QuotedStr((Edit2.Text)));
  SQLBeno.SQL.Add('ORDER BY DT_LIQ');   ShowMessage(SQLBeno.SQL.Text);
  //SQLBeno.Params[0].AsDateTime := StrToDate(Edit1.Text);
  //SQLBeno.Params[1].AsDateTime := StrToDate(Edit2.Text);
  SQLBeno.Open;   Ao aparecer o SQL na tela tecle ctrl + C e cole no oracle, retire as sujeiras e execute, veja se retorna algum registro.
GOSTEI 0
Eliézio Mesquita

Eliézio Mesquita

25/08/2010

Sim, o sql mostra está retornando no Oracle norlmante.

O que será que pode ser agora?


GOSTEI 0
Eriley Barbosa

Eriley Barbosa

25/08/2010

Na estrutura abaixo, esta tudo certo? SQLQuery
DataSetPrivider
ClientDataSet
DataSource
Você está abrindo o clientDataset?
GOSTEI 0
Eliézio Mesquita

Eliézio Mesquita

25/08/2010

Meu querido, eu quero agradecer muito, olha o meu vacilo, estava esquecendo de abrir o client para pode mostrar no grid.


Obrigado.
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

25/08/2010

Amigo quando for para Lookup ou só para consulta utilize um SimpleDataset, presente no Delphi 7 para cima.   Veja como utilizar neste tópico:   https://www.devmedia.com.br/forum/viewtopic.asp?id=384348
GOSTEI 0
Eliézio Mesquita

Eliézio Mesquita

25/08/2010

Estou coloando esse AND ai, quero trazer somento onde TP_Operação for igual a C, o que está errado ai?


 SQLBeno.Close;
  SQLBeno.SQL.Clear;
  SQLBeno.SQL.Add('select CD_CLIENTE,CD_CARTAO,DT_BONUS,TP_OPERACAO,VL_BONUS,CD_EMPLIQ,DT_LIQ from UBENOLIEL.CTC_BONUS');
  SQLBeno.SQL.Add('WHERE DT_LIQ BETWEEN ' + QuotedStr((Edit1.Text)) + ' and ' +  QuotedStr((Edit2.Text)));
  SQLBeno.SQL.Add('and TP_OPERACAO = 'C'');
  SQLBeno.SQL.Add('ORDER BY DT_LIQ ');
  ShowMessage(SQLBeno.SQL.Text);
   SQLBeno.Open;
  ClientBeno.Active := True;

Obrigado
GOSTEI 0
Junior Miranda

Junior Miranda

25/08/2010

Tenta Assim:

 SQLBeno.SQL.Add(' AND TP_OPERACAO = ' + QuotedStr('C'));


[]'s
GOSTEI 0
Eliézio Mesquita

Eliézio Mesquita

25/08/2010

Júnior é exatemente isso, já deu tudo certo, agradeços vocês pela ajuda.

Obrigado e forte abraço.


GOSTEI 0
POSTAR