Jump to content

Recommended Posts

Posted

Bom dia amigos. Tenho uma pergunta para fazer.

Tenho em meu sistema vários relatórios com Crystal Report. Porem a algum tempo tenho algumas duvidas sobre como trabalhar com o Crystal Report. Já vi varios videos ensinando a fazer impressão com Crystal Report mas em nenhum deles explica como é feita a autenticação do sistema com o banco de dados. Ai as minhas duvidas.

Bom vou explicar como eu faço e se alguém tiver uma sugestão melhor ficaria muito grato.

EXEMPLO: Cadastro de Funcionários.

No form tem os dados do cadastro, um DataGridViwer que recebe os dados da consulta do cadastro selecionado. E um botão de imprimir. Este botão abre o crystal Report que apresenta os dados do DataGrid.

O código é assim:

        Dim dv As DataView = New DataView()
        Dim dt As New DataTable
        Dim R As New CRP_Print_Form '' nome do formulario
		Dim cr As New CRP_CF_Beneficios2 ''nome do crystal report
		
        dv = DirectCast(DataGrid_Dados_Report.DataSource, DataView) ''crio uma DataView com os dados da DataSource da DataGrid_dados 
        dt = dv.ToTable().Clone() ''clona a estrutura da DataView para a DataTable dt
		
        For Each dr In dv.ToTable().Select() ''percorre as rows da DataView e selecciona a actual
            dt.ImportRow(dr) ''importa cada row para a DataTable dt
        Next
		
        cr.SetDataSource(dt)
		
        R.CRP_Documents.ReportSource = cr ''nome do crystal report viewer
        R.ShowDialog()

Até aqui funciona perfeitamente se o Crystal Report tiver apenas uma tabela do banco de dados. 

Porem meu sistema trabalha com segregação de empresas. Ou seja o sistema pode ter varias empesas cadastradas. E cada empresa tem um cabeçalho diferente.
Então eu em cadas Crystal Report tem pelo menos 2 tabelas anexadas, sendo uma do Cadastro de Empresa e outra dos Dados em questão. Assim quando um usuário logar no sistema seja de qualquer empresa o cabeçalho do formulário é alterado automaticamente. 

Eu entendo que a autenticação do Windows é feita pelo Domínio AD (Active Directory) e se os computadores estiverem no mesmo domínio é possível fazer a autenticação integrada. Assim ao abrir o Crystal Report não é necessário colocar o usuário e senha do banco de dados.

Mas a minha questão é que na rede onde esta o sistema os computadores não estão em um domínio pois são computadores com windows 7, incluindo o servidor onde está o banco de dados. Então não da para fazer autenticação integrada então toda vez q alguém abre um Crystal Report é necessário colocar o usuário e senha do Banco de Dados.

Meu cenário:

01 servidor de Banco de Dados e aplicação - Windows 7
15 estações de trabalho na rede com windows 7

Como posso fazer o Crystal Report não pedir autenticação?

Posted

Boa tarde,

A questão parece-me confusa e quase "caldeirada de conceitos e tecnologias", passo a expressão.

Por partes, o facto de não terem windows server não significa que não possam ter um domínio LDAP, basta terem uma maquina linux com os respectivos deamons e devidamente configurada.

Para abrir reports de crystall reports, dentro de uma aplicação feita em VB.NET não é necessário autenticar o utilizador ao servidor SQL.

Os dados que geram o report devem vir de um dataset que pode conter N datatables, logo o crystall, não precisa de acesso ao servidor em momento algum.

Repara no teu código:

Dim dv As DataView = New DataView()
Dim dt As New DataTable 'cria uma datatable
        Dim R As New CRP_Print_Form ' nome do formulario
        'Dim cr As New CRP_CF_Beneficios2 'nome do crystal report
        Dim cr As New CRP_CF_Beneficios4 'nome do crystal report

        dv = DirectCast(CF.DataGrid_Dados_Report.DataSource, DataView) 'crio uma DataView com os dados da DataSource da DataGrid_dados 
       
        dt = dv.ToTable().Clone() 'clona a estrutura da DataView para a DataTable dt
        For Each dr In dv.ToTable().Select() 'percorre as rows da DataView e selecciona a actual
            dt.ImportRow(dr) 'importa cada row para a DataTable dt
        Next

