Erro (dbExpress Erro: Ivalide Field Type) na hora de consulta!
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
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
Curtidas 0
Respostas
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;
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
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;
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
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
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;
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
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;
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
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.
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
25/08/2010
Sim, o sql mostra está retornando no Oracle norlmante.
O que será que pode ser agora?
O que será que pode ser agora?
GOSTEI 0
Eriley Barbosa
25/08/2010
Na estrutura abaixo, esta tudo certo?
SQLQuery
DataSetPrivider
ClientDataSet
DataSource
Você está abrindo o clientDataset?
DataSetPrivider
ClientDataSet
DataSource
Você está abrindo o clientDataset?
GOSTEI 0
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.
Obrigado.
GOSTEI 0
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
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
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
25/08/2010
Tenta Assim:
[]'s
SQLBeno.SQL.Add(' AND TP_OPERACAO = ' + QuotedStr('C'));
[]'s
GOSTEI 0
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.
Obrigado e forte abraço.
GOSTEI 0