Fórum RENOMEAR ITENS DE UM COMBOBOX COM ATRIBUTOS DE UMA TABELA #477313

27/04/2014

0

Pessoal estou com um probleminha fiz uma pesquisa baseado nos atributos das minhas tabelas de modo que meu combobox fique assim por exemmplo se a tabela for a de cliente
os itens do combobox vao ficar assim
ID_CLIENTE
NOME
ENDERECO
CIDADE
de acordo com os atributos que tem na minha tabela porem eu quero renomea-los para que fique mais bonito e elegante desse jeito
Cód. Cliente
Nome
Endereço
Cidade
a funcao para levar os atributos ao combobox foram essas
no evento formshow: (lembrando que esse é meu form modelo pois fiz os outros com herança dele)
procedure TF_Modelo.FormShow(Sender: TObject);
var I: integer;
begin

for I := 0 to DtsConsulta.DataSet.FieldCount - 1 do
begin
if DtsConsulta.DataSet.Fields[I].DataType in [ftString, ftWideString, ftInteger, ftFixedChar] then
cbCampo.Items.Add(DtsConsulta.DataSet.Fields[I].FieldName);

e no onclick do botao foi essa (lembrando que esse é meu form modelo pois fiz os outros com herança dele)
if rbcontem.Checked then
_pesquisa := cbCampo.Text + ' Like ' + QuotedStr('%' + edtPesquisar.Text + '%' )
else if rbComeca.Checked then
_pesquisa := cbCampo.Text + ' Like ' + QuotedStr( edtPesquisar.Text + '%' );

with TClientDataSet (dtsconsulta.DataSet) do
begin
close;
CommandText:= _txt + _pesquisa;
open;
end;
QUEM PUDER ME AJUDAR EU AGRADEÇO
ABRAÇO
Fabio

Fabio

Responder

Posts

12/05/2014

Felippe Tadeu

Sobre o nome, você poderá estar alterando a propriedade Display Name de cada field do componente que representa o DataSet.
Responder

Gostei + 0

12/05/2014

Fabio

Cara isso eu ja resolvi mudando o display label dele, e mandando pega-lo em vez do fieldName
agora estou com outro problema :
se o Produto Cadastrado ja Teve Algum movimento (entrada, Saida, Venda) e o sistema tem que proibir a exclusão só que nao qual metodo usar para fazer isso, porque eu tenho a tabela MOVIMENTOS dae queria saber a formula que eu poderia fazer essa validacao se puder me ajudar eu agradeço;
Responder

Gostei + 0

12/05/2014

Felippe Tadeu

Quais componentes de conexão você usa ?
TADOQuery, TClienteDataSet ?
Responder

Gostei + 0

12/05/2014

Fabio

eu uso ClientDataSet ligado a um provider que é ligado a um SQLdataset que é ligado a um SqlConection
entendeu como funciona?
Responder

Gostei + 0

12/05/2014

Felippe Tadeu

Boa noite.

Bem cara, existem várias maneiras de se fazer isso.

Uma delas seria vc salvar o código do produto e fazer um filtro no ClientDataSet de movimentação ou a que contenha o código do produto, como por exemplo no evento de clicar no botão de excluir:
procedure Form1.btnExcluiOnClick(Sender: TObject);
begin
  DataSource.DataSet.Filtered := False;
  DataSource.DataSet.Filter := 'ID_PRODUTO = '+IntToStr(CodigoProduto);
  DataSource.DataSet.Filtered := True;
  if (DataSource.DataSet.RecordCount > 0) then
  begin
    ShowMessage('Existe movimentação para esse produto, por isso não poderá ser excluído');
    Abort;
  end;
end;


Obs: Vc pode ao invés de colocar DataSource vc pode colocar o name do DataModule concatenado com "." e concatenado com o name do ClientDataSet
Responder

Gostei + 0

13/05/2014

Fabio

ola amigo o que seria o códigodoProduto?
nessa funcao aqui
+IntToStr(CodigoProduto);??
Responder