cr.SetDataSource(dt) 'define como datasource do report a datatable
        R.CRP_Documents.ReportSource = cr 'nome do crystal report viewer
        R.ShowDialog()

Agora vê como fazer para múltiplas tabelas dentro de um dataset:

Dim  dset as new DataSet() ''cria um dataset
dset.Tables.Add(dtableZero) ''adiciona uma tabla ao dataset
dset.Tables.Add(dtableUm) ''adiciona outra tablea ao dataset
rpt.SetDataSource(ds) ''define como source do report o dataset (com as datatables)
CrystalReportViewer1.ReportSource = rpt
CrystalReportViewer1.RefreshReport()
CrystalReportViewer1.Show()

Podes preencher as datatables com resultados de query's feitas à base de dados, e "alimentar" o report do crystall com os dados da datatable.

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Posted

Boa tarde.

Não consegui implementar o seu código. Pois da maneira que fiz esta dando erro. Minha consulta está assim:

Imports Microsoft.VisualBasic
Imports System.Data.SqlClient
Imports System.Data

Module SELECT_CF_Report_Beneficios
    Public sqlDados1 As New DataSet ''GUARDA A CONSULTA REALIZADA NO DATA SET
    Public sqlDados2 As New DataSet ''GUARDA A CONSULTA REALIZADA NO DATA SET

    ''' <summary>
    ''' CARREGA OS ITENS NO REPORT PARA IMPRESSÃO
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub Select_Dados() 
        ''FECHA A CONEXÃO COM O BANCO
        ConectionBD.Close()

        Try
           
            ''FAZ A CONSULTA NO BANCO GERA O REPORT PARA IMPRESSÃO
            Dim SQLConsulta1 As New SqlDataAdapter("SELECT * FROM Cadastro_Funcionario" _
                                                   & " WHERE idcolaborador = '" & CF.DataGrid_Dados.CurrentRow.Cells(0).Value & "'" _
                                                   & " AND empresa = '" & WASINFOSystem.txtempresa.Text & "'", ConectionBD.ConnectionString)

            ''FAZ A CONSULTA NO BANCO GERA O REPORT PARA IMPRESSÃO
            Dim SQLConsulta2 As New SqlDataAdapter("SELECT * FROM Cadastro_Funcionario" _
                                                  & " WHERE idcolaborador = '" & CF.DataGrid_Dados.CurrentRow.Cells(0).Value & "'" _
                                                  & " AND empresa = '" & WASINFOSystem.txtempresa.Text & "'", ConectionBD.ConnectionString)


            ''ABRE A CONEXÃO COM O BANCO
            ConectionBD.Open()

            ''RECEBE OS DADOS DO DATA SET
            SQLConsulta1.Fill(sqlDados1)
            SQLConsulta2.Fill(sqlDados2)


            ''FECHA A CONEXÃO COM O BANCO
            ConectionBD.Close()

        Catch ex As Exception
            ''EM CASO DE ERRO, RETORNA A MENSAGEM
            MsgBox(ex.Message, MsgBoxStyle.Exclamation, "SELECT_CF_Report_Beneficios")

            ''FECHA A CONEXÃO COM O BANCO DE DADOS
            ConectionBD.Close()
        End Try

