Problamas com select
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?
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
Curtidas 0
Respostas
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..
Para chamar
se der algum erro de compilação , comunique porque eu fiz uma adapatação rápida no codigo que eu ja possuia...
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
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...
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
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
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