Editar cadastro

Delphi

01/03/2010

Boa tarde pessoal.
Seguinte, quero dar uma melhorada no meu campo de localizar cadastrado, fazendo com que ao ser localizado, dê para visualizar E ter a possibilidade de editar um determinado formulário de cadastro.
Exemplo:
José está cadastrado, ativo no sistema, porém o mesmo quer se desligar do sistema de associação, e seu formulário precisa ser editado.
Localizo no grid, e ao dar duplo clique, o formulário do mesmo aparece na tela, com a opção de editar e gravar...
 
Porém, meu localizar só funciona para visualização de localizados, por nome , setor e função.
Alguém me ajuda nessa parte? 
 
Obrigada desde já.
Laura
Laura Queiroz

Laura Queiroz

Curtidas 0

Respostas

Junior Miranda

Junior Miranda

01/03/2010

Como é que vc carrega um registro em específico para o cadastro de cliente hoje?
Ou seja, estando vc no cadastro de clientes, como vc faz para carregar a cliente Laura Serafim?

Suas consultas possuem parâmetro ou vc carrega todos os registro e apenas "navega" entre eles?

Quais componentes de acesso a dados vc utiliza?


[]'s
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

    Estando no cadastro de clientes, se eu quero procurar um determinado nome, eu clico no botão editar, e ele redireciona à essa tela de busca. Ele só procura pelo nome do funcionário. No momento que dá o ok, aparece todos os encontrados, e só dá pra visualizar. eu quero que dê para ao clicar duas vezes em um dos encontrados, apareça o cadastro do mesmo para ser editado. Pq no momento em que eu clico em editar, no formulário de cadastro mesmo, aparece o primeiro cadastro que precisa ser completado, dificultando a procura por um específico, o que pro meu cliente seria melhor.     Laura

GOSTEI 0
Wilson Junior

Wilson Junior

01/03/2010

Carregue o seu ClientDataset de Funcionários filtrando apenas pelo registro selecionado na pesquisa, sendo assim, você chama a sua manutenção que irá utilizar este ClientDataSet filtrado.

Espero ter colaborado.
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Não entendi o que vc quis dizer, Wilson.     Mas assim, eu carrego normalzinho meus encontrados..porém, não dá pra,digamos, 'interagir' com ele, pq ele só procura, e deixa carregado o nome, código, função, setor e se está ativo ou não no cadastro. Eu quero que, ao encontrar o funcionário, dê pra clicar em cima do nome dele, e ter uma visualização COMPLETA do cadastro,pra que dê pra editar.
GOSTEI 0
Wilson Junior

Wilson Junior

01/03/2010

O mesmo ClientDataSet que você utiliza para editar os registros você está utilizando para pesquisar?
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Não, são DataSet s diferentes..
GOSTEI 0
Thiago Santana

Thiago Santana

01/03/2010

Laura tente o seguinte na tela em que vc faz a consulta, no evento OnDblClick do DbGrid insira o seguinte código:  FormdeEdiçãodeCadastro.Show   NomedaTabelaresponsávelpelocadastro.Edit;   No evento Onkeydonw da dbgrid inclua o seguinte código:   if (key = vk_return) then begin
      NomedaTabelaresponsávelpelocadastro.Edit;   E vc irá ligar o mesmo dataset ou clientDataset de Pesquisa a tabela de Edição! Assim quando vc clicar 2 vezes sobre a DbGrid depois da consulta a sua tela de edição já irá vim com os dados da sua consulta. Lembrando utilize a mesma tabela ou query de consulta para efetuar a edição. Qualquer dúvida poste aí! AbraçoO 
GOSTEI 0
Wilson Junior

Wilson Junior

01/03/2010

Então Laura, você tem um ClientDataSet com o índice do registro que você deseja editar (vamos camhar de cdsPesquisa).
Agora você deve abrir o seu ClientDataSet que será editado o registro (vamos chamar de cdsEditavel), filtrando com o índice do regsitro selecionado no cdsPesquisa.
Sendo assim você terá dois ClientDataSet abertos, mas um para a sua pesquisa e outro para a sua edição dos registros.

Espero que tenha entendido...rsrs

Qualquer coisa pergunte.
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Thiago.. no "FormdeEdiçãodeCadastro.Show   NomedaTabelaresponsávelpelocadastro.Edit;"   esse form de edição de cadastro, é outro formulário, ou o formulário de cadastro mesmo??
GOSTEI 0
Thiago Santana

Thiago Santana

01/03/2010

Laura deste jeito que te passei será em um outro formulário! Mas caso vc queria modificar no mesmo formulário diz aí ki podemos te ajudar! Quando mim refiro a "FormdeEdiçãodeCadastro.Show o FormdeEdiçãodeCadastro será um formulário em que vc poderá alterar que pode até ser o formulário que vc utilizou para fazer o cadastro.    E o NomedaTabelaresponsávelpelocadastro é a tabela que está ligada a tela de cadastro! Qualquer dúvida diz aí! 
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

thiago, sim, quero modificar direto na tela de cadastro.. sei lá, parece ser mais fácil hahahaha coloquei lá o formulário de cadastro, e ele aparece, porém, como vou carregar junto as informações cadastradas?? Oo     Wilson, perdão, não te entendi novamente! (hoje estou bem lerdinha pra entender as coisas, incrível hahahaha)  
GOSTEI 0
Thiago Santana

Thiago Santana

01/03/2010

Laura fiz um exemplo bem básico para que vc consiga desenvolver aí na tua aplicação! Vamos lá criei dois formulário um de pesquisa e um de cadastro. No formulario de pesquisa eu incluir um memo um edit um botão, uma query o componente de conexão e o datasource. Fiz a conexão normalmente e liguei o datasource a minha tabela Tb_teste que estou utilizando como exemplo. No evento onclick do botão inclua o seguinte código: TabelaPesquisa.SQL.Clear;
TabelaPesquisa.SQL.Add('Select * from Tb_Teste where Nome = ' + QuotedStr (Edit1.Text ));
TabelaPesquisa.Open;
No evento ondblClick da DbGrid inclua o seguinte código:   Form2.show; // Form2 é o forme referente a editar a sua tabela nele eu inserir os DBedits referentes aos campos da tabela.
  TabelaPesquisa.Edit;   No form2 incluir os campos de edição da tabela os "Fields" da TabelaPesquisa e um botão. No evento onclick do botão incluir o seguinte código: Form1.TabelaPesquisa.Post;
Form1.TabelaPesquisa.IB_Transaction.CommitRetaining;   Assim vc conseguirá fazer a edição do registro pesquisado! Espero que possa ter te ajudado! Caso não consiga, mim add no msn que a noite estarei online e poderei te ajudar melhor... Thiagodarley@hotmail.com
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