O botão para imprimir ficou assim:

 		SELECT_CF_Report_Beneficios.Select_Dados() ''faz a consulta

        Dim dset As New DataSet() ''cria um dataset
        Dim ds As New DataTable
        Dim rpt As New CRP_CF_Beneficios2 ''nome do crystal report

        dset.Tables.Add(SELECT_CF_Report_Beneficios.sqlDados1.Tables(0).DefaultView.Table) ''adiciona uma tabla ao dataset
        dset.Tables.Add(SELECT_CF_Report_Beneficios.sqlDados2.Tables(0).DefaultView.Table) ''adiciona outra tablea ao dataset

        rpt.SetDataSource(ds) ''define como source do report o dataset (com as datatables)
        CRP_Print_Form.CRP_Documents.ReportSource = rpt
        CRP_Print_Form.CRP_Documents.RefreshReport()
        CRP_Print_Form.Show()

O erro: DataTable already belongs to another DataSet.

dset.Tables.Add(SELECT_CF_Report_Beneficios.sqlDados1.Tables(0).DefaultView.Table) ''adiciona uma tabla ao dataset

Diz que o DataTable pertence a outro DataSet. Mas não entendi como implementar.

Posted

Boa noite,

Já olhaste bem para o teu código ?

Imports Microsoft.VisualBasic
Imports System.Data.SqlClient
Imports System.Data

Module SELECT_CF_Report_Beneficios
    Public sqlDados1 As New DataSet ''GUARDA A CONSULTA REALIZADA NO DATA SET
    Public sqlDados2 As New DataSet ''GUARDA A CONSULTA REALIZADA NO DATA SET

    ''' <summary>
    ''' CARREGA OS ITENS NO REPORT PARA IMPRESSÃO
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub Select_Dados() 
        ''FECHA A CONEXÃO COM O BANCO
        Try

        
        ''FAZ A CONSULTA NO BANCO GERA O REPORT PARA IMPRESSÃO
                    Dim SQLConsulta1 As New SqlDataAdapter("SELECT * FROM Cadastro_Funcionario" _
                                                           & " WHERE idcolaborador = '" & CF.DataGrid_Dados.CurrentRow.Cells(0).Value & "'" _
                                                                   & " AND empresa = '" & WASINFOSystem.txtempresa.Text & "'", ConectionBD.ConnectionString)
                Dim datatbleUm As New DataTable
                ConectionBD.Open()
                  Using dadapter As New SqlDataAdapter(SQLConsulta1, ConectionBD)
                    dadapter.Fill(datatbleUm)  
                  End Using
                 ''FAZ A CONSULTA NO BANCO GERA O REPORT PARA IMPRESSÃO
                            Dim SQLConsulta2 As New SqlDataAdapter("SELECT * FROM Cadastro_Funcionario" _
                                                                  & " WHERE idcolaborador = '" & CF.DataGrid_Dados.CurrentRow.Cells(0).Value & "'" _
                                                                  & " AND empresa = '" & WASINFOSystem.txtempresa.Text & "'", ConectionBD.ConnectionString)
                
                  Using dadapter As New SqlDataAdapter(SQLConsulta2, ConectionBD)
                    dadapter.Fill(datatbleDois)  
                  End Using
                
                    ''FECHA A CONEXÃO COM O BANCO
              ConectionBD.Close()

        Catch ex As Exception
            ''EM CASO DE ERRO, RETORNA A MENSAGEM
            MsgBox(ex.Message, MsgBoxStyle.Exclamation, "SELECT_CF_Report_Beneficios")

            ''FECHA A CONEXÃO COM O BANCO DE DADOS
            ConectionBD.Close()
        End Try

Um dataset tem N datatables, tens de preencher cada datatable na sua vez, não enches a mesma datatable duas vezes com resultados diferentes. Usas as duas datatables que estão dentro do dataset, para fazer o report.

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Posted

Esta dando erro:    Overload resolution failed because no accessible 'New' can be called with these arguments:

''dadapter diz que não está acessivel.
            Using dadapter As New SqlDataAdapter(SQLConsulta1, ConectionBD)
                dadapter.Fill(datatbleUm)
            End Using

Desculpe minha ignorância. Preciso declarar? até tentei mas não funcionou. Nunca havia trabalhado com o sql assim. Por isso minha dificuldade. 

Posted

Boa noite,

