Jump to content
Fórum Script Brasil
  • 0

[resolvido] Botão Editar


Guest Iniciante Programador
 Share

Question

Guest Iniciante Programador

Pessoal peguei um exemplo de botões de salvar, excluir, novo e pesquisar na net, mas não consiguo Localizar um de editar como eu faço para fazer um botão de Editar?, gostaria muito que o meu projeto tenho um botão de editar e não ficar editando direto quando os dados estão espostas na janela, tenho um unit de funções onde eu faço as funções do meu projeto e vou ligando nos formularios esse é o exemplo da função alterarregistro que ele me passou com essa eu acho que dá para fazer a ligação com o botão:

procedure alterarregistro (ptabela:string;pcampos, pvalores:tstringlist;pcondicao:string);

var a:integer;instrucaosql:string;

begin

instrucaosql:='update ' + ptabela + ' set ';

for a :=0 to (pcampos.Count-1) do

begin

instrucaoSQL := instrucaosql+pcampos [a]+ '='+ pvalores [a] + ', ' ;

end;

instrucaosql:= copy (instrucaosql,1,length (instrucaosql)-2);

if (pcondicao<>'') then

begin

instrucaosql := instrucaosql + ' where ' + pcondicao;

end;

// showmessage (instrucaosql);

with dtmiza.qryiza do

begin

close;

sql.Clear;

sql.add (instrucaosql);

execsql;

end;

Como eu faço um botão de editar mais ou menos desse tipo.

Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

Bom, este já parece ser um exemplo de função para alterar os valores dos campos na tabela - eu diria que é um salvar alterações.

a ideía de clicar me um botão Editar deve ser mais ou menos essa:

- clica no botão editar;

- no evento OnClick do botão, você localiza na tabela o registro a ser editado;

- uma vez localizado, move os valores dos campos para seus edit's no form;

- mostra o form para que seja feita a edição/altração;

- ao final, cancela ou grava as alterações.

Link to comment
Share on other sites

  • 0

Do post de onde você tirou essa "encrenca" (link), tem o procedimento LeRegistro que aparentemente faz isto.

É bem verdade que ele ainda chama uma procedure Consultaregistros que vai realmente efetivar a consulta, mas é bem óbvio o que tem lá dentro - dê uma olhada no post que fiz em resposta ao questionamento dele - é praticamente o código que lhe falta.

Link to comment
Share on other sites

  • 0
Guest Iniciante Programador
Micheus Postado Hoje, 14:30

Do post de onde você tirou essa "encrenca" (link), tem o procedimento LeRegistro que aparentemente faz isto.

É bem verdade que ele ainda chama uma procedure Consultaregistros que vai realmente efetivar a consulta, mas é bem óbvio o que tem lá dentro - dê uma olhada no post que fiz em resposta ao questionamento dele - é praticamente o código que lhe falta.

Postado Hoje, 14:18

Foi dele que eu peguei esses exemplos mas eu me falou que não fez o botão editar, por isso que eu estou lhe perguntando.

Do jeito que você sabe fazer como eu posso fazer como o botão editar?

Link to comment
Share on other sites

  • 0
Foi dele que eu peguei esses exemplos mas eu me falou que não fez o botão editar, por isso que eu estou lhe perguntando.

Do jeito que você sabe fazer como eu posso fazer como o botão editar?

Se você pegou com ele, você deve ter algo parecido com isto em seu código:

procedure Tfrmalunos.leregistro;
begin
    if consultaregistros('alunos', 'codigo, nome, cpf, processos', 'codigo =' + retorno) then
    begin
      txtmat.text := ledados ('codigo');
      txtnom.text := ledados ('nome');
      txtcpf.text := ledados ('cpf');
      txtpro.text := ledados ('processos');
    end;
    if consultaregistros('usuarios', 'codigo, nome', 'codigo =' + retorno) then
    begin
      txtcodi.text := ledados ('codigo');
      txtusu.text := ledados ('nome');
    end;
end;

O que este procedimento faz é, após encontrar a informação (via função consultaregistros), utilizar o dataset por ela aberto (e que está posicionado no registro desejado) para retornar as informações utilizando uma função chamada ledados, onde ele move o valor do campo lido para o respectivo edit.

O que a função consultaregistros faz é montar uma consulta SQL para procurar na tabela "alunos", os campos "codigo, nome, cpf, processos" com a cláusula where "codigo = <valor em retorno>".

Se você pegou com ele, você deve ter este procedimento em seu código.