01/03/2010

Não olhei a sua tela de cadastro, mas creio q se vc utilizasse o mesmo dataset ficaria mais fácil, pq ao localizar o registro em sua tela de pesquisa, este estaria disponível para edição normal, sendo que vc poderia ter um tbutton (localizar) e deixar editar para realmente fazer a edição do registro, mas como disse antes, não olhei sua tela de cadastro. Talvez eu não tenha entendido direito o que vc quer fazer.   Boa sorte.
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Boa tarde pessoal. Upei parte do sisteminha, pra vocês verem como foi feito.   http://uploaddearquivos.com.br/download/delphi-Laura.zip   Não to sabendo 'puxar' os dados do associado que eu busquei.   Laura.
GOSTEI 0
Thiago Santana

Thiago Santana

01/03/2010

A noite darei uma olhada em seu sistema Laura! Caso eu resolva teu probleminha colocarei ele para download novamente! Até mais...
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Muitíssimo obrigada, thiago   Mas se vc resolvê-lo, me fale como é pra ser feito, pra eu ir fazendo também, independente de vc upar ^^     Agradeço à atenção de vocês, meninos.   Laura
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

01/03/2010

Baixei seu arquivo e vou dar uma olhada nele. Qualquer coisa, posto o arquivo ou envio por e-mail. Boa sorte e bons códigos.
GOSTEI 0
Thiago Santana

Thiago Santana

01/03/2010

Laura vc seguiu o exemplo que te passei em um post anterior onde fui informando passo a passo? Esse que segue abaixo:
No formulario de pesquisa eu incluir um memo um edit um botão, uma query o componente de conexão e o datasource.
Fiz a conexão normalmente e liguei o datasource a minha tabela Tb_teste que estou utilizando como exemplo. No evento onclick do botão inclua o seguinte código:
TabelaPesquisa.SQL.Clear;
TabelaPesquisa.SQL.Add('Select * from Tb_Teste where Nome = ' + QuotedStr (Edit1.Text ));
TabelaPesquisa.Open; No evento ondblClick da DbGrid inclua o seguinte código:
  Form2.show; // Form2 é o forme referente a editar a sua tabela nele eu inserir os DBedits referentes aos campos da tabela.
 TabelaPesquisa.Edit;
 
No form2 incluir os campos de edição da tabela os "Fields" da TabelaPesquisa e um botão.
No evento onclick do botão incluir o seguinte código:
Form1.TabelaPesquisa.Post;
Form1.TabelaPesquisa.IB_Transaction.CommitRetaining;
 
Assim vc conseguirá fazer a edição do registro pesquisado!
Espero que possa ter te ajudado!
Caso não consiga a noite verei o que posso fazer!
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

01/03/2010

Você está usando um componente Table no cadastro e uma query na localização, então dessa forma, creio q só dará certo se vc filtrar a tabela com base no resultado da pesquisa, usando Filter ou Locate. Mas vc poderia usar o mesmo dataset no cadastro e na consulta. PS: Faltou o DataModule. Boa sorte e bons códigos. 
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Nossa, é verdade, me esqueci do Data Module!   Upei novamente,todos os arquivos, junto com o DM ^^ http://uploaddearquivos.com.br/download/7delphi-Laura.zip     Obrigada meninos.     *Thiago, não cheguei a fazer desse jeito que vc falou, pq pra te falar a verdade, eu não entendi direito o código     Laura
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

01/03/2010

Laura, vou montar um exemplo básico para vc ter uma noção. Boa sorte e bons códigos.
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

01/03/2010

Dê uma olhada em seu e-mail, mandei um código para vc dar uma olhada. Qualquer coisa, estamos a disposição.
GOSTEI 0
Thiago Santana

Thiago Santana

01/03/2010

Laura fiz o download do teu sistema e verifiquei que o teu problema é exatamente pq vc está utilizando um componente TTable para cadastrar e um componente Query para pesquisar!
Aí fica mais complicado fazer... Tente utilizar a mesma query tanto para pesquisar quanto para alterar ou então tente editar o Dataset que está ligado a query de consulta para editar os campos no formulário para edição...
Espero que isso possa te esclarecer...
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Boa Tarde meninos.     Recebi um exemplo do Perivaldo, e me ajudou bastante.. Fiz outro form, pra edição, mas com a mesma 'cara' do cadastro de associados mesmo. Porém, encontrei um errinho que não sei como arrumar: Quando localizo o associado e dou dois cliques para aparecer o formulário de edição, qdo o mesmo aparece, aparece com o primeiro cadastrado, e não o que eu cliquei. (deu pra entender mais ou menos?) Tp, eu quero editar o cadastro de número 10, porém qdo dou dois cliques em cima DELE, no form aparece o cadastro de número 1! Como que eu faço pra que quando for acionado, apareça o cadastro que eu realmente quero???       Obrigada a todos. Laura
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

01/03/2010