Imports Microsoft.VisualBasic
Imports System.Data.SqlClient
Imports System.Data

Module SELECT_CF_Report_Beneficios
    Public sqlDados1 As New DataSet ''GUARDA A CONSULTA REALIZADA NO DATA SET
    Public sqlDados2 As New DataSet ''GUARDA A CONSULTA REALIZADA NO DATA SET

    ''' <summary>
    ''' CARREGA OS ITENS NO REPORT PARA IMPRESSÃO
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub Select_Dados() 
        ''FECHA A CONEXÃO COM O BANCO
        Try

        
        ''FAZ A CONSULTA NO BANCO GERA O REPORT PARA IMPRESSÃO
                    Dim SQLConsulta1 As New SqlDataAdapter("SELECT * FROM Cadastro_Funcionario" _
                                                           & " WHERE idcolaborador = '" & CF.DataGrid_Dados.CurrentRow.Cells(0).Value & "'" _
                                                                   & " AND empresa = '" & WASINFOSystem.txtempresa.Text & "'", ConectionBD.ConnectionString)
                Dim datatbleUm As New DataTable
                ConectionBD.Open()
                  Using dadapter As New SqlDataAdapter(SQLConsulta1, ConectionBD)
                    dadapter.Fill(datatbleUm)  
                  End Using
                 ''FAZ A CONSULTA NO BANCO GERA O REPORT PARA IMPRESSÃO
                            Dim SQLConsulta2 As New SqlDataAdapter("SELECT * FROM Cadastro_Funcionario" _
                                                                  & " WHERE idcolaborador = '" & CF.DataGrid_Dados.CurrentRow.Cells(0).Value & "'" _
                                                                  & " AND empresa = '" & WASINFOSystem.txtempresa.Text & "'", ConectionBD.ConnectionString)
                
                  Using dadapterDois As New SqlDataAdapter(SQLConsulta2, ConectionBD)''era assim tao dificil ?
                    dadapter.Fill(datatbleDois)  
                  End Using
                
                    ''FECHA A CONEXÃO COM O BANCO
              ConectionBD.Close()

        Catch ex As Exception
            ''EM CASO DE ERRO, RETORNA A MENSAGEM
            MsgBox(ex.Message, MsgBoxStyle.Exclamation, "SELECT_CF_Report_Beneficios")

            ''FECHA A CONEXÃO COM O BANCO DE DADOS
            ConectionBD.Close()
        End Try

Garantidamente não te deste ao trabalho de ler o código.

 

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Posted

Boa noite,

Aqui fica simplificado e comentado.

Dim dset As New dataset() ''CRIA UM DATASET CHAMADO DSET

Public Sub Select_Dados()
    Try
        ConectionBD.Open()

        ''PREPARA A CONSULTA NO BANCO GERA O REPORT PARA IMPRESSÃO
        Dim SQLConsulta1 As String = ("SELECT * FROM Cadastro_Funcionario" & " WHERE idcolaborador = '" + _
                                      CF.DataGrid_Dados.CurrentRow.Cells(0).Value + _
                                      "'" + " AND empresa = '" & WASINFOSystem.txtempresa.Text & "'")

        ''PREPARA A CONSULTA NO BANCO GERA O REPORT PARA IMPRESSÃO
        Dim SQLConsulta2 As String = ("SELECT * FROM Cadastro_Funcionario" _
                                              + " WHERE idcolaborador = '" & CF.DataGrid_Dados.CurrentRow.Cells(0).Value & "'" _
                                              + " AND empresa = '" & WASINFOSystem.txtempresa.Text & "'")

        Dim adapter As New sqlAdapter ''CRIA UM TABLEADAPTER CHAMADO ADAPTER
        Dim command As SqlCommand ''CRIA UM SQLCOMMAND, CHAMADO COMMAND

        command = New SqlCommand(SQLConsulta1, ConectionBD) ''PREPARA A PRIMEIRA QUERY PARA EXECUÇAO
        adapter.SelectCommand = command ''EXECUTA A PRIMEIRA QUERY
        adapter.Fill(dset, "cabecalho") ''MANDA A RESULTSET PARA O DATASET DSET COM O NOME "CABECALHO"

        adapter.SelectCommand.CommandText = SQLConsulta2 ''SUBSITUI O TEXTO DO COMANDO COMMAND PELA SEGUNDA QUERY E EXECUTA-A
        adapter.Fill(dset, "conteudo") ''MANDA A RESULTSET PARA O DATASET DSET COM O NOME "CABECALHO"

        adapter.Dispose() ''LIBERTA O ADAPTER PARA O GC RECOLHER
        command.Dispose() ''LIBERTA O COMMAND PARA O CG RECOLHER
        ConectionBD.Close() ''FECHA A CONNECCAO
        ConectionBD.Dispose() ''LIBERTA A CONNECAO POARA O GC RECOLHER

    Catch ex As Exception
        ''EM CASO DE ERRO, RETORNA A MENSAGEM
        MsgBox(ex.Message, MsgBoxStyle.Exclamation, "SELECT_CF_Report_Beneficios")

        ''FECHA A CONEXÃO COM O BANCO DE DADOS
        ConectionBD.Close()
    End Try

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Posted

