FasterProgm Posted March 19, 2013 at 12:42 PM Report #499644 Posted March 19, 2013 at 12:42 PM 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
ribeiro55 Posted March 19, 2013 at 12:51 PM Report #499645 Posted March 19, 2013 at 12:51 PM 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"
pt_V1p3r Posted March 19, 2013 at 12:51 PM Report #499646 Posted March 19, 2013 at 12:51 PM 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.
FasterProgm Posted March 19, 2013 at 12:55 PM Author Report #499647 Posted March 19, 2013 at 12:55 PM 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 🙂
FasterProgm Posted March 19, 2013 at 03:21 PM Author Report #499668 Posted March 19, 2013 at 03:21 PM (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 March 19, 2013 at 03:22 PM by ribeiro55 syntax
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now