Jump to content
FasterProgm

[Resolvido] Alteração de Dados Pessoais

Recommended Posts

FasterProgm

Boas,

Vinha aqui expor uma dúvida que já me está a baralhar o sistema mesmo achando esta bastante fácil.

Tenho uma base de dados com a tabela utilizador.

Nesta tenho os dados: ID, Username, Password, Permissões e Nome;

O utilizador inicia sessão e então é possivel este alterar os seus dados:

Username, Password e Nome.

A dúvida é a seguinte, o username não pode ser igual a mais nenhum que esteja na tabela, como faço para garantir isso?

Estou a usar PostgreSQL e VS 2010

Preciso de ajuda, é urgente (P.S - Já não consigo pensar e preciso de fazer isto rápido)

Obrigado desde já a todos


“Algo só é impossível até que alguém duvide e resolva provar ao contrário.” Albert Einstein

Share this post


Link to post
Share on other sites
ribeiro55

Tens várias formas.

Em uma delas, podes colocar esse campo como sendo unique e o próprio Postgre rejeita-te o update, tendo tu apenas de apanhar essa rejeição do teu lado e informar ao user.

Uma outra implica que faças sempre uma query à tabela de users para verificar se o username já existe e depois deixar avançar o update ou não.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
pt_V1p3r

Na altura da criação do utilizador, em primeiro lugar procura na tabela se ele já existe.

Também podes colocar como index da tabela utilizadores o campo ID+USERNAME garantindo assim que o motor de sgbd nao ira aceitar duplicados mesmo que os tentes criar.

Share this post


Link to post
Share on other sites
FasterProgm

Sim eu já percebi que tenho de fazer uma consulta, acho mais viável pelo lado do Postgre mas quero mesmo fazer no VS esse código.

O algoritmo passa basicamente em fazer uma consulta à tabela e procurar se existe igual ao atual que se encontra na textbox, se existir aparece uma mensagem de erro personalizada e diz ao utilizador que não é válido não fazendo o UPDATE.

Eu queria era mesmo em linhas de código que estou mesmo sem noção das coisas já, se fosse possivel arranjarem-me isso ficava bastante grato.

Obrigado pela atenção e pelas respostas :)


“Algo só é impossível até que alguém duvide e resolva provar ao contrário.” Albert Einstein

Share this post


Link to post
Share on other sites
FasterProgm

Sim eu já percebi que tenho de fazer uma consulta, acho mais viável pelo lado do Postgre mas quero mesmo fazer no VS esse código.

O algoritmo passa basicamente em fazer uma consulta à tabela e procurar se existe igual ao atual que se encontra na textbox, se existir aparece uma mensagem de erro personalizada e diz ao utilizador que não é válido não fazendo o UPDATE.

Eu queria era mesmo em linhas de código que estou mesmo sem noção das coisas já, se fosse possivel arranjarem-me isso ficava bastante grato.

Obrigado pela atenção e pelas respostas :)

Obrigado pela ajuda de qualquer maneira, mas já consegui contornar a situação de outra maneira, fica aqui o código, mesmo que não percebam a intenção, fiz de maneira fácil para ser bem perceptivel:

Dim strSQL As String = String.Empty

       strSQL = "UPDATE utilizador SET username = '" & txtUser.Text & "', nome_completo = '" & txtNome.Text & "', password = '" & txtPass.Text & "' WHERE ""ID"" = '" & lbID.Text & "';"

       Try
           ligacao.Open()
       Catch ex As Exception
           MsgBox("Erro de ligação com a base de dados." & vbCrLf & ex.Message & vbCrLf & ex.ToString, MsgBoxStyle.Critical, "ErrID: #001")
           ligacao.Close()
           Exit Sub
       End Try


       If txtConPass.Visible = False Then ' Verifica se a caixa de confirmação da palavra passe está invisivel
           If txtNome.Text = "" Or txtPass.Text = "" Or txtUser.Text = "" Then ' Se está então verifica se algum campo está em branco
               MsgBox("Os dados não estão totalmente preenchidos", MsgBoxStyle.OkOnly + MsgBoxStyle.Critical, "Erro") 'caso esteja aparece esta mensagem
               ligacao.Close()
           Else
               For Each iRow As DataGridViewRow In dgvUserOculta.Rows
                   If iRow.Cells("username").Value = txtUser.Text Then
                       MsgBox("Já existe um Utilizador com esse Username", MsgBoxStyle.OkOnly + MsgBoxStyle.Critical, "Erro")
                       ligacao.Close()
                   Else
                       Dim commandSQL As New NpgsqlCommand(strSQL, ligacao)

                       commandSQL.ExecuteNonQuery()

                       commandSQL.Dispose()

                       MsgBox("Os dados foram atualizados!", MsgBoxStyle.OkOnly + MsgBoxStyle.Information, "Atualizado")

                       ligacao.Close()

                       txtUser.Enabled = False
                       txtPass.Enabled = False
                       txtNome.Enabled = False
                       txtConPass.Visible = False
                       Label6.Visible = False
                       bttCancel.Enabled = False
                       bttGravar.Enabled = False


                   End If
               Next
               End If

           End If



       If txtConPass.Visible = True Then
           If txtNome.Text = "" Or txtPass.Text = "" Or txtUser.Text = "" Then ' Se está então verifica se algum campo está em branco
               MsgBox("Os dados não estão totalmente preenchidos", MsgBoxStyle.OkOnly + MsgBoxStyle.Critical, "Erro") 'caso esteja aparece esta mensagem
               ligacao.Close()
           ElseIf txtConPass.Text <> txtPass.Text Then ' a palavra passe diferente nas duas caixas
               MsgBox("Palavras passe não correspondentes", MsgBoxStyle.OkOnly + MsgBoxStyle.Critical, "Erro")
               ligacao.Close()
           ElseIf txtConPass.Text = txtPass.Text Then ' palavra passe igual nas duas caixas
               For Each iRow As DataGridViewRow In dgvUserOculta.Rows
                   If iRow.Cells("username").Value = txtUser.Text Then
                       MsgBox("Já existe um Utilizador com esse Username", MsgBoxStyle.OkOnly + MsgBoxStyle.Critical, "Erro")
                       ligacao.Close()
                   Else
                       Dim commandSQL As New NpgsqlCommand(strSQL, ligacao)

                       commandSQL.ExecuteNonQuery()

                       commandSQL.Dispose()

                       MsgBox("Os dados foram atualizados!", MsgBoxStyle.OkOnly + MsgBoxStyle.Information, "Atualizado")

                       ligacao.Close()

                       txtUser.Enabled = False
                       txtPass.Enabled = False
                       txtNome.Enabled = False
                       txtConPass.Visible = False
                       Label6.Visible = False
                       bttCancel.Enabled = False
                       bttGravar.Enabled = False

                   End If
               Next
           End If

       End If

Edited by ribeiro55
syntax

“Algo só é impossível até que alguém duvide e resolva provar ao contrário.” Albert Einstein

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.