none
Bloquear a Alteração de um Campo RRS feed

  • Pergunta

  • Boa Tarde Pessoal,

    Estou com um problema no sistema da empresa que já está me tirando do sério e quem sabe vocês poderiam me ajudar.

    Tenho uma tabela de parâmetros na qual informamos todos as funções que os caixas da loja executam.

    Nesta tabela, tenho uma coluna chamada "PARÂMETRO" com uma linha chamada "EFETUA_VENDA" e tenho uma outra coluna chamada "VALOR_ATUAL" com a resposta ao PARÂMETRO "EFETUA VENDA", que no nosso caso é .T. ou .F. (True ou False).

    Porém o valor True fica sendo alterado diversas vezes por dia para False, e assim que o caixa é reiniciado, o mesmo não consegue efetuar vendas. Já tentei diversas vezes descobrir o motivo do valor se alterar, mas infelizmente não consegui.

    Gostaria de saber, se existe alguma forma de eu bloquear este valor como TRUE, para que ele fique sempre assim e não seja mais alterado (a não ser que eu realmente faça o update para atualiza-lo)

    Desde já, agradeço a atenção de todos!

    • Tipo Alterado Giovani Cr terça-feira, 15 de abril de 2014 13:51
    • Tipo Alterado Giovani Cr terça-feira, 15 de abril de 2014 13:51
    • Tipo Alterado Durval RamosModerator terça-feira, 20 de maio de 2014 23:23 Pergunta com definição de resposta
    quarta-feira, 9 de abril de 2014 14:53

Respostas

  • Douglas,

    Crie uma trigger na sua tabela para evitar o UPDATE quando ocorrer alterações nesta consulta. Veja um exemplo abaixo considerando que o nome da sua tabela "TB_PARAMETRO":

    ALTER TRIGGER [dbo].[TU_PARAMETRO]
    ON [dbo].[TB_PARAMETRO]
    AFTER UPDATE AS 
    BEGIN
      IF UPDATE(VALOR_ATUAL)
    	BEGIN
    		RAISERROR ('ALTERAÇÃO INDEVIDA !', 16, 10);
    		ROLLBACK
    	END
    END
    GO

    Quando você precisar alterar este campo, basta desabilitar à Trigger.

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    quarta-feira, 9 de abril de 2014 18:43
    Moderador

Todas as Respostas

  • Já tentou "setar" o valor default deste campo?

    Pelo que eu me lembre, não é possível "travar" o valor de um campo, exceto por permissão de escrita na tabela.

    quarta-feira, 9 de abril de 2014 15:09
  • Ainda não,

    Se caso eu setar True como Default ele vai procurar sempre mante-lo assim até que eu queria alterá-lo?!

    E qual o comando que utilizo para setar o Default?!

    quarta-feira, 9 de abril de 2014 15:24
  • Porém o valor True fica sendo alterado diversas vezes por dia para False, e assim que o caixa é reiniciado, o mesmo não consegue efetuar vendas. Já tentei diversas vezes descobrir o motivo do valor se alterar, mas infelizmente não consegui.

    Me surgiu uma dúvida nesta parte.

    Não existe alguma função no sistema que esteja dando um update neste campo?

    quarta-feira, 9 de abril de 2014 17:11
  • Douglas,

    Crie uma trigger na sua tabela para evitar o UPDATE quando ocorrer alterações nesta consulta. Veja um exemplo abaixo considerando que o nome da sua tabela "TB_PARAMETRO":

    ALTER TRIGGER [dbo].[TU_PARAMETRO]
    ON [dbo].[TB_PARAMETRO]
    AFTER UPDATE AS 
    BEGIN
      IF UPDATE(VALOR_ATUAL)
    	BEGIN
    		RAISERROR ('ALTERAÇÃO INDEVIDA !', 16, 10);
    		ROLLBACK
    	END
    END
    GO

    Quando você precisar alterar este campo, basta desabilitar à Trigger.

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    quarta-feira, 9 de abril de 2014 18:43
    Moderador
  • Então,

    acredito que sim, e penso que esta alteração está vindo do caixa para a base.

    Não que o operador de caixa esteja alterando, mas por algum motivo o sistema de PDV altera o valor.

    quarta-feira, 9 de abril de 2014 18:59