Gostei + 0

13/05/2014

Fabio

para facilitar minha tela de cadastro é assim ...[img]http://arquivo.devmedia.com.br/forum/imagem/368071-20140513-002314.jpg[/img]
nao possui nem um dbedit ou edit que armazene o codigo do produto pois estao todos com generator...
Responder

Gostei + 0

13/05/2014

Felippe Tadeu

Bom dia.

Amigo, quando acontece do usuário clicar 1 ou 2 vezes num registro da TDBGrid, o TDataSet referente a TDBGrid também será setado ou seja, vc terá a sua disposição o código do produto que o usuário escolheu.

Então existe algumas formas de vc fazer isso.

No ClientDataSet da Grid, veja qual é a posição do campo do código do produto. (comece a contar do 0).
Depois que vc achar a posição vá no evento OnClick do botão excluir ou no evento que será programado para excluir o produto e siga a seguinte lógica:

procedure Form1.excluiProdutos;
begin
  dm.ClientDataSetMovimentacao.Filtered := False;
  dm.ClientDataSetMovimentacao.Filter := 'CODIGOPRODUTO = '+ClientDataSetDaGrid.Fields[posicao].AsString;
  dm.ClientDataSetMovimentacao.Filtered := True;
  if (dm.ClientDataSetMovimentacao.RecordCount > 0) then
  begin
     ShowMessage('Produto com movimentação');
     Abort;
  end
  else
  begin
    // Aqui vc implementa a exclusão do produto conforme desejar
  end;
end;


Observações:
1 A variável posição é do Tipo Inteiro e é referente a posição do código do Produto que está no ClientDataSet ligado a Grid.
2 ClientDataSetMovimentacao deverá ser ter o código do produto para que o filtro funcione.
Responder

Gostei + 0

13/05/2014

Wilton Júnior

procedure Form1.excluiProdutos;
begin
dm.ClientDataSetMovimentacao.Filtered := False;
dm.ClientDataSetMovimentacao.Filter := 'CODIGOPRODUTO = '+ClientDataSetDaGrid.Fields[posicao].AsString;
dm.ClientDataSetMovimentacao.Filtered := True;
if (dm.ClientDataSetMovimentacao.RecordCount > 0) then
begin
ShowMessage('Produto com movimentação');
Abort;
end
else
begin
// Aqui vc implementa a exclusão do produto conforme desejar
end;
end;

Tenta assim vê o que da:


procedure Form1.excluiProdutos;
begin
if dm.ClientDataSetMovimentacao.locate('CODIGOPRODUTO';ClientDataSetDaGrid.Fields[posicao].AsString;[]) then
begin
ShowMessage('Produto com movimentação');
Abort;
exit;
end;
end;
Responder

Gostei + 0

13/05/2014

Fabio

para facilitar minha tela de cadastro é assim ...[img]http://arquivo.devmedia.com.br/forum/imagem/368071-20140513-002314.jpg[/img]
nao possui nem um dbedit ou edit que armazene o codigo do produto pois estao todos com generator...


NO POSICAO COLOQUEI 0 QUE E ONDE ESTA MEU ID_PRODUTO POREM QUANDO CLICQUEI NO BOTAO NADA ACONTECEU SO EXECUTO O COMANDO DEBAIXO QUE EU IMPLANTEI

procedure TF_Produto.btnExcluirClick(Sender: TObject);
begin
inherited;
dm.cds_movi.Open;
dm.cds_movi.Filtered := False;
dm.cds_movi.Filter := 'ID_PRODUTO = '+DMPesq.cds_PesqProduto.Fields[0].AsString;
dm.cds_movi.Filtered := True;
if (dm.Cds_movi.RecordCount > 0) then
begin
ShowMessage('Produto com movimentação');
Abort;
end
else
begin
if MessageDlg('Deseja mesmo excluir este registro?',mtInformation, [mbYes, mbNo],0) = mrYes then
begin

