Jump to content

Recommended Posts

Posted

Tenho uma Class com o objectivo de guardar varias variaveis que puderam ser ustilizadas varias vezes ao longo do programa apos o login ser feito. O problema é que para estas serem reconhecias nos diferentes WebForms tenho que no inicio de cada um (WebForm) fazer um Dim Classe As New ClassAcesso para estas serem reconhecidas

*ClassAcesso é o nome dado a Class

O grande problema é que depois ao guarda-las na class e a tentar utilizalas nos diferentes webforms elas estão fazias

A class:

Imports System.Data.SqlClient
Public Class ClassAcesso
   'ligação a BD SQL
   Public ligacao As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Jorge\Desktop\Filet Mignon\PAP\PAPWEB\PAPWEB\bin\PAPSQL_DADOS.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")
   'Dados dos professores
   Public codProf As Integer
   Public CCProf As String
   Public nomeProf As String
   Public emailProf As String
   Public turmaDT As String
   Public turmaEscolhida As String
   Public CodDis As Integer

   'Dados dos alunos
   Public NumeroProcessoAluno As Integer
   Public NumeroAluno As Integer
   Public NomeAluno As String
   Public CCAluno As String
   'Dados do Enc Edu
   Public EECC As String
   Public EENif As Integer
   Public EENome As String
   Public EEEmail As String
   Public EETelemovel As Integer
   Public EEMorada As String

Local onde gravo os dados nas variaves da class e onde acho que está o problema (negrito)

Imports System.Data.SqlClient
Public Class PaginaLogin
   Inherits System.Web.UI.Page
[b]    Dim Classe As New ClassAcesso[/b]

   Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    lblTurma.Visible = False
    lblPass.Visible = False
    lblUser.Visible = False
    txbPass.Visible = False
    txbUser.Visible = False
    tbxTurma.Visible = False
    Label1.Visible = False
    btnLogin.Visible = False

   End Sub
   Private Sub Ddl_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles Ddl.SelectedIndexChanged

   End Sub
   'Contralo as lbls e txtb a serem activadas concuante o acesso
   Public Sub ControlarLbl()
    If Ddl.SelectedItem.Value = 0 Then
	    lblPass.Visible = True
	    lblTurma.Visible = True
	    lblUser.Visible = True
	    txbPass.Visible = True
	    txbUser.Visible = True
	    Label1.Visible = True
	    btnLogin.Visible = True
	    tbxTurma.Visible = True
    Else
	    lblPass.Visible = True
	    lblTurma.Visible = False
	    lblUser.Visible = True
	    txbPass.Visible = True
	    txbUser.Visible = True
	    tbxTurma.Visible = False
	    Label1.Visible = False
	    btnLogin.Visible = True
    End If
   End Sub
   Private Sub btnLogin_Click(sender As Object, e As System.EventArgs) Handles btnLogin.Click
    'Se o Login for confirmado e for professor
    If Ddl.SelectedValue = 1 Or Ddl.SelectedValue = 0 Then
	    GuardarDados(1)
	    Login()
    ElseIf Ddl.SelectedValue = 2 Then
	    GuardarDados(2)
	    Login()
    Else
	    GuardarDados(3)
	    Login()
    End If
   End Sub
   Private Sub GuardarDados(ByVal numero As Integer)
    Classe.ligacao.Open()
    Dim RegistoDados As SqlDataReader
    If numero = 1 Then
	    'Guarda os dados relativos ao Professor Logado e guarda-os nas variaveis globais
	    Dim queryDadosProf As New SqlCommand("SELECT * FROM Professores WHERE CCProf ='" & txbUser.Text & "'and PWDCOMPARE( '" & txbPass.Text & "', NIFProf) =1", Classe.ligacao)
	    RegistoDados = queryDadosProf.ExecuteReader
	    'Le enquanto houver dados
	    While (RegistoDados.Read())
		    Classe.codProf = RegistoDados(0)
		    Classe.nomeProf = RegistoDados(1)
		    Classe.emailProf = RegistoDados(3)
		    Classe.CCProf = RegistoDados(4)
	    End While
	    RegistoDados.Close()
	    If Ddl.SelectedValue = 0 Then
		    'Query para selecionar a direção de turma do DT
		    Dim queryTurmaDT As New SqlCommand("SELECT DiretoresTurma.IDTurma FROM DiretoresTurma INNER JOIN Professores ON DiretoresTurma.CodProf = Professores.CodProf WHERE DiretoresTurma.CodProf = '" & Classe.codProf & "' and DiretoresTurma.IDTurma = '" & tbxTurma.Text & "'", Classe.ligacao)
		    Classe.turmaDT = queryTurmaDT.ExecuteScalar
	    End If
    ElseIf numero = 2 Then
	    'Query para consultar os dados do aluno
	    Dim queryDadosAluno As New SqlCommand("SELECT * FROM ALUNOS WHERE NumProcesso ='" & txbUser.Text & "' and CCAluno = '" & txbPass.Text & "'", Classe.ligacao)
	    'Atribuir os dados do aluno as respectivas variaveis globais
	    RegistoDados = queryDadosAluno.ExecuteReader
	    'Le enquanto houver dados
	    While RegistoDados.Read
		    Classe.NumeroProcessoAluno = RegistoDados(0)
		    Classe.NumeroAluno = RegistoDados(1)
		    Classe.NomeAluno = RegistoDados(2)
		    Classe.CCAluno = RegistoDados(3)
	    End While
    End If

   End Sub
   Private Sub Login()
    'Variavel que verifica se é ou não DT da turma escolhida
    Dim verificarloginDT As Integer
    Dim VerificarLogin As Integer
    If Ddl.SelectedValue = 0 Or Ddl.SelectedValue = 1 Then
	    'Conta o Numero de Professores com o Utilizador e a Password introduzidos nas txtb e se for 1 o Login está correcto
	    Dim queryContarProfs As New SqlCommand("SELECT COUNT(*) FROM Professores WHERE CCProf ='" & txbUser.Text & "' and PWDCOMPARE( '" & txbPass.Text & "', NIFProf) =1", Classe.ligacao)
	    'Atribui o valor da query à variavel VerificaLogin
	    VerificarLogin = queryContarProfs.ExecuteScalar

	    'Se o verifica Login é porque os dados introduzidos estão errados 
	    If VerificarLogin = 0 Then
		    MsgBox("Tentativa de Login falhada")
		    txbPass.Text = ""
		    txbUser.Text = ""
		    Classe.ligacao.Close()
		    'Se o login for 1 e se escolher professor
	    ElseIf VerificarLogin = 1 And Ddl.SelectedValue = 1 Then
		    MsgBox("Bem Vindo Professor(a) " & Classe.nomeProf)
		    Response.Redirect("EscolherTurmaProfessor.aspx")
		    'Se o login for verificado e se for DT
	    ElseIf VerificarLogin = 1 And Ddl.SelectedValue = 0 Then
		    'Verifica se este Professor tambem é DT da turma escolha na Txtb
		    Dim queryConfirmarLoginDT As New SqlCommand("SELECT COUNT(DiretoresTurma.IDTurma) " &
																		   "FROM DiretoresTurma INNER JOIN " & _
																		   "Professores ON DiretoresTurma.CodProf " & _
																		   "= Professores.CodProf WHERE " & _
																		   "DiretoresTurma.CodProf = '" & Classe.codProf & _
																		   "' and DiretoresTurma.IDTurma = '" & _
																		   Classe.turmaDT & "'", Classe.ligacao)
		    'Guarda o Valor da query se for 1 é DT senão não é como é obvio ou se é boi ou baca!
		    verificarloginDT = queryConfirmarLoginDT.ExecuteScalar
		    queryConfirmarLoginDT.ExecuteScalar()
	    End If
	    'Se for zero não é dt
	    If verificarloginDT = 0 And Ddl.SelectedValue = 0 Then
		    MsgBox("Tentativa de Login falhada")
		    txbPass.Text = ""
		    txbUser.Text = ""
		    tbxTurma.Text = ""
		    Classe.ligacao.Close()
	    ElseIf verificarloginDT = 1 And Ddl.SelectedValue = 0 Then
		    MsgBox("Bem Vindo Diretor(a) " & Classe.nomeProf)
		    Classe.ligacao.Close()
	    End If
	    'Se o acesso escolhido for Aluno
    ElseIf Ddl.SelectedValue = 1 Then

    ElseIf Ddl.SelectedValue = 2 Then

    End If
   End Sub
