Ir para o conteúdo

Publicidade

 Estatísticas do Fórum

  • 0 Usuários ativos

    0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

Cursos Online iMasters
Foto:

DBGrid - Tabela em Modo Append (Delphi 7)

  • Por favor, faça o login para responder
6 respostas neste tópico

#1 Hell_

Hell_
  • Membros
  • 29 posts

Postado 20 janeiro 2010 - 18:04

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!
  • 0

#2 wllf

wllf
  • Membros
  • 397 posts

Postado 21 janeiro 2010 - 05:24

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 !
  • 0

#3 Hell_

Hell_
  • Membros
  • 29 posts

Postado 21 janeiro 2010 - 09:57

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 :}
  • 0

#4 wllf

wllf
  • Membros
  • 397 posts

Postado 21 janeiro 2010 - 10:19

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 ?
  • 0

#5 Hell_

Hell_
  • Membros
  • 29 posts

Postado 21 janeiro 2010 - 11:42

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.
  • 0

#6 wllf

wllf
  • Membros
  • 397 posts

Postado 21 janeiro 2010 - 11:53

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.
  • 0

#7 Discorpio

Discorpio

    O Senhor é meu Pastor e nada me faltará (Sl. 23:01)

  • Membros
  • 159 posts

Postado 22 janeiro 2010 - 11:29

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.

  • 0




Publicidade

/ins>