Olá amigo. Boa tarde.

Primeiro:

Bom, quanto ao código acima ele faz a consulta. Porem quando ele é executado pela segunda vez ele apresenta a seguinte mensagem: The ConectionString propert has not been initialized. Então qualquer consulta que o programa faz em qualquer tela a mesma mensagem é apresentada.

Segundo:

O Crystal Report carregou os dados. Porem o cabeçalho não.
Mas ele carrega sempre o mesmo dado da primeira vez que foi executado. Ele não limpa o Report para mostrar outro dado.

Aqui estou carregando o Crystal Report. 

            Dim ds As New DataTable
            Dim rpt As New Teste ''nome do crystal report

            Dim datatbleUm As New DataTable
            dset.Tables.Add(datatbleUm) ''adiciona uma tabla ao dataset

            Dim datatbleDois As New DataTable
            dset.Tables.Add(datatbleDois) ''adiciona outra tablea ao dataset

            rpt.SetDataSource(ds) ''define como source do report o dataset (com as datatables)
            CRP_Print_Form.CRP_Documents.ReportSource = rpt
            CRP_Print_Form.CRP_Documents.RefreshReport()
            CRP_Print_Form.Show()

Sei que deve ser algo simples. E como disse a pouco tempo estou trabalho com Crystal Report por isso minha dificuldade.

Posted

Boa tarde,

Agora, williamjda disse:

Primeiro:

Bom, quanto ao código acima ele faz a consulta. Porem quando ele é executado pela segunda vez ele apresenta a seguinte mensagem: The ConectionString propert has not been initialized. Então qualquer consulta que o programa faz em qualquer tela a mesma mensagem é apresentada.

Basta corrigir o scope. Só vendo o código todo é que posso ver onde colocar a connectionString, para que fique inicializada correctamente no scope correcto.

Quanto aos dados, basta ao construir o report, escolher como datasource "Project Data" e no project data do lado direito deverá aparecer o nome do dataset no caso "dset" e logo abaixo todas as tabelas que se encontrem dentro do dataset.

De resto o código parece-me estar correcto, excepto a questão do scope da connectionString.

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Posted

