Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

alexandremanowar

Class x conexão

Recommended Posts

E ae pessoal beleza

 

Então estou aprimorando os meus conhecimentos no vb.net 2005 e é o seguinte, antes eu fazia a conexão via módulo, dessa forma:

 

Public conectar As String = "server=servidor;user id=root;password='';database=banco; Allow Zero Datetime=True"
  Public conn As New MySqlConnection(conectar)

E depois bastava eu usar o conn nos meus forms que estava tudo ok.

 

Andei estudando sobre class e fiz alguns exercicícios e sei que devo declarar na class e hedar nos meus forms, mas não consegui fazer isso com a conexão de banco de dados. Alguém poderia me dar exemplo e explicar como fazer isso?

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tinha posta no outro fórum, não sei se você viu e não serviu ou não viu, mas como eu sou teimoso, vai o post ae:

 

Utilizo da seguinte forma, tenho uma classe. Classes.vb

Imports Microsoft.VisualBasic
Imports System.Data.OleDb

Public Class Classes
	Inherits System.Web.UI.Page

	Public Sub Alert(ByVal Mensagem As String)
		Response.Write("<script>")
		Response.Write("alert('" & Mensagem & "')")
		Response.Write("</script>")
	End Sub
End Class

Se eu quiser usar esse sub Alert em algum formulário eu tenho que herdar a Class que eu criei, ae basta no formulário mudar sua herança, onde esta:

 

Inherits System.Web.UI.Page
Você muda para:

Inherits Classes
Repare que eu coloquei a linha: Inherits System.Web.UI.Page na minha classe por que meus formulário também necessitam dessa herança.

 

Espero ter ajudado. http://forum.imasters.com.br/public/style_emoticons/default/natal_wink.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, porque você tem que herdar a classe de conexão? meio estranho isso heim.

Flwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ae pessoal beleza! Valeu pela força

 

Então sublyer eu fiz algo parecido porém quero deixar apenas a conexão na class e quero usar os commands em outro lugar que pode ser no meu form por exemplo.

 

Fiz a class assim:

Imports MySql.Data.MySqlClient
Public Class ConexaoOnline
	Private Shared Sub criaConexao()
		Dim conectar As String = "server=servidor;user id=root;password='';database=banco; Allow Zero Datetime=True"
		Dim conn As New MySqlConnection(conectar)
	End Sub


End Class

Agora preciso acessar essa conexão do meu form e criar uma consulta no banco. Mas não estou conseguindo fazer, você pode me dar essa força?

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

alexandremanowar você vai ter que usar o Inherits nos seus forms, por exemplo no cabeçalho de uma formulário:

Imports System.Data

Partial Class Cadastro
	Inherits ConexaoOnline

	Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
	   'Codigo
	End Sub
End Class

O Inherits vai permitir que você utilize tudo que estiver público na sua classe...

Compartilhar este post


Link para o post
Compartilhar em outros sites

No meu caso eu já tenho um Inherits e não posso colocar outro dentro da minha class.

Não posso mudar o Inherits porque ele faz parte de uma class de um objeto de leitor que usa dll e preciso usar dessa forma.

Nesse caso será que eu deveria herdar a class ConexaoOnline de alguma outra forma?

Se tiver qual seria essa forma?

 

Cara valeu mesmo pela ajudar que você esta me dando e para não dar zica vou postar só nesse fórum

 

Vou fazer o seguinte para você entender o meu código aí se você conseguir me dar uma força eu agradeço:

 

Essa é a class de conexão:

Imports MySql.Data.MySqlClient
Public Class ConexaoOnline
	Public Shared Sub criaConexao()
		Dim conectar As String = "server=servidor;user id=root;password='';database=banco; Allow Zero Datetime=True"
		Dim conn As New MySqlConnection(conectar)
	End Sub
End Class

Esse é meu form e é dentro dele que preciso herdar a conexão que esta na class ConexaoOnline

Imports MySql.Data.MySqlClient
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports System.IO
Imports System.Threading
Imports Futronic.SDKHelper



