Jump to content

Recommended Posts

Posted

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

Posted

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"

Posted

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.

Posted

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 🙂

Posted (edited)

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • 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.