Problamas com select

Delphi

15/07/2006

Prezados Colegas,

Estou desenvolvendo uma aplicação com Delphi 7, DBExpress e com o banco firebird, estou com problemas para pesquisar os registros no banco. Meu botão p/consulta está assim:

procedure TFrmPesquisa.SpeedButton1Click(Sender: TObject);
var
vDataIni,
vDataFim : string;
begin
vDataIni := FormatDateTime(´mm/dd/yyyy´, DateTimePicker1.Date);
vDataFim := FormatDateTime(´mm/dd/yyyy´, DateTimePicker2.Date);

DmPesquisa.cdsPesquisa.Close;
DmPesquisa.cdsPesquisa.CommandText :=
´select c.cli_codigo, c.cli_nome, v.cli_codigo, v.vis_data, v.vis_hora´ +
´from cliente c, visita v where c.cli_nome = ´ + Edit1.Text +
´and v.vis_data between ´+ vDataIni + ´and´ + vDataFim +
´and c.cli_codigo = v.cli_codigo´;
DmPesquisa.cdsPesquisa.Open;
end;

Só q na hora em q mando pesquisar ocorre o seguinte erro:
Token unknown -line 1, char 83 c.

O q pode está errado?


Fabiano_aprendiz

Fabiano_aprendiz

Curtidas 0

Respostas

Marco Salles

Marco Salles

15/07/2006

usa um filtro que é muito mais fácil e pratico , ja que o cds tem a praticidade de trabalhar na memoria , sem sobrecarregar o Banco de dados

Exemplo , como eu faço..

procedure PesquisarEntreDatasAll(cds:TClientDataSet;vDataIni,vDataFim:String);
begin
cds.Filter:=´´;
cds.Filtered:=False;
cds.Filter:=´( Data_Recebimento >= ´+QuotedStr(vDataIni)+
                       ´)And(Data_Recebimento <= ´+QuotedStr(vDataFim)+´)´;
cds.Filtered:=True;
end;

Para chamar

var 
vDataIni, 
vDataFim : string; 
begin 
vDataIni := FormatDateTime(´mm/dd/yyyy´, DateTimePicker1.Date); 
vDataFim := FormatDateTime(´mm/dd/yyyy´, DateTimePicker2.Date); 
PesquisarEntreDatasAll(cdsPesquisa,vDataIni, vDataFim );


se der algum erro de compilação , comunique porque eu fiz uma adapatação rápida no codigo que eu ja possuia...


GOSTEI 0
Fabiano_aprendiz

Fabiano_aprendiz

15/07/2006

Prezados,
Dessa forma aki funcionou:
procedure TFrmPesquisa.SpeedButton1Click(Sender: TObject);
var
vDataIni,
vDataFim : string;
begin
vDataIni := Quotedstr(FormatDateTime(´dd.mm.yyyy´, DateTimePicker1.Date));
vDataFim := Quotedstr(FormatDateTime(´dd.mm.yyyy´, DateTimePicker2.Date));

DmPesquisa.cdsPesquisa.Close;
DmPesquisa.cdsPesquisa.CommandText :=
´select c.cli_codigo, c.cli_nome, v.cli_codigo, v.vis_data, v.vis_hora ´ +
´from cliente c, visita v where c.cli_nome = ´ +Quotedstr(Edit1.Text) +
´ and v.vis_data between´+ vDataIni + ´ and ´ + vDataFim +
´ and c.cli_codigo = v.cli_codigo´;
DmPesquisa.cdsPesquisa.Open;

If DmPesquisa.cdsPesquisa.RecordCount = 0 Then
Begin
ShowMessage(´Nenhum registro foi localizado!´);
Edit1.SetFocus;
End;
end;

O problema agora é q o DBGrig retorna vazio, ou seja, se eu colocar dados q realmente não existam no banco, ocorre a mensagem ´Nenhum registro foi localizado!, agora qdo pesquiso por um registro q realmente existe, a linha do DBGrid vem vazia, mas se eu selecionar a linha e confirmar, a aplicação vai p/o Form principal com os todos os dados corretos. Não sei se tem alguma
ligação, mas tbm ocorre q eu não consigo incluir no DBGrig as colunas
da tabela que eu desejo. Quando insiro uma coluna no DBGrid e tento
editar o campo FieldName, ocorre o seguinte erro: Missing query, table name
or procedure name.
Desculpem a amolação, mas é q essa é a primeira aplicação q estou desenvolvendo usando Delphi 7+DBExpress+Firebird...


GOSTEI 0
Micheus

Micheus

15/07/2006

ocorre o seguinte erro: Missing query, table name or procedure name.
Não sei se tem alguma relação, mas ainda falta um espaço no texto de sua query:
... and v.vis_data between´+ vDataIni + ´ and ´ + vDataFim + ...
depois do between (antes do + vDataIni)

a linha do DBGrid vem vazia, mas se eu selecionar a linha e confirmar, a aplicação vai p/o Form principal com os todos os dados corretos.
Por acaso vc está utilizando um dos eventos OnDrawDataCell ou OnDrawColumnCell?


GOSTEI 0
Marco Salles

Marco Salles

15/07/2006

usa um filtro que é muito mais fácil e pratico , ja que o cds tem a praticidade de trabalhar na memoria , sem sobrecarregar o Banco de dados


´Estas instruções SQL não são executadas no Dataset do ClientDataSet, porque o component CLientDataSet em si não interpreta uma instrução SQL... quando vc seta a propriedade do DataSetProvider poAllowCommandText para true vc ta dizendo que a instrução SQL a ser enviada para o banco será passada no clientdataset e não no component SQLDataSet, no caso de estar usando o DBEXpress.... ´

É claro que não desmereço o fato de voce tentar fazer uma consulta usando o comandText do ClientDataset. Muitas das vezes é questão de Honra. Mas na prática use o filtro do Cds


GOSTEI 0
POSTAR