• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

bioshock

VB 2008 Guardar Informações.

36 mensagens neste tópico

Boa tarde.

É o seguinte, eu pretendo que cada Utilizador possa apenas e só ver os seus dados que Alterou/Guardou/Adicionou.

Pensei em:

Tabela Utilizadores: Campos - IDUtilizador, Utilizador, Password.

Tabela Documentos(Por exemplo): Campos - IDDocumento, Documento, Descrição, Utilizador.

O IDUtilizador fazia relação com Utilizador da tabela Documentos.

Trocando por miúdos: Quando entro na minha aplicação, cada utilizador tem o seu Username e Password.

E cada utilizador só pode ver o que efectuou no programa, não pode ver os documentos das outras pessoas.

Exemplo:

Utilizador A: Preencheu o Campo "Nome" com o seguinte texto: "12345"

Utilizador B: Preencheu o Campo "Nome" com o seguinte texto: "abcd"

Se eu entrar como utilizador A só posso ver o que eu escrevi no Campo "Nome" e o utilizador B o que escreveu no Campo "Nome".

Fiz-me entender? A minha dúvida instalou-se nas relações da Base de Dados, queria saber se estou a começar bem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas depois a utilizar no VB ele automaticamente faz isso? (Separa a informação..?)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É simples:

SELECT * FROM Documentos WHERE Utilizador='utilizador A'

irá retornar apenas os documentos do utilizador A

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas acho que não me fiz perceber.

É o seguinte:

Na minha aplicação, podem existir vários utilizadores.

Cada utilizador só pode ver a sua informação!

O problema é que eu estou a entrar com o Utilizador A, mas vejo o que o Utilizador B fez ou outro Utilizador qualquer. Percebes?

Vou por aqui um Print:

http://img301.imageshack.us/img301/5826/imagem1tar.jpg

Se o Utilizador A escrever no nome "123" gravar e sair o Utilizador B se entrar no programa não pode ver o que ele adicionou.

Fiz-me entender? Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se alguém tiver alguma ideia que apite, nem que seja para eu vasculhar pelo google.

Preciso mesmo, obrigado!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Adiciona uma coluna na Base de Dados para inserires o nick do utilizador que insere os dados e depois quando pedires para listar, fazes um select em que este apenas retorna todos os dados em que nessa coluna tenha um nick igual ao do utilizador que fez o Login...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Adiciona uma coluna na Base de Dados para inserires o nick do utilizador que insere os dados e depois quando pedires para listar, fazes um select em que este apenas retorna todos os dados em que nessa coluna tenha um nick igual ao do utilizador que fez o Login...

Boas obrigado pela ajuda.

Na base de dados, tenho:

Tabela Utilizadores: IDUtilizador, username, password

Tabela Documentos: IDDocumentos, Descrição, Assunto, Utilizador.

Era a isto que te estavas a referir? Se sim, até aqui tudo bem.

Depois quanto ao Select, tenho isto no Form Login:

        Dim OLE As String = "SELECT count(*) From Utilizadores where utilizador = @utilizador and password = @password;"

        Dim myConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & My.Application.Info.DirectoryPath & "\BaseDeDados.mdb';Persist Security Info=True;"
        Dim connection As New OleDbConnection(myConnectionString)

        Dim command As New OleDbCommand(OLE, connection)
        command.Parameters.Add("@utilizador", OleDbType.VarChar).Value = TextBox1.Text

        command.Parameters.Add("@password", OleDbType.VarChar).Value = TextBox2.Text
        connection.Open()
        Dim x As Object
        x = command.ExecuteScalar
        If Integer.Parse(x.ToString) = 1 Then
            MsgBox("Login efectuado com sucesso!", MsgBoxStyle.Information, "Login")
            FormEscolha.Show()
            Me.Close()
        Else
            MsgBox("Número de Identificação ou Acesso errados", MsgBoxStyle.Information, "Login")
        End If
        connection.Close()
        connection = Nothing
        command = Nothing

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso é para o login, agora para os dados basta como eu disse acima, e cada utilizador só vê o seus próprios documentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

     

  Dim OLE As String = "SELECT * From Documentos where utilizador = @utilizador;"

        Dim myConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & My.Application.Info.DirectoryPath & "\BaseDeDados.mdb';Persist Security Info=True;"
        Dim connection As New OleDbConnection(myConnectionString)

        Dim command As New OleDbCommand(OLE, connection)
        connection.Open()

