terça-feira, 31 de julho de 2012

VB.NET - OBTER USUÁRIOS DO ACTIVE DIRECTORY

Uma dessas funções que você precisa vez ou outra para obter os usuários de uma rede e salvá-los em uma tabela qualquer, seja no SQL Server, seja no MYSQL ou mesmo no Microsoft Access.

Leve-se em conta o comando dsquery: O dsquery por default não se encontra disponível dentro do Windos XP porque se trata de uma aplicação para o Windows 2000.

Para utilizar o dsquery na sua estação, basta instalar o adminpak com o qual você poderá realizar as consultas.


Vamos ver uma simples função que criei com esta finalidade.

A função em si executa um arquivo bath que simplesmente contêm o comando que faz a geração do dsquery para um arquivo-texto qualquer usado o comando dsget:


Comando no arquivo-bath:

dsquery user -limit 2500 "OU=MAO,OU=Regio1,DC=CPP,DC=CPP,DC=gov"  |dsget user -display -samid -email -office   > C:\Temp\users.txt


A função primeiramente deleta o arquivo-texto caso ele exista. Em seguida, gera um novo arquivo-texto com os dados dos usuários usando o arquivo cmd criado e que simplesmente contêm o comando informado acima. O detalhe é o tempo de espera para a execução do arquivo bath:

listFiles.WaitForExit(90000)

Esta linha aguarda cerca de um minuto e meio até que a execução do arquivo bath seja finalizada e o arquivo-texto seja totalmente gerado. Isso é necessário para que a aplicação espere a finalização da geração do arquivo-texto. Você pode alterar esse tempo para que atenda às suas necessidades. No meu caso, verifiquei que o tempo de espera ideal girava em torno de um minuto e meio.

Continuando, a função abre este arquivo-texto gerado e faz sua leitura inserindo em uma tabela todos aqueles que não existirem dentro da mesma.

 Private Sub AtualizarUsuarios()

        Dim sPercentual As Double = 0

        Application.DoEvents()

        'Deletar o arquivo existente anteriormente
        If IO.File.Exists("c:\Intel\users3.txt") Then
            File.Delete("C:\Intel\users3.txt")
        End If


        Dim psi As New  _
            System.Diagnostics.ProcessStartInfo("C:\Intel\Gera_user.cmd")
        psi.RedirectStandardOutput = True
        psi.WindowStyle = ProcessWindowStyle.Hidden
        psi.UseShellExecute = False
        Dim listFiles As System.Diagnostics.Process
        listFiles = System.Diagnostics.Process.Start(psi)
        Dim myOutput As System.IO.StreamReader _
            = listFiles.StandardOutput
        listFiles.WaitForExit(90000)

        If listFiles.HasExited Then


            'abrir o arquivo-texto gerado na pasta c:\Intel
            Dim oLeitura As System.IO.StreamReader

            oLeitura = File.OpenText("c:\Intel\users3.txt")

            Dim fluxoTexto As IO.StreamReader
            Dim linhaTexto As String
            Dim sContaLinhas As Integer = 0

            If IO.File.Exists("c:\Intel\users3.txt") Then

                fluxoTexto = New IO.StreamReader("c:\Intel\users3.txt")

                linhaTexto = fluxoTexto.ReadLine
                sContaLinhas = sContaLinhas + 1
                While linhaTexto <> Nothing
                    linhaTexto = fluxoTexto.ReadLine
                    sContaLinhas = sContaLinhas + 1
                End While

                fluxoTexto.Close()

                Dim sTotal As Integer = sContaLinhas

                ProgressBar1.Maximum = sContaLinhas
                ProgressBar1.Value = 0
                ProgressBar1.Visible = True
                LbPercent.Visible = True

                sContaLinhas = 1
                fluxoTexto = New IO.StreamReader("c:\Intel\users.txt")
                linhaTexto = fluxoTexto.ReadLine

                While linhaTexto <> Nothing

                    If sContaLinhas > 1 Then

                        Dim sUsuario As String = Trim(Mid(linhaTexto, 1, 15))
                        Dim sNome As String = Trim(Mid(linhaTexto, 15, 40))
                        Dim eEmail As String = Trim(Mid(linhaTexto, 124, 40))
                        ' Comparar com o que está na tabela
                        If sUsuario <> "" Then

                            Dim sPesq As String = "Jabil\" + sUsuario
                            sSQL = "SELECT * FROM ADUsers WHERE Usu_Login = '" & sPesq & "'"

                            Dim myConnection2 As OleDbConnection
                            Dim myCommand2 As OleDbCommand
                            Dim ds As OleDbDataReader

                            myConnection2 = New OleDbConnection(connString)
                            myConnection2.Open()
                            myCommand2 = New OleDbCommand(sSQL, myConnection2)
                            ds = myCommand2.ExecuteReader()

                            If ds.Read = False Then

                                'Inserir o usuário na tabela

                                'INSERIR NA GRID
                                sSQL = "INSERT INTO ADUsers (Usu_Login,Usu_Nome,Usu_Email) VALUES ('" & sPesq & "', '" & sNome & "','" & eEmail & "')"
                                myCommand2 = New OleDbCommand(sSQL, myConnection2)
                                Ra = myCommand2.ExecuteNonQuery()

                            End If

                            ds.Close()


                        End If
                        'se não existir a linha na tabela, insere


                    End If

                    'ler o conteúdo do arquivo-texto
                    linhaTexto = fluxoTexto.ReadLine
                    sContaLinhas = sContaLinhas + 1

                    ProgressBar1.Value = sContaLinhas
                    sPercentual = 100 * sContaLinhas / sTotal

                    LbPercent.Text = CStr(FormatNumber(sPercentual, 2)) + " %"
                    LbMessagem.Text = "Linhas processadas: " + CStr(sContaLinhas)

                    Application.DoEvents()

                    If sContaLinhas = (sTotal - 1) Then

                        GoTo sSaida

                    End If



                End While