Namespace Futronic.SDK.WorkedEx
	Partial Public Class MainForm

		Inherits Form
		''' <summary>
		''' This delegate enables asynchronous calls for setting
		''' the text property on a status control.
		''' </summary>
		''' <param name="text"></param>

		Private Delegate Sub SetTextCallback(ByVal text As String)

		''' <summary>
		''' This delegate enables asynchronous calls for setting
		''' the Image property on a PictureBox control.
		''' </summary>
		''' <param name="hBitmap">the instance of Bitmap class</param>
		Private Delegate Sub SetImageCallback(ByVal hBitmap As Bitmap)

		''' <summary>
		''' This delegate enables asynchronous calls for setting
		''' the Enable property on a buttons.
		''' </summary>
		''' <param name="bEnable">true to enable buttons, otherwise to disable</param>
		Private Delegate Sub EnableControlsCallback(ByVal bEnable As Boolean)

		''' <summary>
		''' Contain reference for current operation object
		''' </summary>
		Private m_Operation As FutronicSdkBase

		Private m_bExit As Boolean

		''' <summary>
		''' The type of this parameter is depending from current operation. For
		''' enrollment operation this is Passport.
		''' </summary>
		Private m_OperationObj As Object

		''' <summary>
		''' A directory name to write passports.
		''' </summary>
		Private m_PassportsDir As String

		Public Sub New()
			InitializeComponent()
			' Create FutronicEnrollment object for retrieve default values only
			Dim dummy As FutronicEnrollment = New FutronicEnrollment()
			'cbFARNLevel.SelectedIndex = CInt(Fix(dummy.FARnLevel))
			'cbMaxFrames.SelectedItem = dummy.MaxModels.ToString()
			'chDetectFakeFinger.Checked = dummy.FakeDetection
			'cbMIOT.Checked = dummy.MIOTControl

			btnStop.Enabled = False
			m_PassportsDir = Nothing
			m_bExit = False
		End Sub

		Private Sub btnEnroll_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnEnroll.Click
			Dim UserPassport As Passport = New Passport()
			m_OperationObj = UserPassport

			' Get user name
			Dim frmName As EnrollmentName = New EnrollmentName()
			frmName.ShowDialog(Me)
			If frmName.DialogResult <> System.Windows.Forms.DialogResult.OK Then
				Return
			End If
			If frmName.UserName.Length = 0 Then
				MessageBox.Show(Me, "Você deve entrar com o RG", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
				Return
			End If
			UserPassport.UserName = frmName.UserName

			m_Operation = New FutronicEnrollment()

			' Set control properties
			'm_Operation.FakeDetection = chDetectFakeFinger.Checked
			m_Operation.FFDControl = True
			'	m_Operation.FARN = Int32.Parse(tbFARN.Text)
			'	CType(m_Operation, FutronicEnrollment).MIOTControl = cbMIOT.Checked
			'	CType(m_Operation, FutronicEnrollment).MaxModels = Int32.Parse(CType(cbMaxFrames.SelectedItem, String))

			EnableControls(False)

			' register events
			AddHandler m_Operation.OnPutOn, AddressOf OnPutOn
			AddHandler m_Operation.OnTakeOff, AddressOf OnTakeOff
			AddHandler m_Operation.UpdateScreenImage, AddressOf UpdateScreenImage
			AddHandler m_Operation.OnFakeSource, AddressOf OnFakeSource
			AddHandler (CType(m_Operation, FutronicEnrollment)).OnEnrollmentComplete, AddressOf OnEnrollmentComplete

			' start enrollment process
			CType(m_Operation, FutronicEnrollment).Enrollment()
		End Sub

		'Private Sub btnVerify_Click(ByVal sender As Object, ByVal e As EventArgs)
		'	' select passport for verification
		'	Dim frmSelectPassport As SelectPassport = New SelectPassport(GetDatabaseDir())
		'	Try
		'		frmSelectPassport.FillPassportsList()
		'	Catch ex As DirectoryNotFoundException
		'		MessageBox.Show(Me, ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
		'		Return
		'	Catch ex As InvalidOperationException
		'		MessageBox.Show(Me, ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
		'		Return
		'	End Try
		'	frmSelectPassport.ShowDialog(Me)

		'	If frmSelectPassport.Passport Is Nothing Then
		'		MessageBox.Show(Me, "Digital não econtrada", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
		'		Return
		'	End If
		'	m_OperationObj = frmSelectPassport.Passport

		'	m_Operation = New FutronicVerification((CType(m_OperationObj, Passport)).Template)

		'	' Set control properties
		'	'	m_Operation.FakeDetection = chDetectFakeFinger.Checked
		'	m_Operation.FFDControl = True
		'	'	m_Operation.FARN = Int32.Parse(tbFARN.Text)

		'	EnableControls(False)

		'	' register events
		'	AddHandler m_Operation.OnPutOn, AddressOf OnPutOn
		'	AddHandler m_Operation.OnTakeOff, AddressOf OnTakeOff
		'	AddHandler m_Operation.UpdateScreenImage, AddressOf UpdateScreenImage
		'	AddHandler m_Operation.OnFakeSource, AddressOf OnFakeSource
		'	AddHandler (CType(m_Operation, FutronicVerification)).OnVerificationComplete, AddressOf OnVerificationComplete

		'	' start verification process
		'	CType(m_Operation, FutronicVerification).Verification()
		'End Sub

		Private Sub btnIdentify_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnIdentify.Click

			Dim Passports As List(Of Passport) = New List(Of Passport)()

			' Read all passports to identify

			Dim rgFiles As String() = Directory.GetFiles(GetDatabaseDir(), "*")
			If rgFiles Is Nothing OrElse rgFiles.Length = 0 Then
				MessageBox.Show(Me, "Digital não encotrada! Faça o cadastro", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
				Return
			End If
			Dim iFiles As Integer = 0
			Do While iFiles < rgFiles.Length
				Try
					Dim UserPassport As Passport = New Passport(rgFiles(iFiles))
					Passports.Add(UserPassport)
				Catch e1 As InvalidDataException
					' The passport has invalid data. Skip it and continue processing.
				End Try
				iFiles += 1
			Loop
			If Passports.Count = 0 Then
				MessageBox.Show(Me, "Digital não encotrada! Faça o cadastro", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
				Return
			End If

			m_OperationObj = Passports
			m_Operation = New FutronicIdentification()

			' Set control property
			'	m_Operation.FakeDetection = chDetectFakeFinger.Checked
			m_Operation.FFDControl = True
			'	m_Operation.FARN = Int32.Parse(tbFARN.Text)

			EnableControls(False)

			' register events
			AddHandler m_Operation.OnPutOn, AddressOf OnPutOn
			AddHandler m_Operation.OnTakeOff, AddressOf OnTakeOff
			AddHandler m_Operation.UpdateScreenImage, AddressOf UpdateScreenImage
			AddHandler m_Operation.OnFakeSource, AddressOf OnFakeSource
			AddHandler (CType(m_Operation, FutronicIdentification)).OnGetBaseTemplateComplete, AddressOf OnGetBaseTemplateComplete

			' start identification process
			CType(m_Operation, FutronicIdentification).GetBaseTemplate()
		End Sub

		'Private Sub cbFARNLevel_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
		'	If cbFARNLevel.SelectedIndex = 6 Then
		'		tbFARN.ReadOnly = False
		'	Else
		'		tbFARN.Text = FutronicSdkBase.rgFARN(cbFARNLevel.SelectedIndex).ToString()
		'		tbFARN.ReadOnly = True
		'	End If
		'End Sub

		Private Sub OnPutOn(ByVal Progress As FTR_PROGRESS)
			Me.SetStatusText("Coloque seu dedo no scanner")
		End Sub

		Private Sub OnTakeOff(ByVal Progress As FTR_PROGRESS)
			Me.SetStatusText("Tire Seu dedo do scanner")
		End Sub

		Private Sub UpdateScreenImage(ByVal hBitmap As Bitmap)
			' Do not change the state control during application closing.
			If m_bExit Then
				Return
			End If

			If PictureFingerPrint.InvokeRequired Then
				Dim d As SetImageCallback = New SetImageCallback(AddressOf Me.UpdateScreenImage)
				Me.Invoke(d, New Object() {hBitmap})
			Else
				PictureFingerPrint.Image = hBitmap
			End If
		End Sub

		Private Function OnFakeSource(ByVal Progress As FTR_PROGRESS) As Boolean
			If m_bExit Then
				Return True
			End If

			Dim result As DialogResult
			result = MessageBox.Show("Fake source detected. Do you want continue process?", "VB.Net example for Futronic SDK", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
			Return (result = System.Windows.Forms.DialogResult.No)
		End Function

		Private Sub OnEnrollmentComplete(ByVal bSuccess As Boolean, ByVal nRetCode As Integer)
			Dim szMessage As StringBuilder = New StringBuilder()

			If bSuccess Then
				' set status string
				szMessage.Append("Captura de digital finalizada com sucesso")
				szMessage.Append("Quantidade: ")
				szMessage.Append((CType(m_Operation, FutronicEnrollment)).Quality.ToString())
				Me.SetStatusText(szMessage.ToString())

				' Set template into passport and save it
				Dim UserPassport As Passport = CType(m_OperationObj, Passport)
				UserPassport.Template = (CType(m_Operation, FutronicEnrollment)).Template

				Dim UserID As Guid = New Guid(UserPassport.UniqueID)
				Dim szFileName As String = Path.Combine(GetDatabaseDir(), UserID.ToString())
				If (Not UserPassport.SavePassport(szFileName)) Then
					MessageBox.Show("Can not save passport to file " & szFileName, "VB.Net example for Futronic SDK", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
				End If
			Else
				szMessage.Append("Falha na captura!")
				szMessage.Append("Descrição de erro")
				szMessage.Append(FutronicSdkBase.SdkRetCode2Message(nRetCode))
				Me.SetStatusText(szMessage.ToString())
			End If

			m_Operation = Nothing
			m_OperationObj = Nothing
			'EnableControls(True)

			EnableControls2(True)

		End Sub

		Private Sub OnVerificationComplete(ByVal bSuccess As Boolean, ByVal nRetCode As Integer, ByVal bVerificationSuccess As Boolean)
			Dim szResult As StringBuilder = New StringBuilder()
			If bSuccess Then
				If bVerificationSuccess Then
					szResult.Append("Verificação aprovada ")
					szResult.Append("RG: ")
					szResult.Append((CType(m_OperationObj, Passport)).UserName)
				Else
					'szResult.Append("Verification failed.")
					szResult.Append("usuário reprovado!")

				End If
			Else
				'szResult.Append("Verification process failed.")
				'szResult.Append("Error description: ")
				szResult.Append("Digital não econtrada")
				szResult.Append("Erro: ")
				szResult.Append(FutronicSdkBase.SdkRetCode2Message(nRetCode))
			End If

			Me.SetStatusText(szResult.ToString())
			m_Operation = Nothing
			m_OperationObj = Nothing
			EnableControls(True)
		End Sub

		Private Sub OnGetBaseTemplateComplete(ByVal bSuccess As Boolean, ByVal nRetCode As Integer)
			Dim szMessage As StringBuilder = New StringBuilder()
			Dim botao As Integer = 0
			If bSuccess Then
				Me.SetStatusText("Iniciando identificação...")
				Dim Passports As List(Of Passport) = CType(m_OperationObj, List(Of Passport))

				Dim iRecords As Integer = 0
				Dim nResult As Integer
				Dim rgRecords As FtrIdentifyRecord() = New FtrIdentifyRecord(Passports.Count - 1) {}
				For Each item As Passport In Passports
					rgRecords(iRecords) = item.GetRecord()
					iRecords += 1
				Next item
				nResult = (CType(m_Operation, FutronicIdentification)).Identification(rgRecords, iRecords)
				If nResult = FutronicSdkBase.RETCODE_OK Then
					szMessage.Append("Processo de identificação completo. RG:")
					If iRecords <> -1 Then
						szMessage.Append(Passports(iRecords).UserName)
					Else
						szMessage.Append("Digital não encontrada.")
						botao = 1

					End If
				Else
					'szMessage.Append("Identification failed.")
					szMessage.Append("Identificação falhou")
					botao = 1
					szMessage.Append(FutronicSdkBase.SdkRetCode2Message(nResult))
				End If
			Else
				'szMessage.Append("Can not retrieve base template.")
				'szMessage.Append("Error description: ")
				szMessage.Append("Digital não encontrada")
				szMessage.Append("Erro: ")
				botao = 1

				szMessage.Append(FutronicSdkBase.SdkRetCode2Message(nRetCode))
			End If
			Me.SetStatusText(szMessage.ToString())

			If botao = 1 Then
				EnableControls(True)
			Else
				EnableControls2(True)
			End If


		End Sub

		Private Sub btnStop_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnStop.Click
			m_Operation.OnCalcel()
		End Sub

		Private Sub EnableControls(ByVal bEnable As Boolean)
			' Do not change the state control during application closing.
			If m_bExit Then
				Return
			End If
			If Me.InvokeRequired Then
				Dim d As EnableControlsCallback = New EnableControlsCallback(AddressOf Me.EnableControls)
				Me.Invoke(d, New Object() {bEnable})
			Else
				btnEnroll.Enabled = bEnable
				btnIdentify.Enabled = bEnable
				'btnVerify.Enabled = bEnable
				btnStop.Enabled = Not bEnable
			End If
		End Sub
		Private Sub EnableControls2(ByVal bEnable As Boolean)
			' Do not change the state control during application closing.
			If m_bExit Then
				Return
			End If
			If Me.InvokeRequired Then
				Dim d As EnableControlsCallback = New EnableControlsCallback(AddressOf Me.EnableControls2)
				Me.Invoke(d, New Object() {bEnable})
			Else
				' btnEnroll.Enabled = bEnable
				btnIdentify.Enabled = bEnable
				'btnVerify.Enabled = bEnable
				btnStop.Enabled = Not bEnable
			End If
		End Sub

		Private Sub SetStatusText(ByVal text As String)
			' Do not change the state control during application closing.
			If m_bExit Then
				Return
			End If

			If Me.txtMessage.InvokeRequired Then
				Dim d As SetTextCallback = New SetTextCallback(AddressOf Me.SetStatusText)
				Me.Invoke(d, New Object() {text})
			Else
				Me.txtMessage.Text = text
			End If
		End Sub

		''' <summary>
		''' Get the passports directory.
		''' </summary>
		''' <returns>returns the passports directory.</returns>
		Private Function GetDatabaseDir() As String
			If m_PassportsDir Is Nothing Then
				m_PassportsDir = Path.Combine(Directory.GetCurrentDirectory(), "Passports")
			End If
			If (Not Directory.Exists(m_PassportsDir)) Then
				Directory.CreateDirectory(m_PassportsDir)
			End If

			Return m_PassportsDir
		End Function

		Protected Overrides Sub OnFormClosing(ByVal e As FormClosingEventArgs)
			If Not m_Operation Is Nothing Then
				m_Operation.Dispose()
			End If
			MyBase.OnFormClosing(e)
		End Sub

		Private Sub btnExit_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnExit.Click
			MyBase.Hide()
			m_bExit = True
			Application.Exit()
		End Sub

		'Private Sub tbFARN_Validating(ByVal sender As Object, ByVal e As CancelEventArgs)
		'	Dim nValue As Integer = -1

		'	Try
		'		nValue = Int32.Parse(tbFARN.Text)
		'	Catch e1 As FormatException
		'	End Try
		'	If nValue > 1000 OrElse nValue < 1 Then
		'		MessageBox.Show(Me, "Invalid FARN value. The range of value is 1 to 1000.", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
		'		e.Cancel = True
		'	End If

		'End Sub


		Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
			btnEnroll.Enabled = False
		End Sub



	End Class

	

End Namespace

Valeu pela força

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tranquilo cara, como você já utiliza uma herança, não sei se serve, mas acho que você terá que instanciar novamente.

Dim Con as New ConexaoOnline
Ae para você utilizar sua criaConexao basta:

Con.criaConexao()

Espero ter ajudado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então é exatamente isso que eu fiz:

 

Class de conexão:

Imports MySql.Data.MySqlClient
Public Class ConexaoOnline
	Public Shared Sub criaConexao()
		Dim conectar As String = "server=servidor;user id=root;password='';database=odonto; Allow Zero Datetime=True"
		Dim conn As New MySqlConnection(conectar)
	End Sub
End Class

Aí dentro do códio do form eu coloca isso:

 

Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
			btnEnroll.Enabled = False

			Dim Con As New ConexaoOnline
			Con.criaConexao()
			Con.Open()


		End Sub

Mas essa linha: Con.Open() da a seguinte mansagem dizendo que não é um membro de ConexaoOnline! Onde estou errando? Porque também imaginei que esse seria o método certo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz uma adptação e funcionou, espero que sirva pra ti:

Classe:

Imports MySql.Data.MySqlClient

Public Class ConexaoOnline

	Public Conn As MySqlConnection
	Dim Conectar As String

	Public Sub New()
		MyBase.New()
		Conectar = "server=servidor;user id=root;password='';database=odonto; Allow Zero Datetime=True"
	End Sub

	Public Sub criaConexao()
		Conn = New MySqlConnection(Conectar)
	End Sub
End Class

Formulario:

Public Class Form1

	Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
		Dim Cl As New ConexaoOnline
		Cl.criaConexao()
		Cl.Conn.Open()
		Cl.Conn.Close()
	End Sub
End Class

Compartilhar este post


Link para o post
Compartilhar em outros sites

Putz cara funcionou bacana!

 

Valeu mesmo pela força, mas vou te incomodar mais um pouco, sou novo nessa parte de class estou estudando, será que você pode me explicar essa class que você criou? É algo mais avançado do que vi no livro. E se puder passar um link de algum lugar que explique melhor sobre class seria bom

 

Desde já agradeço mesmo pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que bom que deu certo cara.

Não fiz nada de especial que você não tenha criado, acho que foram duas as diferenças maiores.

A primeira foi declarar a variável Conn como pública, da sua forma ela estava privada somente ao uso dentro da sua Sub de Conexão, e foi preciso torná-la pública para poder usar o "Open' e o "Close".

Outra coisa é que eu utilizei o Objeto Construtor da classe:

Public Sub New()
		MyBase.New()
		Conectar = "server=servidor;user id=root;password='';database=odonto; Allow Zero Datetime=True"
	End Sub
Ele funciona mais ou menos como o Page_Load de uma página web, toda vez que a classe for solicitada a primeira coisa que ela vai fazer é executar o que esta dentro do Objeto Construtor.

Referente a links, acho que é os que você já conhece, pra mim o melhor é o Macoratti.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.