Isto weasel? Se sim, devo colocar este código aonde? No form dos Documentos (aonde inserimos a nossa informação?)

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não te esqueças de relacionar na base de dados o Utilizador como foreign key para o IdUtilizador da outra tabela.

Assim evitas inserir ids inválidos nessa tabela.

Para as querys, assim q fazes o login, retornas o Id do utilizador, de modo a q possas filtrar as pesquisas por esse Id.

Mas parece-me q estás no bom caminho, força nisso.

Quanto á tua ultima pergunta, o código de acesso á bd deve estar separado da apresentação, e da lógica de negócio, numa camada á parte exclusiva para acesso a dados.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não te esqueças de relacionar na base de dados o Utilizador como foreign key para o IdUtilizador da outra tabela.

Assim evitas inserir ids inválidos nessa tabela.

Para as querys, assim q fazes o login, retornas o Id do utilizador, de modo a q possas filtrar as pesquisas por esse Id.

Mas parece-me q estás no bom caminho, força nisso.

Sim, nas relações tem o Foreign Key do IDUtilizador e Utilizador.

Quanto às querys..estás-te a referir a usar um ExecuteReader? Mas no meio do código?

Obrigado pela ajuda!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bom bom...é criares uma variável da aplicação que corresponde ao ID do utilizador.... preenche-la quando fazes o login...e não tens que te preocupar mais...

Depois... filtrar isso por utilizador utilizando os objectos automaticos...deve ser um bocado complicado, mas no reader...efectivamente, as tuas tabelas devem ter uma espécie de coluna de auditoria onde gravas quem registou....depois na consulta... filtras sempre com esse campo... ou seja... o utilizador dos dados tem que ser sempre o tipo que esta logado.... é uma hipótese...e simultaneamente um início para um esquema de permissões mais sofisticado..até porque... há sempre alguem que tem que poder ver tudo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bom bom...é criares uma variável da aplicação que corresponde ao ID do utilizador.... preenche-la quando fazes o login...e não tens que te preocupar mais...

Depois... filtrar isso por utilizador utilizando os objectos automaticos...deve ser um bocado complicado, mas no reader...efectivamente, as tuas tabelas devem ter uma espécie de coluna de auditoria onde gravas quem registou....depois na consulta... filtras sempre com esse campo... ou seja... o utilizador dos dados tem que ser sempre o tipo que esta logado.... é uma hipótese...e simultaneamente um início para um esquema de permissões mais sofisticado..até porque... há sempre alguem que tem que poder ver tudo...

Vou-te ser sincero, deixaste-me mais baralhado.

Eu a pensar que era só por mais uma linha de código, ou algo do género, como o Bruno disse..

Estou a ver que estou feito ao bife, e tenho mesmo que apresentar isto :|

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok...queria dizer basicamente que estas no bom caminho....

faz como o bruno disse....so te estava a alertar que é chato teres que ir ver qual é o utilizador que esta logado sempre que queres filtrar...de qualquer modo, cada linha da tabela deve ficar com a indicação de quem registou (foi o que eu chamei auditoria)...o resto já era uma divagação minha....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas é com o comando Reader?

Eu não me importo de fazer seja o que seja, desde que me funcione..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

yap..e com o redader... a instrução do select tem que reflectir tb o user logado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dim OLE As String = "SELECT count(*) From Utilizadores where utilizador = @utilizador and password = @password;"

        Dim myConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & My.Application.Info.DirectoryPath & "\BaseDeDados.mdb';Persist Security Info=True;"
        Dim connection As New OleDbConnection(myConnectionString)

        Dim command As New OleDbCommand(OLE, connection)
        command.Parameters.Add("@utilizador", OleDbType.VarChar).Value = TextBox1.Text

        command.Parameters.Add("@password", OleDbType.VarChar).Value = TextBox2.Text
        connection.Open()
        Dim x As Object
        x = command.ExecuteScalar
        If Integer.Parse(x.ToString) = 1 Then
            MsgBox("Login efectuado com sucesso!", MsgBoxStyle.Information, "Login")
            FormEscolha.Show()
            Me.Close()
        Else
            MsgBox("Número de Identificação ou Acesso errados", MsgBoxStyle.Information, "Login")
        End If
        connection.Close()
        connection = Nothing
        command = Nothing