sSaida:
                fluxoTexto.Close()

            Else

                LbMessagem.Text = "Arquivo não existe"
                'MessageBox.Show("Arquivo não existe")

            End If

            'Fechar o arquivo-texto
            oLeitura.Close()

            Application.DoEvents()

            LbMessagem.Text = "Atualização efetuada com sucesso!!! Linhas Processadas no Total: " + CStr(sContaLinhas)

            PreencherGrid("select * from ADUsers")

        End If

        listFiles.Close()


    End Sub

Sucesso a todos e aproveitem o quitute!!

By
Leonardo Metelys

segunda-feira, 16 de julho de 2012

COPIANDO DADOS DO MYSQL 3.5 PARA O MYSQL 5.5


Dentre as muitas necessidades que eventualmente poderemos encontrar com relação a inovações uma delas diz respeito a atualizações de bancos de dados. 

Há grandes diferenças entre as versões do MySQL inferiores a 4.0. Mostrarei aqui um dos caminhos para que se possa utilizar dados de uma versão antiga do MYSQL com a nova versão do MYSQL 5.5 a fim de que uma nova aplicação possa ser criada com o Visual Studio 2010.

No servidor antigo é preciso conseguir uma cópia da base de dados de modo a ser instalada na nova versão. O caminho mais comum para isto é utilizar o comando mysqldump:

mysqldump -u root -p NOME_DA_BASE > arquivo.sql
 

o arquivo .sql precisa ser ainda preparado para que possa ser lançado na nova base de dados. Deve-se ter em mente que o padrão latin não é o mesmo no MySQL 5.5 que trabalha com o padrão uft8.

Esta discrepância causará o problema com os acentos que deverá ser tratado na nova base de dados. Todos os acentos deverão ser corrigidos para a nova base de dados se a transferência for efetuada sem se levar em conta o padrão diferente entre o latin e o uft8.


A maioria dos desenvolvedores pode resolver o problema de acentos realizando updates na base de dados ou criando um pequeno aplicativo que possa corrigir todos os acentos via software. Isso pode ficar a critério de cada desenvolvedor.



Continuando, o nosso arquivo .sql precisará ser editado a fim de que possamos ver algumas de suas peculiaridades.  Veja:



-- MySQL dump 8.22
--
-- Host: localhost    Database: pagelog
---------------------------------------------------------
-- Server version    3.23.52-nt

--
-- Table structure for table '
pagsegurodesc '
--

CREATE TABLE pagsegurodesc (
  wemp int(11) NOT NULL default '0',
  ano int(11) NOT NULL default '0',
  cod varchar(10) NOT NULL default '',
  codes int(11) NOT NULL default '0',
  pedes double default NULL,
  mes1 int(11) default NULL,
  mes2 int(11) default NULL,
  PRIMARY KEY  (wemp,anolet,codalu,coddes)
) TYPE=MyISAM;

--
-- Dumping data for table 'alunodesc'
--


Todas as linhas com "--" devem ser removidas e o TYPE = MyISAM precisa ser retirado do arquivo .sql a fim de que possa ser utilizado na nova versão em MySQL 5.5.  Retirados esses dados a base de dados pode então ser transferida, desde que você não se esqueça de se corrigir os problemas com os acentos na base de dados.

O MYSQL Query Browser  pode ser utilizado tanto para se lançar os dados do script dentro da nova base de dados quanto para se testar se os dados estão acessíveis e corretamente catalogados. Recomenda-se que primeiro sejam criadas as tabelas na base de dados e em seguida seus dados sejam lançados em cada uma delas. 

Para realizar este trabalho, você pode copiar a estrutura apresentada acima para o MySQL Browser e executá-la. Em seguida, deve copiar os dados abaixo da estrutura ou salvá-los em um arquivo .sql à parte e abri-los no próprio MySQL Browser selecionando a opção Arquivo -> Abrir Query. Quando os dados forem apresentando no MySQL Broser clique em Execute e os dados começarão a ser transferidos.
 



Após a transferência de dados, você pode testar a base de dados em MySQL 5.5 criando uma pequena aplicação para saber se a mesma esta acessível e correta.


Este trabalho será árduo e um pouco demorado, mas garantirá com certeza que todas as informações serão transferidas de modo correto para a nova versão do banco de dados MYSQL. Com paciência e perseverança você será capaz de transferir todas as informações de seu banco de dados mais antigo para a nova engine do MYSQL e se aproveitar do uso da mesma em novas tecnologias como o Visual Studio 2010.


Sucesso a todos!!

UM APLICATIVO PARA LEITURA DEVOCIONAL ANUAL DA BIBLIA EM ANDROID

Olá, pessoal!  Este novo projeto foi criado em Visual Studio 2019 em C#.Net com o Xamarin. Já está disponível no Google Play para vocês baix...