Segue abaixo o código:

   Public Sub Select_Dados()
        Try
            ConectionBD.Open()

            Dim codColab As String
            codColab = CF.DataGrid_Dados.CurrentRow.Cells(0).Value

           ''PREPARA A CONSULTA NO BANCO GERA O REPORT PARA IMPRESSÃO
            Dim SQLConsulta1 As String = ("SELECT * FROM Cadastro_Funcionario" & " WHERE idcolaborador = '" + _
                                          codColab + _
                                          "'" + " AND empresa = '" & WASINFOSystem.txtempresa.Text & "'")

            ''PREPARA A CONSULTA NO BANCO GERA O REPORT PARA IMPRESSÃO
            Dim SQLConsulta2 As String = ("SELECT * FROM Cadastro_Funcionario" _
                                                  + " WHERE idcolaborador = '" & CF.DataGrid_Dados.CurrentRow.Cells(0).Value & "'" _
                                                  + " AND empresa = '" & WASINFOSystem.txtempresa.Text & "'")

            Dim adapter As New SqlDataAdapter ''CRIA UM TABLEADAPTER CHAMADO ADAPTER
            Dim command As SqlCommand ''CRIA UM SQLCOMMAND, CHAMADO COMMAND

            Dim dset As New DataSet() ''CRIA UM DATASET CHAMADO DSET
            command = New SqlCommand(SQLConsulta1, ConectionBD) ''PREPARA A PRIMEIRA QUERY PARA EXECUÇAO
            adapter.SelectCommand = command ''EXECUTA A PRIMEIRA QUERY
            adapter.Fill(dset, "cabecalho") ''MANDA A RESULTSET PARA O DATASET DSET COM O NOME "CABECALHO"

            adapter.Dispose() ''LIBERTA O ADAPTER PARA O GC RECOLHER
            command.Dispose() ''LIBERTA O COMMAND PARA O CG RECOLHER
            ConectionBD.Close() ''FECHA A CONNECCAO
            ConectionBD.Dispose() ''LIBERTA A CONNECAO POARA O GC RECOLHER

        ''--------------------------------------------------
    	''---------------Para carregar o report
    
            Dim ds As New DataTable
            Dim rpt As New Teste ''nome do crystal report

            Dim datatbleUm As New DataTable
            dset.Tables.Add(datatbleUm) ''adiciona uma tabla ao dataset

            Dim datatbleDois As New DataTable
            dset.Tables.Add(datatbleDois) ''adiciona outra tablea ao dataset

            rpt.SetDataSource(ds) ''define como source do report o dataset (com as datatables)
            CRP_Print_Form.CRP_Documents.ReportSource = rpt
            CRP_Print_Form.CRP_Documents.RefreshReport()
            CRP_Print_Form.Show()

        Catch ex As Exception
            ''EM CASO DE ERRO, RETORNA A MENSAGEM
            MsgBox(ex.Message, MsgBoxStyle.Exclamation, "SELECT_CF_Report_Beneficios")

            ''FECHA A CONEXÃO COM O BANCO DE DADOS
            ConectionBD.Close()
        End Try
Posted

Boa tarde,

Onde está o código da ConectionBD.Open() ?

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Posted

Boa noite,

Aqui fica um exemplo de connectionstring devidamente construída.

O erro que estás a ter só pode estar relacionado ou com scope, o que não me parece, ou com falta de parâmetros na tua connectionString, que não a vi, não tenho como saber.

Dim Connection As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:git\vbtempproject\data\bd.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

Using ConectionBD As New SqlConnection(connection)

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Posted

Porem na sua conectionString aponta para uma banco de dados local. O meu projeto aponta para um servidor de banco de dados. Tenho um servidor para aplicação e um servidor para o banco de dados. E vários usuários acessam pela rede a aplicação em uma unidade mapeada.

Public ConectionBD As New SqlConnection("Data Source=192.168.1.10,1433; Initial Catalog=BD_Dados; Persist Security Info=True; User ID=sa; Password=senhadobanco")
Posted

Boa noite,

Public ConectionBD As New SqlConnection("Data Source=192.168.1.10\instancia; Initial Catalog=BD_Dados; Persist Security Info=True; User ID=sa; Password=senhadobanco")

Using ConectionBD As New SqlConnection(connection)


Uma maquina com SQL Server pode ter n instâncias do SQL server. Cada instância tem um nome. No caso tens de trocar o "instancia" pelo nome da tua instância de SQL Server onde está a BD.

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

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.