Eu não tenho como adivinhar todo o malabarismo que há nos códigos de vocês, mas o conceito é este (denovo):

- em algum momento o usuário seleciona um item para editar (é o que você irá utilizar na cláusula where, ou seja, na procedure é o valor em retorno);

- após selecionado, ao pressionar um botão edit, você chamará o seu LeRegitro, que irá obter todos os dados na tabela e mover para os respectivos Edit;

- ao final da edição, deve haver um botão gravar. É sabendo que você está editando e não inserindo, que você chamará o procedimento que move os valores dos edit's para a lista de campos e valores e chama o procedimento AlteraRegistro.

posso perguntar por que você começou a aprender (já que se diz iniciante) delphi com banco de dados utilizando justo esta abordagem - não utilização de componentes data-aware (os TDB...)?

Abraços

Link to comment
Share on other sites

  • 0
Guest Iniciante Programador

Sei entendi, mas o problema meu que eu quero contornar é assim:

Tenho o programa e quando ele retorna os dados para o meu form ele já retorna podendo editar os campos, mas por exemplo se os dados estão disponiveis na tela e o usuario mudar algo sem perceber vai ficar ruim, o que eu quero é colocar para retornar os dados e que não possa editar e que sim se eu clicar no botão de editar eu possa fazer isso e salvar.

Obrigado Micheus

Link to comment
Share on other sites

  • 0
Guest --felipe --
Do jeito que você sabe fazer como eu posso fazer como o botão editar?

Iniciante Programador você está fazendo de uma simples execução de editar uma coisa muito complicada sacou??

vou te mostrar um jeito mais simples ...

supondo que:

- utilize um DataModule(nomeado dm)

- utilize uma Query(nomeada ClientesQuery), dentro do Datamodule(dm), como Dataset.

- você utilize um DBGrid e nele selecione a linha que deseja editar.

- após encontrada a linha, é clicado em um botão "Editar".

- a tabela a ser editada é "CLIENTES" com os campos "idcliente, nome, idade".

crie um novo form e nomeie como EditarCliForm, e insira nele estes componentes:

- paleta DataControls, 3 DBEdits

- paleta DataAccess, 1 DataSource

- 1 button "Confirma", 1 button "Cancela"

primeiramente, aperte Alt+F11 e de 2 cliques no form que se encontram seus componentes de relação com banco de dados (Datasets, Database etc...), então relacione no componente Datasource a propriedade Dataset com ClientesQuery

relacione todos os 3 DBEdits com o Datasource na propriedade Datasource, e na propriedade DataField:

-DBEdit1=IDCLIENTE

-DBEdit2=NOME

-DBEdit3=IDADE

no button Confirma insira este código:

dm.ClientesQuery.applyupdates; //executa applyupdates (aplicar alterações)

close;

no button Cancela insira apenas close //ao fechar o software automaticamente cancela as alterações no evento OnClose (Ao Fechar);

no evento OnClose:

dm.ClientesQuery.cancel; //cancela as alterações ao fechar, obs: só vai cancelar o que não tiver sido aplicado em (applyupdates)

agora vá ao seu form que lista os clientes (apenas suposição), e no seu botão Editar insira o seguinte código:

dm.Clientesquery.Edit;
  EditarCliForm := TEditarCliForm.Create(nil);
  EditarCliForm.DBEdit1.enabled:=false; //supondo que o campo IDCLIENTE não possa ser mudado.
  EditarCliForm.ShowModal;
  EditarCliForm.Free;
e tá feito!! você também pode usar o EditarCliForm para Cadastrar, é so tirar a linha que desativa o DBEdit1 e trocar Edit por Append assim (logicamente no botão Cadastrar):
dm.Clientesquery.Append;
  EditarCliForm := TEditarCliForm.Create(nil);
  EditarCliForm.ShowModal;
  EditarCliForm.Free;

fechou!

abraços

Link to comment
Share on other sites

  • 0

Aqui estamos nós denovo com problemas de comunicação. :huh:

Se o Iniciante Programador partiu do exemplo do robinho, que NÃO utilizou componentes data-aware (os tal TDB...), então o exemplo bem detalhado do felipe não vai ajudar muito.

Já se ele utilizou apenas partes do exemplo do robinho, mas trabalhou com componentes data-aware, então seria bom ter informado, por que utilizando eles todo o processo é simples, e a questão de evitar edição acidental fica fácil controlar apenas definindo a propriedade AutoEdit=false do datasouce ligado aos componentes.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...