End Class

E quando eu tento retirar o valor para testar se foram guardadas ou não e não e as MsgBox vem vazias

Imports System.Data.SqlClient
Public Class EscolherTurmaProfessor
   Inherits System.Web.UI.Page
[b]    Dim Classe As New ClassAcesso[/b]
   Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    MsgBox(Classe.nomeProf)
    MsgBox(Classe.emailProf)
    LblTitulo.Text = "Bem Vindo Professor" & Classe.nomeProf
   End Sub
Posted

A web é stateless, o que quer dizer que cada post inicia tudo de novo.

Podes dar a volta de várias formas, como por exemplo, guardar o conteúdo em sessões.

A forma de funcionar seria algo como, no inicio criavas a variavel e verificavas se existia a sessão, Se não existir, instancias o objecto ficando limpo (como fazes agora).

Caso a sessão exista, atribuis o conteúdo da sessão à variavel.

E quando fizeres alterações ao objecto, gravas na sessão.

Tens aqui um exemplo: http://www.aspdotnet-suresh.com/2012/11/aspnet-session-state-example-in-c-vbnet.html

Posted

Crio já ter entendido, e ao criar então uma sessão ele guarda estes valores certo? E se criar um sessão na classe estas variasveis seram globais a todos os forms e estaram sempre disponiveis certo?

Posted

É normal ao usar uma partial class ele não me assumir as lbls e DropdownLists's porque elas existem, os nomes estão bem escritos, só diz que podem estar inacessiveis devido ao nivel de proteção

Posted

Se dá essa mensagem é porque estás a aceder de fora da classe.

Esses controls estão criados como private ou protected, por isso não ficam acessíveis de fora.

Podes mudar para public, mas não estou bem a ver como estás a usar isso para precisar de alterar

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.