whize13 Posted June 5, 2014 at 08:55 AM Report #558262 Posted June 5, 2014 at 08:55 AM 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
nelsonr Posted June 5, 2014 at 08:59 AM Report #558263 Posted June 5, 2014 at 08:59 AM 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
whize13 Posted June 5, 2014 at 11:14 AM Author Report #558297 Posted June 5, 2014 at 11:14 AM Ou seja mesmo eu gravando as variaveis numa classe elas levam o reset quando existe um response.redirect?
nelsonr Posted June 5, 2014 at 11:27 AM Report #558301 Posted June 5, 2014 at 11:27 AM Cada vez que ha um request, o webserver cria tudo de novo
whize13 Posted June 5, 2014 at 02:34 PM Author Report #558340 Posted June 5, 2014 at 02:34 PM 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?
nelsonr Posted June 5, 2014 at 02:44 PM Report #558343 Posted June 5, 2014 at 02:44 PM No post #2 expliquei mais ou menos o procedimento que podes usar em cada página que precisas da informação
whize13 Posted June 5, 2014 at 03:31 PM Author Report #558358 Posted June 5, 2014 at 03:31 PM Já funciona pelo menos por agora mais uma vez muito obrigado, só por mera curiosidade formou-se num profissional?
whize13 Posted June 6, 2014 at 10:04 AM Author Report #558424 Posted June 6, 2014 at 10:04 AM É 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
nelsonr Posted June 6, 2014 at 10:48 AM Report #558431 Posted June 6, 2014 at 10:48 AM 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
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