Fazer uma PerguntaFazer uma Pergunta
 

Respondidoevitar duplicidade (DICA)

  • quinta-feira, 29 de outubro de 2009 12:55Bruno Gaiola Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    entao, fiz um comando para salvar um novo registro que inclui,
    queria um dica de como evitar que a pessoa clique no botão salvar e salve outro registro igual
    por exemplo, uma condicional checando se ja existe o codigo ou algo assim


    Dim conn As New OleDbConnection()
            conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\CadastroDobradiças\Biblioteca_Ferragens\ferragens.mdb"
            conn.Open()


            Dim cmd As OleDbCommand = New OleDbCommand("INSERT INTO Dobradicas(Codigo, Nome, A, B, C, D, E, F, Descricao)" + ("VALUES  (@Codigo, @Nome, @A, @B, @C, @D, @E, @F, @Descrição)"), conn)

            cmd.Parameters.AddWithValue("Codigo", TextBox1.Text)
            cmd.Parameters.AddWithValue("Nome", TextBox2.Text)
            cmd.Parameters.AddWithValue("A", TextBox3.Text)
            cmd.Parameters.AddWithValue("B", TextBox4.Text)
            cmd.Parameters.AddWithValue("C", TextBox5.Text)
            cmd.Parameters.AddWithValue("D", TextBox6.Text)
            cmd.Parameters.AddWithValue("E", TextBox7.Text)
            cmd.Parameters.AddWithValue("F", TextBox8.Text)
            cmd.Parameters.AddWithValue("Descricao", TextBox9.Text)
            cmd.ExecuteNonQuery()
            conn.Close()




Respostas

  • quinta-feira, 29 de outubro de 2009 13:05LeandrodeMelloFagundes Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Respondido
    Bruno,
    existe botão Incluir e alterar ou apenas salvar?

    Se for um botão incluir e um alterar: No incluir, ao clicar desabilita o botão incluir e joga no banco depois de desabilitar. No alterar, usa o código que já existe.

    Se existe apenas o botão salvar, na regra de negócio faça uma verificação.
    If Exists(CódigoX) then
      Update
    Else
      Insert

    onde a função Exists vai no banco e valida se o código X existe ou não.

    É assim que utilizo hoje.
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)

Todas as Respostas

  • quinta-feira, 29 de outubro de 2009 13:05LeandrodeMelloFagundes Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Respondido
    Bruno,
    existe botão Incluir e alterar ou apenas salvar?

    Se for um botão incluir e um alterar: No incluir, ao clicar desabilita o botão incluir e joga no banco depois de desabilitar. No alterar, usa o código que já existe.

    Se existe apenas o botão salvar, na regra de negócio faça uma verificação.
    If Exists(CódigoX) then
      Update
    Else
      Insert

    onde a função Exists vai no banco e valida se o código X existe ou não.

    É assim que utilizo hoje.
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)
  • quinta-feira, 29 de outubro de 2009 13:08Bruno Gaiola Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    cara, tem um botão salvar e o incluir
    o incluir gera um novo mas nao salva

    mas esse salvar que eu fiz so salva se for um novo
    pois eu faço um INSER INTO
    dai se eu altero um que ja existe e salvo da erro

    como faze esse Existe no codigo acima

    tem como escreve-lo pra mim saber?


    obrigado
  • quinta-feira, 29 de outubro de 2009 13:22LeandrodeMelloFagundes Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Resposta Proposta
    Esse exist foi só um exemplo Bruno.

    A idéia é executar um comando no banco de dados para validar se o código que você quer inserir, já existe. Não faz sentido inserir um código que já existe, certo?

    Dim cmd As OleDbCommand = New OleDbCommand("Select Codigo From Dobradicas Where Codigo = @Codigo"), conn)

    Se ele retornar uma linha nesta consulta, quer dizer que já existe este código. Ai você apresenta um erro ou qualquer outra coisa que desejar.
    A idéia é mais ou menos isso... Deu pra entender?

    att
    Leandro



    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)
  • quinta-feira, 29 de outubro de 2009 14:22Bruno Gaiola Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Entendi sim cara, ve o que tem de errado :


           Dim Codigo As String

            Dim conn As New OleDbConnection()
            conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\CadastroDobradiças\Biblioteca_Ferragens\ferragens.mdb"

            conn.Open()

            Dim cmd As OleDbCommand = New OleDbCommand("Select Codigo From Dobradicas Where Codigo = @Codigo", conn)
            Dim reader As OleDbDataReader = cmd.ExecuteReader()
            If reader.HasRows Then
                reader.Read()
                Codigo = reader("Codigo").ToString()
            End If

    If codigo = "" then

    salvanovo()

    Else

    altera()




    ps. a função salvanovo executa o codigo q eu te mostei no post acima
    e a altera vai alterar o registro


    aonde esta o erro nesse codigo ?
  • quinta-feira, 29 de outubro de 2009 15:36LeandrodeMelloFagundes Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Resposta Proposta
    você não adicionou o parâmetro @Codigo??
    Que tipo de erro deu?
    A princípio, a sequencia está correta.

    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)
  • quinta-feira, 5 de novembro de 2009 13:46Rafael_Lima Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Crie uma stored procedure onde nela você valida se sera feito o insert ou ( update ou nada )


    create procedure usp_InsDobradica
    @codigo numeric(5)
    @descricao varchar(50)
    as


    if exists(select codigo from dobradicas where codigo = @codigo)
       Begin
          --- siginifica que já existe, você poderia verificar pela descricao ou qualquer campo

         -- Decida se vou fazer o update..
         update dobradica set descricao = @descricao where codigo = @codigo
        End

    Else
       Begin
       --- os dados nao foram encontrados
       Insert dobradica values ( @codigo, @descricao )
       End


    Rafael Lima
  • sábado, 7 de novembro de 2009 14:51Nelson Borges Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Rafael,

    Bem lega a sua dica, eu apenas queria fazer uma ressalva: Eu não gosto muito de deixar essa verificação no banco, pq sua aplicação dispara o comando (1 processo) , aguarda a resposta (2 processos) o banco recebe, verifica o registro (3 processos), executa ação (4 processo) e responde a aplicação (5 processos).

    Eu prefiro mesmo as opções acima: verifico a condição(1 processo), se estiver dentro disparo o processo para o banco senao eu nao faço nada..

    Saca ?

    Abs,
    Nelson Borges - http://nelsonborgesjr.spaces.live.com/blog/ "Ao infinito e além.. "