Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Hell_

DBGrid - Tabela em Modo Append (Delphi 7)

Recommended Posts

Olá pessoal!

Esse é meu primeiro post e venho com uma dúvida ! :}

É o seguinte...

Quando eu ponho alguma table em modo APPEND e clico em algum registro no DBGrid,

os botões respectivos Inserir, Editar, Cancelar... ficam desabilitados informando que

o action desses botoões estão relacionados a um ActionList.

 

A Solução que encontrei para isso foi, ao clicar em NOVO e em Editar, desabiltar o DBGrid,

mas eu não queria isso, pois gostaria que quando eu colocasse a tabela em modo de edição e eu

clicasse em um registro no DBGrid, esses campos fossem capturados para os dbEdits sem os botões serem desativados.

 

Obrigado pela atenção de todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hell bom dia, acho que a sua dinâmica está um pouco errada:

 

1º você seleciona o registro no DBGrid e depois coloca o (MESMO REGISTRO)em modo de Edição, à não ser que o seu DataSource esteja com o AutoEdit em True, ai você consegue editar os registros no próprio DBGrid. Ou seja é só o registro que você selecionou que entra em modo de Edição e não a tabela inteira.

 

2º Quando você coloca a tabela no modo Insert, realmente não tem como você trocar de registros para inserir um novo. Quando eu coloco a tabela em estado [dsinsert, dsedit] os meu botões de editar e incluir tem que ficar desabilitados, porque você só pode efetuar um inserção de cada vez e somente editar um registro por vez, salvo como mencionei acima do DataSource em Auto Edição.

 

Veja se essas questões não estão interferindo no seu sistema.

 

Caso não, posta aí de novo !!!!

 

PS.: Estou me baseando genericamente, sem saber com qual BD e Conexão você está trabalhando !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiramente obrigado pela sua resposta.

Vou tentar ser um pouco mais claro.

 

O que ocorre é que, quando eu clico em Inserir e clico em um registro no DBGrid,

todos os botões ficam dasabilitados, exceto o botão editar.

 

Exemplo:

Clico em Inserir, alguns são desabilitados normalmente, como deveriam.

Clico em Inserir e, logo depois, clico em um resgitro no DBGRid, todos os botões ficam dasabilitados, exceto o botão editar.

 

Estou usando Delphi 7, Mysql SQL, ADOConnection

 

se poder, me adiciona no msn helsonaraujo@hotmail.com :}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hell vamos trabalhar no campo da suposição.

 

você tem uma tela de cadastro(exemplo) e nela você tem vários DBEdits e um DBGrid, vou tentar visualizar o q está acontecendo:

 

(INCLUIR), NÃO PRECISA SELECIONAR NENHUM REGISTRO NO DBGrid, PQ É INSERIDA UMA LINHA(NOVO REGISTRO)EM BRANCO.

 

DÚVIDA: APÓS A INCLUSÃO você DA UM POST NA TABELA E OS BOTÕES SÃO HABILITADOS NOVAMENTE OU NÃO ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, voltam ao normal.

 

Sobre o inser eu sei...

 

O problema que eu tenho é que, se um "USUARIO" for inserir um novo

registro (clicar em inserir) e ,eventualmente, depois ele selecionar um registro para

reaproveitar alguns valores dos campos do DBGrid.

 

Exemplo:

Tenho uma tabela cheia de campos, muitos campos.

Vou inserir um novo registro, e para eu não digitar todos os campos, eu seleciono um registro

para os DBEdits campturarem os valores respectivos.

 

Obrigado mais uma vez pela resposta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hel uma idéia seria que o DBGrid seja ligado a uma query assim o usuário não tera problema em acessar os dados do grid pq ele não esta ligado diretamente a tabela. Monte um select selecinar todos os dados da tabela.

 

Quanto aos botões toda vez que a tabela muda os estado o botão vai junto isso pq esta ligado ao actionlist.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia a todos.

 

Hell, voce não faz idéia das regras de segurança do banco de dados que voce está violando com essa lógica que voce apresentou, e este é o problema, certas vezes, de se trabalhar com componentes que encapsula códigos de acesso ao banco, como o DBGrid por exemplo, que realmente facilita a vida de muitos desenvolvedores, porém oculta o conhecimento daqueles que estão iniciando.

 

O que o nosso Amigo Wllf expôs, não só envolve lógica, mas também envolve certas regras que preserva a segurança do Banco de dados. Mas como assim ???

 

Vamos por etapa.

 

1º) Voce aciona Append ou Insert (Coloca a tabela em modo de inserção), neste momento a tabela cria uma estrutura de registro em branco, esperando que o usuário entre com os dados nos respectivos campos.

 

2º) Quando voce aciona a Busca de registro na tabela (Usando os sistemas de buscas convencionais tais como Filter, locate e etc), ele vai varrer a tabela em busca do registro, pera ai, o que aconteceu com o registro em branco recém criado, se perdeu ??? OPS !!!,

 

Pois é, a sorte que os componentes atuais do Delphi são preparados para quando isto acontecer, eles automaticamente cancelam a inserção e inicia a busca nos registros, colocando a tabela em modo de navegação (Browse), e ai voce vai novamente vai clicar o Inserir, o que acontece e que ele vai criar novamente o registro em Branco e posicionar o ponteiro da tabela nele e não no registro que voce quer editar

 

Antigamente quando não havia procedimentos para se evitar isso, muita das vezes ocorria o travamento da tabela, corrompendo-a

 

Como o DBGrid está ligado a um DataSource que está ligado a uma query, ao se clicar em uma de suas linhas, automaticamente aciona o sistema de varredura da tabela, para posicionamento de ponteiro interno de registros da mesma.

 

 

Procedimentos a serem adotados;

1º) Se voce pretende verificar se o registro já existe no banco de dados para não duplicar o registro, crie um procedimento de busca nos registros antes de acionar o Append ou Insert, se o registro já existir, então você terá a opção de acionar o Edit e não Append ou Insert, pois o registro foi encontrado e posicionado para o método Edit. Se o registro não for localizado, ai sim voce aciona o Append ou Insert.

2º) Antes de acionar o Edit, faça o mesmo procedimento de busca, se o registro for encontrado então acione o Edit, caso contrário, envie uma mensagem ao usuário que não foi encontrado o registro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.