Fórum RENOMEAR ITENS DE UM COMBOBOX COM ATRIBUTOS DE UMA TABELA #477313
27/04/2014
0
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
Curtir tópico
+ 0Posts
12/05/2014
Felippe Tadeu
Gostei + 0
12/05/2014
Fabio
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;
Gostei + 0
12/05/2014
Felippe Tadeu
TADOQuery, TClienteDataSet ?
Gostei + 0
12/05/2014
Fabio
entendeu como funciona?
Gostei + 0
12/05/2014
Felippe Tadeu
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
Gostei + 0
13/05/2014
Fabio
nessa funcao aqui
+IntToStr(CodigoProduto);??
Gostei + 0
13/05/2014
Fabio
nao possui nem um dbedit ou edit que armazene o codigo do produto pois estao todos com generator...
Gostei + 0
13/05/2014
Felippe Tadeu
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.
Gostei + 0
13/05/2014
Wilton Júnior
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;
Gostei + 0
13/05/2014
Fabio
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;
Gostei + 0
13/05/2014
Fabio
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;
Gostei + 0
13/05/2014
Wilton Júnior
Gostei + 0
13/05/2014
Fabio
Gostei + 0
13/05/2014
Felippe Tadeu
Ele não entra no if do RecordCount ?
Gostei + 0
13/05/2014
Wilton Júnior
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)