Modelo de pesquisa e duvidas sobre o componente datasetprovider
Ola amigos
nao video demo mostro uma ideia onde pretendo contruir um modelo de formulario de pesquisa onde pretendo passar o commandtext do clientdataset em tempo de execuçao
seria possivel ? acho que sim claro !
outra duvida e sobre o datasetprovider se eu setar o poallowcommandtext para true posso passar o sql direto na propriedade commandtext do clientdataset que alias e como eu faço aqui.mas seria correto isso ? o componente nao ficaria sobrecaregado demais se eu tivesse dezenas de clientdataset no projeto e todos apontando para o mesmo provider ?
[#VIDEO-153#]
[#VIDEO-153#]
Carlos Faria
Curtidas 0
Respostas
Carlos Faria
28/09/2009
Caiu no cara "Rodrigo carreiro" to de sorte hoje !
GOSTEI 0
Carlos Faria
28/09/2009
Ola Rodrigo
Esqueci de passar uma informaçaõ importante no banco sql a vw_cliente exemplo nao tem parametros ela retorna tudo mais sei que seu eu colocar no command text do clientdataset um paramento ele funciona.
Gostaria de cada opção de pesquiza passar um paramentro em tempo de execuçao
GOSTEI 0
Carlos Faria
28/09/2009
Ola Rodrigo
procedure TForm1.btnpesquisarClick(Sender: TObject);
begin case rg.ItemIndex of
0:
begin
with clientdataset do
begin
Close;
FetchParams ;
CommandText := 'select * from vw_cliente_2008 where TELEFONE like :pTELEFONE';
Params.ParamByName('pTELEFONE').AsString := edtbusca.Text;
clientdataset.FetchParams ;
Open ;
lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
end;
end;
1:
BEGIN
with clientdataset do
begin
Close;
FetchParams ;
CommandText := 'select * from vw_cliente_2008 where nome like :pnome';
Params.ParamByName('pnome').AsString := edtbusca.Text +'%';
Open ;
lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
end;
END;
2:
BEGIN
with clientdataset do
begin
Close;
FetchParams ;
CommandText := 'select * from vw_cliente_2008 where ENDERECO like :pENDERECO';
Params.ParamByName('pENDERECO').AsString := edtbusca.Text +'%';
Open ;
lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
end;
END;
3:
BEGIN
with clientdataset do
begin
Close;
FetchParams ;
CommandText := 'select * from vw_cliente_2008 where bairro like :pbairro';
Params.ParamByName('pbairro').AsString := edtbusca.Text +'%';
Open ;
lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
end;
END;
4:
BEGIN
with clientdataset do
begin
Close;
FetchParams ;
CommandText := 'select * from vw_cliente_2008 where nome like :pnome and bairro like :pbairro';
Params.ParamByName('pnome').AsString := edtbusca.Text +'%';
Params.ParamByName('pbairro').AsString:= lblbairro.Text +'%';
Open ;
lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
end;
END; end;
end; Acho que isso ai deve ser minha resposta ,falta apenas vc ver se esta ok dessa maneira e nao esquecer de me falar sobre o datasetprovider
begin case rg.ItemIndex of
0:
begin
with clientdataset do
begin
Close;
FetchParams ;
CommandText := 'select * from vw_cliente_2008 where TELEFONE like :pTELEFONE';
Params.ParamByName('pTELEFONE').AsString := edtbusca.Text;
clientdataset.FetchParams ;
Open ;
lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
end;
end;
1:
BEGIN
with clientdataset do
begin
Close;
FetchParams ;
CommandText := 'select * from vw_cliente_2008 where nome like :pnome';
Params.ParamByName('pnome').AsString := edtbusca.Text +'%';
Open ;
lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
end;
END;
2:
BEGIN
with clientdataset do
begin
Close;
FetchParams ;
CommandText := 'select * from vw_cliente_2008 where ENDERECO like :pENDERECO';
Params.ParamByName('pENDERECO').AsString := edtbusca.Text +'%';
Open ;
lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
end;
END;
3:
BEGIN
with clientdataset do
begin
Close;
FetchParams ;
CommandText := 'select * from vw_cliente_2008 where bairro like :pbairro';
Params.ParamByName('pbairro').AsString := edtbusca.Text +'%';
Open ;
lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
end;
END;
4:
BEGIN
with clientdataset do
begin
Close;
FetchParams ;
CommandText := 'select * from vw_cliente_2008 where nome like :pnome and bairro like :pbairro';
Params.ParamByName('pnome').AsString := edtbusca.Text +'%';
Params.ParamByName('pbairro').AsString:= lblbairro.Text +'%';
Open ;
lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
end;
END; end;
end; Acho que isso ai deve ser minha resposta ,falta apenas vc ver se esta ok dessa maneira e nao esquecer de me falar sobre o datasetprovider
GOSTEI 0
Rodrigo Mourão
28/09/2009
Olá Carlos desculpe a demora em responder o sistema de chamada nao esta me notificando por email quando um chamado e aberto pra mim, mas vamos lá.
Seu raciocio esta correto tem apenas uma pequenas mudancas de logica. Observe:
procedure TForm1.btnpesquisarClick(Sender: TObject);
begin case rg.ItemIndex of
0:
begin
with clientdataset do
begin
Close;
FetchParams ;
CommandText := 'select * from vw_cliente_2008 where TELEFONE like :pTELEFONE';
FetchParams
Params.ParamByName('pTELEFONE').AsString := edtbusca.Text;
clientdataset.FetchParams ;
Open ;
lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
end;
end;
1:
BEGIN
with clientdataset do
begin
Close;
FetchParams ;
CommandText := 'select * from vw_cliente_2008 where nome like :pnome';
FetchParams
Params.ParamByName('pnome').AsString := edtbusca.Text +'%';
Open ;
lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
end;
END;
2:
BEGIN
with clientdataset do
begin
Close;
FetchParams ;
CommandText := 'select * from vw_cliente_2008 where ENDERECO like :pENDERECO';
FetchParams
Params.ParamByName('pENDERECO').AsString := edtbusca.Text +'%';
Open ;
lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
end;
END;
3:
BEGIN
with clientdataset do
begin
Close;
FetchParams ;
CommandText := 'select * from vw_cliente_2008 where bairro like :pbairro';
FetchParams
Params.ParamByName('pbairro').AsString := edtbusca.Text +'%';
Open ;
lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
end;
END;
4:
BEGIN
with clientdataset do
begin
Close;
FetchParams ;
CommandText := 'select * from vw_cliente_2008 where nome like :pnome and bairro like :pbairro';
FetchParams
Params.ParamByName('pnome').AsString := edtbusca.Text +'%';
Params.ParamByName('pbairro').AsString:= lblbairro.Text +'%';
Open ;
lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
end;
END; end;
end;
Tire os codigos que eu risquei e acrescente os que estao em vermelho. Outra coisa pode ficar tranquilo que nao sobre carrega o datasetprovider nao pois esta é a ideia com clientedataset vc nao fica conectado direto. Os dados ficam off line por isso ele é tao bom e utilizado para grandes volumes de dados.
Abraços
Seu raciocio esta correto tem apenas uma pequenas mudancas de logica. Observe:
procedure TForm1.btnpesquisarClick(Sender: TObject);
begin case rg.ItemIndex of
0:
begin
with clientdataset do
begin
Close;
FetchParams ;
CommandText := 'select * from vw_cliente_2008 where TELEFONE like :pTELEFONE';
FetchParams
Params.ParamByName('pTELEFONE').AsString := edtbusca.Text;
clientdataset.FetchParams ;
Open ;
lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
end;
end;
1:
BEGIN
with clientdataset do
begin
Close;
FetchParams ;
CommandText := 'select * from vw_cliente_2008 where nome like :pnome';
FetchParams
Params.ParamByName('pnome').AsString := edtbusca.Text +'%';
Open ;
lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
end;
END;
2:
BEGIN
with clientdataset do
begin
Close;
FetchParams ;
CommandText := 'select * from vw_cliente_2008 where ENDERECO like :pENDERECO';
FetchParams
Params.ParamByName('pENDERECO').AsString := edtbusca.Text +'%';
Open ;
lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
end;
END;
3:
BEGIN
with clientdataset do
begin
Close;
FetchParams ;
CommandText := 'select * from vw_cliente_2008 where bairro like :pbairro';
FetchParams
Params.ParamByName('pbairro').AsString := edtbusca.Text +'%';
Open ;
lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
end;
END;
4:
BEGIN
with clientdataset do
begin
Close;
FetchParams ;
CommandText := 'select * from vw_cliente_2008 where nome like :pnome and bairro like :pbairro';
FetchParams
Params.ParamByName('pnome').AsString := edtbusca.Text +'%';
Params.ParamByName('pbairro').AsString:= lblbairro.Text +'%';
Open ;
lblTotal.Caption := IntToStr(ds.DataSet.RecordCount);
end;
END; end;
end;
Tire os codigos que eu risquei e acrescente os que estao em vermelho. Outra coisa pode ficar tranquilo que nao sobre carrega o datasetprovider nao pois esta é a ideia com clientedataset vc nao fica conectado direto. Os dados ficam off line por isso ele é tao bom e utilizado para grandes volumes de dados.
Abraços
GOSTEI 0
Carlos Faria
28/09/2009
Certo pode fechar o chamado
GOSTEI 0