Eu agora não posso testar, mas pelo que vocês me estão a dizer:

No Form Login - Butão Entrar - tenho esse código em cima, portanto: Terei que fazer um ExecuteReader.

Mas quanto ao Select? Eu utilizo o Select count para ir-me buscar os utilizadores.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Testei, mal ou bem, o que vocês me disseram e não consegui ;)

Alguma ajuda?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vou deixar aqui uma imagem das relações da base de dados, e todo o código que tenho.

Relações:

http://img198.imageshack.us/i/imagem1pzv.jpg/

Form Login:

Dim OLE As String = "SELECT * FROM Utilizadores WHERE [utilizador] = @utilizador and [Password] = @Password"

        Dim myConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & My.Application.Info.DirectoryPath & "\BaseDeDados.mdb';Persist Security Info=True;"
        Dim connection As New OleDbConnection(myConnectionString)

        Dim command As New OleDbCommand(OLE, connection)
        command.Parameters.Add("@utilizador", OleDbType.VarChar).Value = TextBox1.Text

        command.Parameters.Add("@password", OleDbType.VarChar).Value = TextBox2.Text
        connection.Open()
        Dim reader As OleDbDataReader = command.ExecuteReader()
        If reader.HasRows Then
            While reader.Read()
                MsgBox("Login efectuado com sucesso!", MsgBoxStyle.Information, "Login")
                FormEscolha.Show()
                Me.Close()
            End While

        Else
            MsgBox("Número de Identificação ou Acesso errados", MsgBoxStyle.Information, "Login")
        End If
        connection.Close()
        connection = Nothing
        command = Nothing

Form Registo

' Texto de ligação à base de dados
        Dim myConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & My.Application.Info.DirectoryPath & "\BaseDeDados.mdb';Persist Security Info=True;"
        ' Comando que irá inserir dados na tabela "utilizadores" em que os campos
        ' "username" e "password" são passados através de parâmetros
        Dim OLE As String = "INSERT INTO utilizadores([username], [password]) VALUES (@username, @password);"

        ' Cria uma nova ligação à base de dados
        Dim connection As New OleDbConnection(myConnectionString)

        ' Criação do comando indicando a instrução e a ligação
        Dim command As New OleDbCommand(OLE, connection)

        ' Indicação dos parâmetros que serão inseridos
        command.Parameters.Add("@username", OleDbType.VarChar).Value = TextBox1.Text
        command.Parameters.Add("@password", OleDbType.VarChar).Value = TextBox2.Text
        ' Abre a ligação, executa o comando e guarda em "x" o número de registos inseridos
        connection.Open()

        Dim x As Object = command.ExecuteNonQuery()
        If x < 1 Then
            MessageBox.Show("A operação efectuada não retomou qualquer resultado.")
        Else
            MsgBox("Registo efectuado com sucesso!")
            Me.Close()
        End If

        ' Fecha a ligação e limpa as variáveis
        connection.Close()
        connection = Nothing
        command = Nothing

Desculpem a insistência, mas não sou o único com este problema, já procurei aqui no forúm e pelo menos outra pessoa tinha o mesmo problema, mas pelos vistos não foi solucionado. Obrigado!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas, caso não tenhas lido os pots anteriores muito resumidamente:

Tenho 3 Forms:

FormLogin

FormRegisto

FormInformação

Quando entro no programa, faço o Registo ( Utilizador 1 ) e, para veres qual é a minha dúvida, faço outro Registo ( Utilizador 2 ).

Feito isto, no Login ponho os dados do Utilizador 1 e entro no FormInformação.

Digito alguns dados, nas textboxs, Gravo e saio do programa.

Volto a entrar no programa e faço Login com o Utilizador 2, entro no FormInformação e vejo os dados que acrescentei com o Utilizador 1....

E eu não queria que isto acontecesse. Ou seja, cada utilizador só poderia ver as suas informações que digita no FormInformações.

Percebeste? Tipo, nos posts anteriores, aconselharam-me a usar um ExecuteReader, que foi o que andei a tentar fazer, mas não consegui.

Obrigado pela ajuda.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estou a ver que é relativamente dificil fazer o que pretendo.. :|

0

Partilhar esta mensagem


Link 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