if not DtsConsulta.DataSet.IsEmpty then //Verifica se nao esta vazio
begin
DtsConsulta.DataSet.Delete;
if dtsConsulta.DataSet is TClientDataSet then //compara se dtsconsulta e da classe Tclientdataset
TClientDataSet (dtsconsulta.DataSet).ApplyUpdates(0);// se for da o applyupdt
ShowMessage('Exclusão realizada com Exito');
end;
Leitura('L');
end;
end;
Responder

Gostei + 0

13/05/2014

Fabio

Bom dia.

Amigo, quando acontece do usuário clicar 1 ou 2 vezes num registro da TDBGrid, o TDataSet referente a TDBGrid também será setado ou seja, vc terá a sua disposição o código do produto que o usuário escolheu.

Então existe algumas formas de vc fazer isso.

No ClientDataSet da Grid, veja qual é a posição do campo do código do produto. (comece a contar do 0).
Depois que vc achar a posição vá no evento OnClick do botão excluir ou no evento que será programado para excluir o produto e siga a seguinte lógica:

procedure Form1.excluiProdutos;
begin
  dm.ClientDataSetMovimentacao.Filtered := False;
  dm.ClientDataSetMovimentacao.Filter := 'CODIGOPRODUTO = '+ClientDataSetDaGrid.Fields[posicao].AsString;
  dm.ClientDataSetMovimentacao.Filtered := True;
  if (dm.ClientDataSetMovimentacao.RecordCount > 0) then
  begin
     ShowMessage('Produto com movimentação');
     Abort;
  end
  else
  begin
    // Aqui vc implementa a exclusão do produto conforme desejar
  end;
end;


Observações:
1 A variável posição é do Tipo Inteiro e é referente a posição do código do Produto que está no ClientDataSet ligado a Grid.
2 ClientDataSetMovimentacao deverá ser ter o código do produto para que o filtro funcione.


NO POSICAO COLOQUEI 0 QUE E ONDE ESTA MEU ID_PRODUTO POREM QUANDO CLICQUEI NO BOTAO NADA ACONTECEU SO EXECUTO O COMANDO DEBAIXO QUE EU IMPLANTEI

procedure TF_Produto.btnExcluirClick(Sender: TObject);
begin
inherited;
dm.cds_movi.Open;
dm.cds_movi.Filtered := False;
dm.cds_movi.Filter := 'ID_PRODUTO = '+DMPesq.cds_PesqProduto.Fields[0].AsString;
dm.cds_movi.Filtered := True;
if (dm.Cds_movi.RecordCount > 0) then
begin
ShowMessage('Produto com movimentação');
Abort;
end
else
begin
if MessageDlg('Deseja mesmo excluir este registro?',mtInformation, [mbYes, mbNo],0) = mrYes then
begin

if not DtsConsulta.DataSet.IsEmpty then //Verifica se nao esta vazio
begin
DtsConsulta.DataSet.Delete;
if dtsConsulta.DataSet is TClientDataSet then //compara se dtsconsulta e da classe Tclientdataset
TClientDataSet (dtsconsulta.DataSet).ApplyUpdates(0);// se for da o applyupdt
ShowMessage('Exclusão realizada com Exito');
end;
Leitura('L');
end;
end;
Responder

Gostei + 0

13/05/2014

Wilton Júnior

Por acaso esse seu clientdataset esta ligado a um datasetprovider e ligado numa query que ser for a forma que vc tah fazendo é só par ater dor de cabeça.
Responder

Gostei + 0

13/05/2014

Fabio

nao ta ligado a um provider que é ligado a um sqldataset
Responder

Gostei + 0

13/05/2014

Felippe Tadeu

Quando vc debuga, passa por onde ?

Ele não entra no if do RecordCount ?
Responder

Gostei + 0

13/05/2014

Wilton Júnior

O problema é esse Colega vc ta fazendo o client filtrar informação sendo que não a necessidade, chega em um tabela virtual se existe movimento de estoque ou não se existe vc executa outras operações.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar