Ir ao conteúdo
  • Cadastre-se

joseph_dev

Membro Pleno
  • Posts

    108
  • Cadastrado em

  • Última visita

posts postados por joseph_dev

  1. Po cara, eu fiz em mysql. Foi mal. Segue em mssql:

    CREATE TRIGGER ex2_itempedido_trg  
    ON ex2_itempedido 
    AFTER INSERT  
    AS  
      BEGIN
      DECLARE
        @codproduto INT,
        @qtdpedido INT
    
        SELECT @qtdpedido = quantidade, @codproduto = codproduto FROM INSERTED
    
       	UPDATE ex2_produto SET quantidade = quantidade - @qtdpedido WHERE codproduto = @codproduto;
      END
    GO

    Você tem uma espécie de tabela temporária (espelho da tabela afetada) com os registros inseridos (INSERTED), atualizados (UPDATED) ou deletados (DELETED). Sendo assim você pode fazer a atualização da quantidade na mesma trigger em cada operação. Nesse caso na linha "AFTER INSERT", ficaria "AFTER INSERT, UPDATE, DELETE" e voce faz o tratamento para cada situação.

     

    Seria bom pensar em um campo "situacao" na tabela de pedido para indicar se o pedido foi cancelado, devolvido ou algo assim. E então no UPDATED voce faz o tratamento para repor essa quantidade no estoque. Desse modo não perde o registro do pedido.

  2. 18 horas atrás, joseph_dev disse:

    O primeiro registro que achei do google:

    https://br.easeus.com/file-recovery/recuperar-documento-txt-nao-salvo-excluido-perdido-no-windows-10.html

     

    Vê se o método 1 funciona.

    No método 1 não precisa baixar programa. Mas acho q deveria ser feito logo após o desligamento. O método 2 é apenas para arquivos excluídos, que não é o seu caso. Caso precise usar mesmo um bloco de notas, use o notepad++, esse sim salvaria seu trabalho nessa situação.

    Bola pra frente. Boa sorte no trabalho!

    • Curtir 1
  3. Essa propriedade corresponde ao conteúdo html do elemento em questão.

    Ex:

    <div>
      <span>Meu conteúdo.</span>
    </div>

    Quando você "pega" o innerHTML dessa div acima você tem: "<span>Meu conteúdo.</span>". E quando você atribui um valor/conteúdo, você "coloca" dentro das tags <div></div>, substituindo o atual.

    Porém essa função no seu código está incompleta. A variável nome deveria se referir ao elemento <p>. Você precisa atribuir a ela usando a função nativa do javascript getElementById.

    <script>
      function escreverNome() {
        var nome = document.getElementById("nome");
        nome.innerHTML = "Jorge Toscano";
      }
    </script>

    E algum elemento (um botão...) deve disparar essa função, ou então colocar no onload da página para assim que carregar a página executar a função.

  4. Faça um teste colocando todo seu código dentro de uma div com a classe "container". Da seguinte forma:

    ...
    <body>
      <div class="container">
        <!--Seu código fica todo aqui-->
      </div>
    </body>
    ...

    Segundo a documentação do bootstrap, esse container ajusta automaticamente seu conteúdo as dimensões da tela tornando o site responsivo.

     

    Teste também a classe "container-fluid". No lugar de "container" coloque "container-fluid". Segundo a documentação, esse container ajusta automaticamente seu conteúdo a largura total da tela. Obviamente, o responsivo é melhor.

  5. Pelo que entendi do seu esquema, acho que seria o seguinte:

    DELIMITER $
    
    CREATE TRIGGER ex2_itempedido_tgr AFTER INSERT
    ON ex2_itempedido
    FOR EACH ROW
    BEGIN	
    	SELECT @qtd_atual = quantidade FROM ex2_produto WHERE codproduto = NEW.codproduto;
       	UPDATE ex2_produto SET quantidade = (@qtd_atual - NEW.quantidade) WHERE codproduto = NEW.codproduto;
    END$

     

    Fica o desafio pra você criar a trigger quando o item for devolvido ou o pedido cancelado e atualizar a quantidade do produto.

    Dica: (AFTER DELETE OU AFTER UPDATE - Use os recursos OLD e NEW para ter acesso aos campos que estão sendo usados no momento.)

  6. De acordo com as funcionalidades citadas, precisaremos das tabelas:

     

    (só colocarei os campos principais. você completa os demais que achar necessário)

     

    -usuario (será uma pessoa com um tipo de usuário definido para acesso)

    idUsuario(int), idPessoa(fk), idTipoUsuario(fk), login(varchar), senha(varchar)

     

    -tipousuario (atendente, dentista - terão permissões e acesso a campos diferentes)

    idTipoUsuario(int), descricao(varchar)

     

    -pessoa (será paciente e também será associado a um usuário)

    idPessoa(int), nome(varchar), cpf(varchar), telefone(varchar)

     

    -tratamento (será a consulta)

    idTratamento(int), idPessoa(fk), idUsuario(fk), dataCadastro(datetime)

     

    -procedimento (tipos de procedimentos - consulta inicial, orçamento, canal, limpeza, extração...)

    idProcedimento(int), descricao(varchar)

     

    -consulta (1:n um tratamento pode ter várias consultas até finalizar. Um registro para cada dia de consulta)

    idConsulta(int), idTratamento(fk), data(datetime), observacoes(varchar), atendido(char)

     

    -consulta_procedimento (1:n - Uma consulta/tratamento pode ter vários tipos de procedimentos num mesmo dia)

    idConsulta(pk), idProcedimento(pk)

     

    Opcional: Considerando que seja permitido pagamento mesclado ex: parte em dinheiro e parte no cartão.

    -pagamento

    -tipo_pagamento (cartão, dinheiro, autorização do plano)

    -consulta_pagamento

    Caso não seja necessário, basta um campo na tabela tratamento sinalizando se foi pago ou não para simplificar.

     

    Acho que é o mais enxuto que conseguimos, seguindo as normas.

    Você consegue enxergar as chaves primárias e estrangeiras nos relacionamentos aí? Tenta fazer e caso não consiga você fala.

  7. Não vou fazer o exercício mas vou te dar um caminho.

     

    1- Se você está usando apenas um input para digitar os números, defina um delimitador para separar os números. Ex: uma vírgula. Sempre que digitar os números, separe eles pela vírgula.

    2- No PHP, você vai quebrar esse texto que tem os números separados por vírgula usando a função interna explode. Você vai obter um array com todos os números.

    3- Percorra este array e usando um array auxiliar, compare os valores e use as funções internas array_push, array_pop, array_unshift e array_splice para adicionar ao array auxiliar no início do array, em certa posição ou no fim do array. Dá uma olhada no PHP Manual para saber qual funcão você vai usar no momento a depender da comparação.

    4- Após a ordenação você pode usar a função implode no novo array ordenado e gerar uma string com os números separados por vírgula.

     

    Agora é só quebrar a cabeça aí.

  8. Você pode pesquisar pelos frameworks de backend... symfony, cake, entre outros... Eles já tem estrutura pronta para isso. Você só configura as routes/annotations do seu ambiente e o framework faz tudo sozinho.

    Caso você queira fazer isso do zero, você vai precisar criar uma classe que recebe todas as requisições e através da URL, faz a quebra da string e direciona para a respectiva classe (arquivo) php.

    Você tá querendo criar um ou configurar uma estrutura pronta?

    • Obrigado 1
  9. A grosso modo, você usa ele quando tem um campo que não tem um valor obrigatório ou que você só vai preencher ele depois. E para não armazenar um valor como um varchar em branco, uma data falsa ou 0 (quando não tem valor definido), você usa o NULL para não ocupar muito espaço no banco.

    Ex.

    Tabela FUNCIONARIO

    ID        NOME           SEXO          DATA_ADMISSAO            DATA_DEMISSAO

    5          JOÃO               M                   01/01/2018                             NULL

    12        MARIA              F                   01/01/2019                          01/10/2020

    19        PEDRO            M                   01/01/2020                             NULL

    • Curtir 1
    • Obrigado 1
  10. Você faz uma outra consulta agrupando e fazendo a soma porém une elas com o UNION.

     

    Ficaria tipo assim:

    select a, b, c, null total
    from tab
    group by x
    
    union
    
    select null a, null b, null c, sum(z) total
    from tab
    group by w

     

    Lembrando que o union exige que as duas consultas tenham a mesma quantidade de campos... por isso na segunda consulta os primeiros campos sao nulos apenas para preencher esse requisito.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!