Creio q vc  não está usando da forma como passei, pq daquela forma não precisava fazer um segundo form só para edição, mas se vc quer um segundo form, vai ter q usar o mesmo componente table ou query, ou então fazer um filtro com base no resultado da sua busca.
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Ai que saquinho, to tentando fazer igual o seu, porém continua aparecendo o primeiro cadastro quando dou os dois cliques :( To vendo que num vou conseguir terminar essa parte pra entregar logo :(     Com relação ao que vc disse do Table e do Query, como eu tenho que fazer? na tela de localizar to usando um Query, com outro data source.. se eu mudasse, e colocasse o data module, data source e os tables do cadastro dá certo? mas como eu que mudo? só de query pra table? (acho que ficou confuso hahahh)     Obrigada.    
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

01/03/2010

Dê uma nova olhada no exemplo que te mandei, veja que utilizei Locate com componente TTable, faça isso, qualquer coisa, coloco-me a disposição para lhe ajudar com essa parte do projeto.   Boa sorte e bons códigos.
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Nossa, não ta dando certo de jeito nenhum Coloquei o mesmo código que o seu e mesmo assim dá erro quando tento executar... Meu Deus, ou o negócio tá dificil pro meu lado, ou eu não to sabendo colocar o código no lugar certo :(    
GOSTEI 0
Thiago Santana

Thiago Santana

01/03/2010

Laura manda teu email que eu irei mandar um exemplo o mais simples possível! Explicando parte por parte como vc fazer...
A noite te envio...
AbraçoO 
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Meu email é laurinhasq87@gmail.com Nossa, esse sistema não quer dar certo comigo, que zica viu?!  hahaha     Obrigada pela paciência que vocês tem comigo, meninos :D       Laura
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Depois desse localizar + editar, eu preciso fazer os relatórios... que é outra parte que empaquei... o carinha que trampa comigo, me explicou como usa o Report Builder, mas eu esqueci, tentei fazer sozinha e não funcionou nda.. hahaahah depoiis vocês me ajudam tbm? ^^       Laura
GOSTEI 0
Thiago Santana

Thiago Santana

01/03/2010

É uma otima ferramenta o reportBuilder e é fácil de utilizar... Mas tarde estarei online caso vc esteja online será melhor ainda, quete passo umas dicas de ReportBuilder e resolvemos esse lance do seu sistema... AbraçoO Até mais...
GOSTEI 0
Thiago Santana

Thiago Santana

01/03/2010

Laura nem deu para te ajudar ontem a noite tava muito ocupado, mas tenho um link de uma ajuda que passei para um colega com o mesmo problema que o seu, com essa explicação que passei ele consegui resolver!
Acho que olhando as dicas que passei para ele vc irá conseguir!
https://www.devmedia.com.br/forum/viewtopic.asp?id=19116
Caso não consiga irei te ajudar pela noite!
AbraçoO
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

01/03/2010

Laura, coloca aí para nós os códigos que vc está usando nos formulários. Form de Cadastro Form de Localização Form de Edição dos dados etc... Para podermos te ajudar de uma forma mais precisa. Boa sorte e bons códigos. 
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

os códigos:     Form de Cadastro: unit U_CA; interface uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, ExtCtrls, DBCtrls, StdCtrls, Mask; type
  Tfrm_CA = class(TForm)
    gb_DP: TGroupBox;
    Label1: TLabel;
    gb_End: TGroupBox;
    Label10: TLabel;
    DB_End: TDBEdit;
    Label23: TLabel;
    DB_Num: TDBEdit;
    Label25: TLabel;
    DB_Complemento: TDBEdit;
    Label26: TLabel;
    DB_Bairro: TDBEdit;
    Label13: TLabel;
    DB_Cep: TDBEdit;
    Label12: TLabel;
    DB_Cidade: TDBEdit;
    Label24: TLabel;
    DB_Uf: TDBComboBox;
    Label3: TLabel;
    DB_Nome: TDBEdit;
    Label5: TLabel;
    DB_DtNasc: TDBEdit;
    Label7: TLabel;
    DB_EstCiv: TDBComboBox;
    Label4: TLabel;
    DB_Sexo: TDBComboBox;
    gb_DA: TGroupBox;
    Btn_Novo: TSpeedButton;
    Btn_Salvar: TSpeedButton;
    Btn_Limpar: TSpeedButton;
    Btn_Editar: TSpeedButton;
    Btn_Localizar: TSpeedButton;
    Btn_Sair: TSpeedButton;
    Label2: TLabel;
    DB_Cod: TDBText;
    Label14: TLabel;
    DB_Telefone: TDBEdit;
    Label15: TLabel;
    DB_Celular: TDBEdit;
    Label22: TLabel;
    DB_Dependentes: TDBComboBox;
    Label16: TLabel;
    DB_Rg: TDBEdit;
    Label17: TLabel;
    DB_Cpf: TDBEdit;
    Label18: TLabel;
    DB_Email: TDBEdit;
    Label9: TLabel;
    DB_DtFiliacao: TDBEdit;
    Label19: TLabel;
    DB_Categoria: TDBComboBox;
    Label8: TLabel;
    DB_DtAdmissao: TDBEdit;
    Label20: TLabel;
    DB_Setor: TDBLookupComboBox;
    Label21: TLabel;
    DB_Funcao: TDBLookupComboBox;
    DBRadioGroup1: TDBRadioGroup;
    procedure Btn_SairClick(Sender: TObject);
    procedure Btn_NovoClick(Sender: TObject);
    procedure Btn_SalvarClick(Sender: TObject);
    procedure Btn_LimparClick(Sender: TObject);
    procedure Btn_EditarClick(Sender: TObject);
    procedure Btn_LocalizarClick(Sender: TObject);
    procedure Btn_CancelarClick(Sender: TObject);
    function ValidarDados:Boolean;
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end; var
  frm_CA: Tfrm_CA; implementation uses U_Dependentes, U_dm, U_Funcao, U_Localizar, U_Setor, Unit1; {$R *.dfm} function Tfrm_CA.ValidarDados : Boolean;
begin
  if Trim(DB_DtFiliacao.Text) = EmptyStr then
    begin
       MessageDlg('Informe a data de filiação.', mtWarning, [mbOk], 0);
       DB_DtFiliacao.Setfocus;
       ValidarDados := False;
     end else
      if Trim(DB_Categoria.Text) = EmptyStr  then
          begin
              MessageDlg('Selecione a categoria.', mtWarning, [mbOk], 0);
              DB_Categoria.Setfocus;
              ValidarDados := False;
         end
     else if Trim(DB_Nome.Text) = EmptyStr then
          begin
              MessageDlg('Informe o nome.', mtWarning, [mbOk], 0);
              DB_Nome.Setfocus;
              ValidarDados := False;
         end
     else if Trim(DB_DtNasc.Text) = EmptyStr then
          begin
              MessageDlg('Informe a data de nascimento.', mtWarning, [mbOk], 0);
              DB_DtNasc.Setfocus;
              ValidarDados := False;
         end
      else if Trim(DB_EstCiv.Text) = EmptyStr then
          begin
              MessageDlg('Selecione o estado civil.', mtWarning, [mbOk], 0);
              DB_EstCiv.Setfocus;
              ValidarDados := False;
         end
      else if Trim(DB_Sexo.Text) = EmptyStr then
          begin
              MessageDlg('Selecione o sexo.', mtWarning, [mbOk], 0);
              DB_Sexo.Setfocus;
              ValidarDados := False;
         end
      else if Trim(DB_Rg.Text) = EmptyStr then
          begin
              MessageDlg('Informe o RG.', mtWarning, [mbOk], 0);
              DB_Rg.Setfocus;
              ValidarDados := False;
         end
      else if Trim(DB_Cpf.Text) = EmptyStr then
          begin
              MessageDlg('Informe o CPF.', mtWarning, [mbOk], 0);
              DB_Cpf.Setfocus;
              ValidarDados := False;
         end
      else if Trim(DB_End.Text) = EmptyStr then
          begin
              MessageDlg('Informe o endereço.', mtWarning, [mbOk], 0);
              DB_End.Setfocus;
              ValidarDados := False;
         end
      else if Trim(DB_Num.Text) = EmptyStr then
          begin
              MessageDlg('Informe o número da residência.', mtWarning, [mbOk], 0);
              DB_Num.Setfocus;
              ValidarDados := False;
         end
     else if Trim(DB_Bairro.Text) = EmptyStr then
          begin
              MessageDlg('Informe o bairro.', mtWarning, [mbOk], 0);
              DB_Bairro.Setfocus;
              ValidarDados := False;
         end
      else if Trim(DB_Cidade.Text) = EmptyStr then
          begin
              MessageDlg('Informe a cidade.', mtWarning, [mbOk], 0);
              DB_Cidade.Setfocus;
              ValidarDados := False;
         end
      else if Trim(DB_Uf.Text) = EmptyStr then
          begin
              MessageDlg('Selecione o estado.', mtWarning, [mbOk], 0);
              DB_Uf.Setfocus;
              ValidarDados := False;
         end
         else if Trim(DB_Complemento.Text) = EmptyStr then
          begin
              MessageDlg('Informe o complemento.', mtWarning, [mbOk], 0);
              DB_Complemento.Setfocus;
              ValidarDados := False;
         end
      else if Trim(DB_Cep.Text) = EmptyStr then
          begin
              MessageDlg('Informe o CEP.', mtWarning, [mbOk], 0);
              DB_Cep.Setfocus;
              ValidarDados := False;
         end
      else if Trim(DB_Telefone.Text) = EmptyStr then
          begin
              MessageDlg('Informe o número do telefone para contato.', mtWarning, [mbOk], 0);
              DB_Telefone.Setfocus;
              ValidarDados := False;
         end
       else if Trim(DB_Celular.Text) = EmptyStr then
          begin
              MessageDlg('Informe o número do celular para contato.', mtWarning, [mbOk], 0);
              DB_Celular.Setfocus;
              ValidarDados := False;
         end
       else if Trim(DB_Email.Text) = EmptyStr then
          begin
              MessageDlg('Informe um email para contato.', mtWarning, [mbOk], 0);
              DB_Email.Setfocus;
              ValidarDados := False;
         end
       else if Trim(DB_Dependentes.Text) = EmptyStr then
          begin
              MessageDlg('Selecione a quantidade de dependentes.', mtWarning, [mbOk], 0);
              DB_Dependentes.Setfocus;
              ValidarDados := False;
         end
       else if Trim(DB_DtAdmissao.Text) = EmptyStr then
          begin
              MessageDlg('Informe a data de admissao.', mtWarning, [mbOk], 0);
              DB_DtAdmissao.Setfocus;
              ValidarDados := False;
         end
       else if Trim(DB_Setor.Text) = EmptyStr then
          begin
              MessageDlg('Selecione o setor.', mtWarning, [mbOk], 0);
              DB_Setor.Setfocus;
              ValidarDados := False;
         end
       else if Trim(DB_Funcao.Text) = EmptyStr then
          begin
              MessageDlg('Selecione a função.', mtWarning, [mbOk], 0);
              DB_Funcao.Setfocus;
              ValidarDados := False;
         end
           else
            ValidarDados := True;
 end;
 
procedure Tfrm_CA.Btn_LimparClick(Sender: TObject);
begin
  DB_DtFiliacao.Setfocus;
  DB_DtFiliacao.Clear;
  DB_Categoria.Clear;
  DB_Nome.Clear;
  DB_DtNasc.Clear;
  DB_EstCiv.Clear;
  DB_Sexo.Clear;
  DB_Rg.Clear;
  DB_Cpf.Clear;
  DB_End.Clear;
  DB_Num.Clear;
  DB_Bairro.Clear;
  DB_Cidade.Clear;
  DB_Uf.Clear;
  DB_Complemento.Clear;
  DB_Cep.Clear;
  DB_Telefone.Clear;
  DB_Celular.Clear;
  DB_Email.Clear;
  DB_Dependentes.Clear;
  DB_DtAdmissao.Clear; end; procedure Tfrm_CA.Btn_SairClick(Sender: TObject);
begin
  Close;
end; procedure Tfrm_CA.Btn_NovoClick(Sender: TObject);
begin
   DataModule1.Tab_Associado.Open;
   DataModule1.Tab_Associado.Insert; // Cria um novo registro
   DB_Nome.SetFocus;
   //DataModule1.Tab_Associado.Close;
   DataModule1.Tab_Setor.Open;
   DataModule1.Tab_Funcao.Open;
end; procedure Tfrm_CA.Btn_EditarClick(Sender: TObject);
begin
   frm_CA.Close;
   Form1.ShowModal;
 end; procedure Tfrm_CA.Btn_SalvarClick(Sender: TObject);
begin
  DataModule1.Tab_Associado.Post;
 // DataModule1.Tab_Associado.Refresh;
end; procedure Tfrm_CA.Btn_CancelarClick(Sender: TObject);
begin
  If MessageDlg('Deseja realmente cancelar as modificações ?', mtConfirmation,
  [mbYes,mbNo], 0) = mrYes Then
  DataModule1.Tab_Associado.Cancel;
end;
procedure Tfrm_CA.Btn_LocalizarClick(Sender: TObject);
begin
     frm_localizar.ShowModal;
end;
procedure Tfrm_CA.FormShow(Sender: TObject);
begin
  DataModule1.Tab_Associado.close;
  DataModule1.Tab_Setor.close;
  DataModule1.Tab_Funcao.close;
  DataModule1.Tab_Dependentes.Close;
end; end.       Form de Localização: unit U_Localizar; interface uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, Grids, DBGrids, StdCtrls, ExtCtrls, Mask, DBCtrls, DB,
  ADODB, DBTables, ppBands, ppCtrls, ppPrnabl, ppClass, ppCache, ppProd,
  ppReport, ppDB, ppComm, ppRelatv, ppDBPipe, ppVar,StrUtils; type
  Tfrm_localizar = class(TForm)
    DataSource1: TDataSource;
    ADOQuery1: TADOQuery;
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    LE_localizar: TLabeledEdit;
    btn_ok: TSpeedButton;
    btn_sair: TSpeedButton;
    DBGrid1: TDBGrid;
    ppDBPipeline1: TppDBPipeline;
    ppReport1: TppReport;
    ppHeaderBand1: TppHeaderBand;
    ppLabel1: TppLabel;
    ppDetailBand1: TppDetailBand;
    ppDBText2: TppDBText;
    ppDBText3: TppDBText;
    ppFooterBand1: TppFooterBand;
    ppSystemVariable1: TppSystemVariable;
    ADOQuery1Cod_Associado: TAutoIncField;
    ADOQuery1Nome: TWideStringField;
    ADOQuery1Setor: TWideStringField;
    ADOQuery1Funcao: TWideStringField;
    ADOQuery1Situacao: TBooleanField;
    procedure btn_sairClick(Sender: TObject);
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
     DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure btn_okClick(Sender: TObject);
    procedure LE_localizarKeyPress(Sender: TObject; var Key: Char);
    procedure ADOQuery1SituacaoGetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
    procedure BitBtn1Click(Sender: TObject);
    procedure DBGrid1DblClick(Sender: TObject);
    procedure DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    private
    { Private declarations }
  public
    { Public declarations }
  end; var
  frm_localizar: Tfrm_localizar; implementation uses U_dm, U_CA, Unit1, U_CadastroAssociado, U_Dependentes, U_Funcao,
  U_Principal, U_reldepen, U_RelNiver, U_Setor, U_sobresys; {$R *.dfm} procedure Tfrm_localizar.btn_sairClick(Sender: TObject);
begin
  Close;
end; procedure Tfrm_localizar.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
 if State = [] then
   begin
     if (ADOQuery1.FieldByName('Situacao').AsBoolean = False) then      //onde 'Ativo' é o nome do campo do banco de dados
        DBGrid1.Canvas.Brush.Color := clInactiveBorder  // define a cor das linhas do grid que serao inativos
     else
       DBGrid1.Canvas.Brush.Color := clWhite; // define a cor das linhas do grid que serao ativos
   end;
  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end; procedure Tfrm_localizar.btn_okClick(Sender: TObject);
begin
  with ADOQuery1 do
    begin
       Close; // fecha a query para alterar a SQL
       SQL.Clear;  // limpa o conteudo SQL da query
       SQL.Add('SELECT COD_ASSOCIADO, Nome, Setor, Funcao, Situacao  FROM CadastroAssociado');  // seleciona todos os campos da tabela CLIENTE
       SQL.Add('WHERE NOME LIKE :pNome'); // ONDE o nome seja igual ao param pNome
       SQL.Add('ORDER BY COD_ASSOCIADO'); // ordenado por código
       Parameters.ParamByName('pNome').Value:= '%'+LE_Localizar.Text+'%';  // define o valor do parametro pNome = ao texto do edit1
       Open; // executa a query
     end;
end; procedure Tfrm_localizar.LE_localizarKeyPress(Sender: TObject;
  var Key: Char);
begin
  if key = #13 then  //for enter
    btn_ok.Click;
end; procedure Tfrm_localizar.ADOQuery1SituacaoGetText(Sender: TField;
  var Text: String; DisplayText: Boolean);
begin
    Text := IfThen(Sender.AsBoolean,'Ativo','Inativo');
end; procedure Tfrm_localizar.BitBtn1Click(Sender: TObject);
begin
  //  ppReport1.Print;
end;   procedure Tfrm_localizar.DBGrid1DblClick(Sender: TObject);
begin
      //frm_CA.ShowModal;
     Close;
     Form1.ShowModal;
     //DataModule1.Tab_Associado.Edit;
end; procedure Tfrm_localizar.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (key = vk_return) then
    begin
       DataModule1.Tab_Associado.Edit;
    end;
end; end.         Form de Edição: unit Unit1; interface uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, DBCtrls, StdCtrls, Mask, Buttons, DB; type
  TForm1 = class(TForm)
    Label1: TLabel;
    Btn_Salvar: TSpeedButton;
    Btn_Sair: TSpeedButton;
    Label2: TLabel;
    DB_Cod: TDBText;
    gb_DP: TGroupBox;
    Label3: TLabel;
    Label5: TLabel;
    Label7: TLabel;
    Label4: TLabel;
    Label22: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    DB_Nome: TDBEdit;
    DB_DtNasc: TDBEdit;
    DB_EstCiv: TDBComboBox;
    DB_Sexo: TDBComboBox;
    DB_Dependentes: TDBComboBox;
    DB_Rg: TDBEdit;
    DB_Cpf: TDBEdit;
    gb_End: TGroupBox;
    Label10: TLabel;
    Label23: TLabel;
    Label25: TLabel;
    Label26: TLabel;
    Label13: TLabel;
    Label12: TLabel;
    Label24: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label18: TLabel;
    DB_End: TDBEdit;
    DB_Num: TDBEdit;
    DB_Complemento: TDBEdit;
    DB_Bairro: TDBEdit;
    DB_Cep: TDBEdit;
    DB_Cidade: TDBEdit;
    DB_Uf: TDBComboBox;
    DB_Telefone: TDBEdit;
    DB_Celular: TDBEdit;
    DB_Email: TDBEdit;
    gb_DA: TGroupBox;
    Label9: TLabel;
    Label19: TLabel;
    Label8: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    DB_DtFiliacao: TDBEdit;
    DB_Categoria: TDBComboBox;
    DB_DtAdmissao: TDBEdit;
    DB_Setor: TDBLookupComboBox;
    DB_Funcao: TDBLookupComboBox;
    DBRadioGroup1: TDBRadioGroup;
    DBNavigator1: TDBNavigator;
    Btn_Editar: TSpeedButton;
    procedure Btn_SairClick(Sender: TObject);
    procedure Btn_SalvarClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Btn_EditarClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end; var
  Form1: TForm1; implementation uses U_CA, U_Dependentes, U_dm, U_Funcao, U_Localizar, U_Setor,
  U_Principal, U_reldepen, U_RelNiver, U_sobresys; {$R *.dfm}
procedure TForm1.Btn_SairClick(Sender: TObject);
begin
  Close; end; procedure TForm1.Btn_SalvarClick(Sender: TObject);
begin
    DataModule1.Tab_Associado.Post;
 // DataModule1.Tab_Associado.Refresh;
end; procedure TForm1.FormShow(Sender: TObject);
begin
   DataModule1.Tab_Associado.Open;
   DataModule1.Tab_Associado.Edit;
   {If ValidarDados = True Then // Função que verifica se foi preenchido o formulario
   begin
     try
        DataModule1.Tab_Associado.Post;// Confirma as modificações no DatSet
    except // Caso Aconteça algum erro exibe mensagem ao usuário
        MessageDlg('Atenção não foi possivel salvar o registro.', mtError, [mbOk], 0);
    end;}
    DataModule1.Tab_Associado.Post;
end; procedure TForm1.Btn_EditarClick(Sender: TObject);
begin
    DataModule1.Tab_Associado.Open;
   DataModule1.Tab_Associado.Edit;
    DataModule1.Tab_Associado.Post;
end; end.     botei os códigos inteiros, se ficou mto longo, me perdoem hahaahhaha  
GOSTEI 0
Thiago Santana

Thiago Santana

01/03/2010

Laura uma dica!
O seu form de Edição será o mesmo que vc utiliza para cadastrar, não a necessidade de criar um formulário apenas para a editar o registro.
Vc olhou o link que postei anteriormente? Lá vc vai entender direitinho!
AbraçoO
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Thiago, dei uma olhada por cima, pq agora to no trampo, mas não to podendo mexer nele, to fazendo outra coisa.. Qdo eu for pra casa, eu dou uma olhada detalhada, ai quem sabe eu entenda só pelas suas dicas no link né?! ;) Então, esse formulário de edição eu deleto? já que será editado no form de cadastro mesmo..   mas ai as setinhas do navigator eu tenho que por, ou não precisa? pq eu queria que qdo clicasse em cima do cadastro, aparecesse o proprio, e não o primeiro como tá acontecendo com o que eu fiz. hahhaha  
GOSTEI 0
Thiago Santana

Thiago Santana

01/03/2010

Não terá a necessidade do navigator nem do formulário de edição pq vc irá editar o registro pesquisado no próprio formulário de cadastro! Eu tbm estou no trampo mais tarde estarei online ficará mais fácil de te explicar... AbraçoO até mais...
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

ah entendi! então a noite qdo eu voltar da facul, eu fico online tbm!  abraços e  obrigada por enquanto meninos!! 
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

01/03/2010

  Seguinte, no form de cadastro vc está usando um componente TTable lá do seu DataModule, correto? DataModule1.Tab_Associado.Post; No Form de localização, vc está usando um componente TADOQuery que parece está presente localmente no form. with ADOQuery1 do
    begin
       Close; // fecha a query para alterar a SQL
       SQL.Clear;  // limpa o conteudo SQL da query
       SQL.Add('SELECT COD_ASSOCIADO, Nome, Setor, Funcao, Situacao  FROM CadastroAssociado');  // seleciona todos os campos da tabela CLIENTE
       SQL.Add('WHERE NOME LIKE :pNome'); // ONDE o nome seja igual ao param pNome
       SQL.Add('ORDER BY COD_ASSOCIADO'); // ordenado por código
       Parameters.ParamByName('pNome').Value:= '%'+LE_Localizar.Text+'%';  // define o valor do parametro pNome = ao texto do edit1
       Open; // executa a query
     end;   O código acima está legal, mas entenda uma coisa, para o que vc está querendo, ou vc usa tudo com Query ou tudo com Table, usando Locate, como no exemplo que te passei.   Da forma como está, vc teria que usar algo mais ou menos assim:   * Criar uma variável global. * Passar como valor para essa variável o valor vindo da instrução SQL contida na Query. * Filtrar a Tab_Associado (DataModule1.Tab_Associado.Filter := 'Nome = '+Sua_Variavel_Global                                           DataModule1.Tab_Associado.Filtered := True; Só que eu particularmente, acho isso desnecessário, e parece gambiarra.   No Form_Localizar vc poderia usar no OnChage do componente Edit (ex: dbNome.Text).    with DataModule1 do  begin      Tab_Associado.Locate('Nome', dbNome.Text, [loPartialKey, LoCaseInsensitive]);   end;
Assim, o ponteiro ficará sobre o registro desejado, e quando vc clicar duas vezes no DBGrid, ele vai simplesmente fechar o form de localização e chamar o Form de cadastro que já vai abrir com o registro na tela.   Espero que o Thiago possa lhe ajudar a resolver esse problema hj quando vcs estiverem on line.   Boa sorte e bons códigos.
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Perivaldo, entendi o que você explicou... mas para isso acontecer, eu preciso trocar de datasource, ou não? Pq atualmente, meu localizar está com um data source separado, e quando eu tento colocar o data souce que eu estou usando nos outros formulários, simplesmente não aparece nada! agora coloquei esse código do Locate, e dá um erro quando eu tento escrever algo pra ser localizado. dizendo o seguinte: 'Tab_Associado: Cannot perform this operation on a closed dataset'.        
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

01/03/2010

Vc vai alterar seu datasource para que ele pegue o dataset q está no DataModule OK! Quanto ao erro no locate, verifique se sua TTable está aberta.   Inclua a unit do seu DataModule no Localizar.   Boa sorte e bons códigos. 
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Agora deu certo ^^   Mass, como eu faço pra no onClick do btn_ok aparecer somente os nomes que eu digitei na 'palavra chave'? Exemplo: jose .. deveria aparecer somente um sem acento.. porém aparece a lista inteira, de onde começa os 'josés', independente de acento ou não e o btn ou o enter não funciona igual funcionava com o código que tava antes..     (mas a questão de aparecer o formulário do cadastrado clicado, tá aparecendo :D )
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

que coisa estranha! Fui testar novamente, pra ver se tava tudo certinho mesmo.. e somente com o comando de open e o locate, dá um erro e com o comando de open, dps o locate e dps o close (da tabela) simplesmente não aparece o nome!     Achei que tava tudo certinhoo!! :(
GOSTEI 0
Thiago Santana

Thiago Santana

01/03/2010

Laura utilizando o locate para pesquisar ele traz todos os nomes que começam com o determinando nome inclusive os que contém acentos... Para que venha apenas o nome informado vc deve utilizar outro tipo de consulta!
Mas afinal teu sistema já tá funcionando do jeito que vc quer? Abraçoo
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Thiago, ele tá  funcionando do jeitinho que eu quero só a parte de cadastrar (associados, dependentes, funções e setores) o localizar tava funcionando legalzinho, porém só busca, e o que eu quero é essa de buscar e poder clicar pra editar. pra depois fazer a parte dos relatórios, e digamos que 95% do sistema fica pronto, do jeito que EU to querendo hahahhaah. Ai dps eu só levo lá pro pessoal ver, começar a usar e pedir as atualizações hahahaha (ai nessa parte eu to lascada hahaha)     Mas enquanto eu não consigo consertar essa do localizar, eu não quero ir pros relatórios :\
GOSTEI 0
Thiago Santana

Thiago Santana

01/03/2010

Laura esse lance de editar o cadastro pesquisado é simples!
Vc tentou seguir as dicas que passei neste link aki para um colega nosso? https://www.devmedia.com.br/forum/viewtopic.asp?id=19116     Se vc não conseguir dê um jeito de ficar online hj depois das 6!
Mas acho que vc deve conseguir resolver com este link acima! Online posso te ajudar com mais facilidade!
AbraçoO
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Nossa, não deu pra eu ver com calma o link que vc passou, mas vou ver agora mesmo ^^     Eu nao consigo ficar on dps das seis, pq eu fico direto na faculdade e só volto pra casa as onze da noite :(  
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Thiago, no link que vc passou, vc colocou o seguinte código:     "Dm.ClientDataSet1.close;
Dm.ClientDataSet1.CommandText := '';
Dm.ClientDataSet1.CommandText:= ('Select * from Tb_Teste where Nome = ' + QuotedStr (Edit1.Text ));
Dm.ClientDataSet1.Open;

No evento ondblClick da DbGrid inclua o seguinte código:

FormCadastro.show; // Seu formulário de edição  
Dm.CDSCadastro.Edit; // Mesma tabela utilizada por efetuar a consulta"     só que o CommandText aqui não funciona, qual Uses que é?

GOSTEI 0
Thiago Santana

Thiago Santana

01/03/2010

CommandText é uma propriedade do ClienteDataSet, não necessita de Uses para ser reconhecido!
Vc está utilizando ClientDataSet? Se não estiver inclua um clienteDataSetna sua aplicação para testar...   No botão consultar já na tela de consulta (FormConsulta) vc irá informar o seguinte código:
Dm.ClientDataSet1.close;
Dm.ClientDataSet1.CommandText := '';
Dm.ClientDataSet1.CommandText:= ('Select * from Tb_Teste where Nome = ' + QuotedStr (EditPesquisa.Text));
Dm.ClientDataSet1.Open;

No evento ondblClick da DbGrid do seu FormConsulta inclua o seguinte código:
FormCadastro.show; // Seu formulário de edição  
Dm.ClientDataSet1.Edit; // Mesma tabela utilizada por efetuar a consulta
É isso aí, caso vc não consiga eu ficarei até mais tarde online para te ajudar...
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Mas pera lá. Primeiro, esse ClientDataSet eu coloco onde exatamente? No formulário de localização ou no DataModule?? Segundo, quais as propriedades que coloca nele? Terceiro, o código (o primeiro)é inserido no evento dblClick do botão ok né?! e depoisss que eu coloco as duas linhas no dblclick do grid?      
GOSTEI 0
Thiago Santana

Thiago Santana

01/03/2010

O clientdataset ficará no seu datamodule, caso vc não saiba trabalhar com ClientDataset vc poderá utilizar uma query ao invés do ClientDataSet... Aí se vc usar uma query seu código ficará assim: No botão consultar da tua tela de consulta: DM.Query1.close;
DM.Query1.SQL.Add('Select * from Tb_Teste where Nome = ' + QuotedStr (EditPesquisa.Text));
DM.Query1.Open;  
No evento ondblClick da DBGRIG do seu FormConsulta inclua o seguinte código:
FormCadastro.show; // Seu formulário de edição  DM.ClientDataSet1.Edit; // Mesma tabela utilizada por efetuar a consulta   Lembrando que vc deverá utilizar a mesma Query1 para a tela de cadastro!
 
GOSTEI 0
Thiago Santana

Thiago Santana

01/03/2010

O 2º código vc coloca no evento OnDbClick da Grid!
E ao invés de DM.ClientDataset1 como informei no post passadoo vc vai utilizar a Dm.Query1!
Espero que tenha entendido! Qquer coisa envia teu sistema para meu email que ajeito e mando explicando pra vc como resolvi tua situação! Ou estarei online mais tarde! AbraçoO
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

01/03/2010

Laura, pelo que podemos observar, seu conhecimento em relação a programação ainda está crescendo, vc é o que podemos dizer, iniciante em Delphi.   Veja bem, vc deve estudar antes quais metodos de acesso usará em seus projetos, quais componentes data-ware serão utilizados, componentes de acesso (IBX, DBX, ADO, BDE (pouco utilizado hj em dia).   Esse form para Localizar um determinado dependente e depois editá-lo não deveria lhe causar tanta dor de cabeça.   Qual o seu banco de dados?   Você poderi postar a estrutura de sua tabela aqui ou enviá-la para o meu e-mail, pq assim, monto um exemplo documentado para que vc possa seguir um passo-a-passo e resolver logo esse problema, logo depois publico a solução aqui no fórum.   A solução do Thiago é boa, mas vc tem q usar componente TQuery ou TClientDataSet, com TTable não dá.   Boa sorte bons códigos.
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Perivaldo, realmente eu sou iniciante em Delphi. comecei a mexer nele sem nem ter tido UMA aula sequer. Eu fui fazendo o sistema com ajudas.. tanto que essa parte do localizar, onde foi usado Query, foi um amigo meu da facul que me ajudou. Peguei umas apostilas pra dar uma estudada.. mas não sou mto boa nele ainda ahahahahha     sou perdidinha ainda. mas conforme os dias eu vou aprendendo ;)       Meninos, vou ter que fazer outros serviços aqui no meu trampo, e não poderei responder mais, então amanhã eu leio os ultimos posts do thiago e te envio a estrutura do sistema, ok perivaldo?         Obrigada pela super ajuda mais uma vez, meninos! Laura
GOSTEI 0
Rubens Antunes

Rubens Antunes

01/03/2010

Olá Laura, daqui uns 15 dias estarei publicando neste site uma materia free, onde criaremos um sistema de locadora, aguarde...

Perivaldo, realmente eu sou iniciante em Delphi.
comecei a mexer nele sem nem ter tido UMA aula sequer.
Eu fui fazendo o sistema com ajudas..
tanto que essa parte do localizar, onde foi usado Query, foi um amigo meu da facul que me ajudou.
Peguei umas apostilas pra dar uma estudada.. mas não sou mto boa nele ainda ahahahahha
 
 
sou perdidinha ainda.
mas conforme os dias eu vou aprendendo ;)
 
 
 
Meninos, vou ter que fazer outros serviços aqui no meu trampo, e não poderei responder mais, então amanhã eu leio os ultimos posts do thiago e te envio a estrutura do sistema, ok perivaldo?
 
 
 
 
Obrigada pela super ajuda mais uma vez, meninos!
Laura
 
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Boa tarde meninos! Deixei de mexer no sisteminha, pq tive mto trabalho da facul pra entregar.   e eu queria saber uma coisa: Se eu usar o componente ADOTable,  ao invés do ADOQuery, ficaria mais simples? eu tenho que mudar o código que está atualmente né/? pq o Query só aparece no localizar mesmo, e o table aparece na conexão dos formulários de cadastro com o banco!        
GOSTEI 0
Thiago Santana

Thiago Santana

01/03/2010


Laura será mais simples vc utilizar apenas 1 ADOQuery tanto para cadastrar, alterar e Consultar!
Apenas uma ADOQUERY...
Fique online a noite que teu ajudo!
AbraçoO
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Não, é que é assim, eu uso no Data Module, ADO Table, pra tabela de associados, dependentes, função e setor.   e só no cadastrar, que o selecionar ficou com o ADOQuery. Se eu mudasse pra ADOTable, num ficaria mais simples e fácil???
GOSTEI 0
Laura Queiroz

Laura Queiroz

01/03/2010

Deu certo com o exemplo que o Perivaldo me passou por email!   Só que eu tenho uma perguntinha: Como que eu faço pra no momento em que eu vou digitando, NÃO apareça já os campos que possuem as letras, e somente quando der enter ou clicar no ok?? ou não precisa disso tudo?     segue o código dos dois formulários (o que aparece pra edição e o que tem o grid) (form que aparecerá o cadastro pra ser editado) unit Unit1; interface uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, DBCtrls, StdCtrls, Mask, Buttons, DB; type
  TForm1 = class(TForm)
    Label1: TLabel;
    Btn_Salvar: TSpeedButton;
    Btn_Sair: TSpeedButton;
    Label2: TLabel;
    DB_Cod: TDBText;
    gb_DP: TGroupBox;
    Label3: TLabel;
    Label5: TLabel;
    Label7: TLabel;
    Label4: TLabel;
    Label22: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    DB_Nome: TDBEdit;
    DB_DtNasc: TDBEdit;
    DB_EstCiv: TDBComboBox;
    DB_Sexo: TDBComboBox;
    DB_Dependentes: TDBComboBox;
    DB_Rg: TDBEdit;
    DB_Cpf: TDBEdit;
    gb_End: TGroupBox;
    Label10: TLabel;
    Label23: TLabel;
    Label25: TLabel;
    Label26: TLabel;
    Label13: TLabel;
    Label12: TLabel;
    Label24: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label18: TLabel;
    DB_End: TDBEdit;
    DB_Num: TDBEdit;
    DB_Complemento: TDBEdit;
    DB_Bairro: TDBEdit;
    DB_Cep: TDBEdit;
    DB_Cidade: TDBEdit;
    DB_Uf: TDBComboBox;
    DB_Telefone: TDBEdit;
    DB_Celular: TDBEdit;
    DB_Email: TDBEdit;
    gb_DA: TGroupBox;
    Label9: TLabel;
    Label19: TLabel;
    Label8: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    DB_DtFiliacao: TDBEdit;
    DB_Categoria: TDBComboBox;
    DB_DtAdmissao: TDBEdit;
    DB_Setor: TDBLookupComboBox;
    DB_Funcao: TDBLookupComboBox;
    DBRadioGroup1: TDBRadioGroup;
    DBNavigator1: TDBNavigator;
    Btn_Editar: TSpeedButton;
    procedure Btn_SairClick(Sender: TObject);
    procedure Btn_SalvarClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Btn_EditarClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end; var
  Form1: TForm1; implementation uses U_CA, U_Dependentes, U_dm, U_Funcao, U_Localizar, U_Setor,
  U_Principal, U_reldepen, U_RelNiver, U_sobresys, Unit2; {$R *.dfm}
procedure TForm1.Btn_SairClick(Sender: TObject);
begin
  Close; end; procedure TForm1.Btn_SalvarClick(Sender: TObject);
begin
    DataModule1.Tab_Associado.Post;
 // DataModule1.Tab_Associado.Refresh;
end; procedure TForm1.FormShow(Sender: TObject);
begin
   DataModule1.Tab_Associado.Open;
   DataModule1.Tab_Associado.Edit;
   {If ValidarDados = True Then // Função que verifica se foi preenchido o formulario
   begin
     try
        DataModule1.Tab_Associado.Post;// Confirma as modificações no DatSet
    except // Caso Aconteça algum erro exibe mensagem ao usuário
        MessageDlg('Atenção não foi possivel salvar o registro.', mtError, [mbOk], 0);
    end;}
    DataModule1.Tab_Associado.Post;
end; procedure TForm1.Btn_EditarClick(Sender: TObject);
begin
   Form2.Show;
   DataModule1.Tab_Associado.Open;
   DataModule1.Tab_Associado.Edit;    {If ValidarDados = True Then // Função que verifica se foi preenchido o formulario
   begin
     try
        DataModule1.Tab_Associado.Post;// Confirma as modificações no DatSet
    except // Caso Aconteça algum erro exibe mensagem ao usuário
        MessageDlg('Atenção não foi possivel salvar o registro.', mtError, [mbOk], 0);
    end;}
    DataModule1.Tab_Associado.Post;
end; end.           form2 (formulário de localização) unit Unit2; interface uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, DB, ADODB, Grids, DBGrids, ExtCtrls,StrUtils; type
  TForm2 = class(TForm)
    LabeledEdit1: TLabeledEdit;
    DBGrid1: TDBGrid;
    BitBtn1: TBitBtn;
    procedure LabeledEdit1Change(Sender: TObject);
    procedure DBGrid1DblClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end; var
  Form2: TForm2; implementation uses U_dm, Unit1; {$R *.dfm} procedure TForm2.LabeledEdit1Change(Sender: TObject);
begin
    DataModule1.Tab_Associado.Open;
    DataModule1.Tab_Associado.Locate('Nome', LabeledEdit1.Text, [loCaseInsensitive, loPartialKey]); end; procedure TForm2.DBGrid1DblClick(Sender: TObject);
begin
  Close;
  Form1.Show;
end; end.
   
GOSTEI 0
Roberto Novakosky

Roberto Novakosky

01/03/2010

Nossa... Sugiro fazer de um jeito mais profissional: Não use table, qualquer Ordenação que vc fizer na table obriga ao clientDataSet trazer do banco de dados todos os registros da table, e digamos que podem ser 100.000 ou mais né... seja criteriosa ao usar table. É fácil uma tabela de clientes atingir mais de 250.000 cadastros logo... Use query para ambas as situações para pesquisar ou para a tela de cadastro. Se vc tiver na tela de cadastro situações de Master Detail, pegue algum material de estudo para ver certinho como fazer. Para Pesquisa, no código do botão de pesquisar crie seu SQL em tempo de execução pegando o texto que servirá de localização completando a cláusula WHERE da melhor forma possível e já aproveitando a colocar uma cláusula ORDER BY. E claro traga no no teu select os campos de chaves primárias mesmo que não mostre ao usuário na DBGRID. No clique duplo da DBGRID, se houver algum registro clicado então crie outro form em tempo de execução e passe para ele a chave primária da tua pesquisa, vc consegue acessar esta chave pelo teu clientDataSet (ex. MeuCds.FieldByName('MinhaID').AsInteger), popule então no seu formulário de cadastro os dados (crie uma função no form de cadastro para vc passa o ID e populá-lo, para montar outro select para vc popular o teu cadastro com todos os campos que vc precisará editar) que serão editados através da tua chave primária e pronto...controle com botões de salvar, editar, excluir o que vc que precisar deixar para o usuário fazer. E claro vc ainda pode precisar de Transações na tela de cadastro (BeginTrans, Commit Rollback) mas já é outro assunto mais avançado. Roberto
GOSTEI 0
POSTAR