Ir para o conteúdo
FasterProgm

[Resolvido] Alteração de Dados Pessoais

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por ribeiro55
syntax

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.