domingo, 17 de fevereiro de 2013
GERANDO CÓDIGO DE BARRAS E DIMINUINDO O SEU TAMANHO
Eis uma pequena aplicação usando a biblioteca barcodelib.dll desenvolvida por Brad Barnhill e postada no The code Project (http://www.codeproject.com/Articles/20823/Barcode-Image-Generation-Library).
A idéia aqui é gerar a imagem de um código de barras e diminuir seu tamanho para impressão do código de barras e de sua numeração com o Print Document que você deve também adicionar ao projeto:
O botão Generate contêm o seguinte código-fonte:
Private Sub BtnGenerate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnGenerate.Click
If TxtBarcode.Text <> "" Then
Dim Barcode As New BarcodeLib.Barcode(TxtBarcode.Text, BarcodeLib.TYPE.CODE128)
PicCodebar.Image = Barcode.Encode(BarcodeLib.TYPE.CODE128, TxtBarcode.Text, 200, 100)
Barcode.SaveImage("C:\Temp\BARRAS.JPG", BarcodeLib.SaveTypes.JPG)
Dim fs As New FileStream("C:\Temp\BARRAS.JPG", FileMode.Open)
Dim br As New BinaryReader(fs)
br.Close()
fs.Close()
br = Nothing
fs = Nothing
End If
End Sub
Note que o tamanho da imagem está definido com 200 e 100.
O botão Print deverá conter o seguinte código:
Private Sub BtnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnPrint.Click
PrintDocument1.Print()
End Sub
Dê dois cliques sobre o componente PrintDocument1 adicionado ao projeto e acrescente este código:
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim logo As Image = Image.FromFile("C:\Temp\barras.jpg")
Dim fnt As Font
'Font definition
fnt = New Font("Arial Narrow", 8)
'Redimensionar o Código de Barras
e.Graphics.DrawImage(logo, 10, 10, 130, 15)
e.Graphics.DrawString(TxtBarcode.Text, fnt, System.Drawing.Brushes.Black, 39, 39)
logo.Dispose()
End Sub
Esse pequeno projeto pode criar códigos de barra em vários formatos. A bibliote barcodelib pode ser obtida do link informado. Basta adicioná-la nas Referências de seu projeto através do menu Project -> Nomedoprojeto Properties.
Sucesso a todos!
sábado, 9 de fevereiro de 2013
VB.NET - CRIANDO APLICATIVOS PARA O WINDOWS 7 64 BITS
Olá, pessoal!
Dentre as muitas surpresas que podem ocorrer na criação de aplicativos a maior delas pode acontecer com relação a versão do sistema operacional.
Um aplicativo desenvolvido em Vb.NET para uma base de dados em MySQL em uma máquina com o Windows 7 de 32 bits terá problemas para funcionar adequadamente em uma máquina de usuário com o Windows 7 com a versão de 64 bits. Quem é desenvolvedor sempre esbarra nessas situações.
Agora... Como resolver o problema na sua aplicação?
É bem verdade que há boas explicações da microsoft sobre este problema. Você pode começar vendo o link abaixo:
http://support.microsoft.com/kb/942976/pt-br
Em uma máquina Windows 7 em 64 bits há duas versãos de ODBC. A que faz referência a 64 bits fica localizado na pasta \Windows\SysWoW64.
O que é necessário inicialmente é instalar a versão correta do conector odbc para o MYSQL, no caso que estou abordando aqui. Neste caso seria a mysql-connector-odbc-3.51.30-winx64.exe que você pode baixar da página do mySQL:
http://dev.mysql.com/downloads/connector/odbc/3.51.html
Após instalar o conector, você deverá ir até a pasta SysWoW64 e executar o ODBC e verificar se o conector realmente foi instalado com sucesso.
Feito isso, devemos voltar à sua aplicação.
Veja o texto abaixo:
Se suas conexões forem escritas desse modo elas funcionarão tanto para um computador de 32 bits quanto para um computador de 64 bits.
No caso de uma máquina de 64 bits você não poderá usar um odbDataReader propriamente, ou mesmo um OdbcCommand porque as mesmas retornarão erro de conexão porque sua aplicação estará esbarrando na limitação apresentada no artigo KB942976 (do primeiro link aqui do post): uma máquina com Windows 7 em 64 bits sempre enxergará dois ODBC´s e poderá dar preferência ao de 32 bits em alguns casos.
Ao utilizar o MysqlCommand, o MysqlConnection e o MysqlDatareader internamente na sua aplicação você força a mesma a evitar o problema de 32 ou 64 bits.
E assim se elimina o nó górdio das aplicações para 64 bits com uma base de dados MySQL.
Sucesso a todos!!!
domingo, 2 de setembro de 2012
MUDE PARA O WINDOWS 8
O novo sistema operacional da Microsoft é tudo e mais um pouco!
Após ler durante duas semanas sobre o uso da aplicação por outros blogs de tecnologia confesso que fiquei tentado a realizar o upgrade para o novo sistema operacional.
A Microsoft deu um passo importante para isso: disponibilizou uma versão do Windows 8 que funciona por 90 dias gratuitamente:
http://msdn.microsoft.com/en-us/evalcenter/jj554510.aspx
Após instalar em meu notebook Toshiba com um processador Intel Duo Core posso afirmar que o sistema operacional é significativamente uma grande mudança em relação ao Windows 7.
Meu notebook desliga e inicia agora em 3 segundos!
É surpreendente a velocidade com que o Windows 8 trabalha na inicialização e no encerramento.
Li muitos artigos sobre o grande debate do sumiço do menu Iniciar. Acreditem! Ele não faz falta! É muito simples apertar a tecla Windows + R ou Windows + W ou Windows + Q para executar um comando, abrir Configurações ou ver uma pesquisa e os aplicativos, respectivamente.
De todos os artigos, recomendo que você leia este:
http://www.hanselman.com/blog/Windows8ProductivityWhoMovedMyCheeseOhThereItIs.aspx
Há muitas explicações sobre os botões e modo de uso do Windows 8. Este artigo fala adequadamente para aqueles que pretendem usar à sério o Windows 8 sem cair em alardes e saudosismos sobre o menu Iniciar e outros quitutes.
Instalei aplicativos no Windows 7 como o Starcraft Anthology. Tudo o que foi necessário fazer foi ir até a pasta do Windows.old e copiar a pasta do jogo para o Program Files (x86) e a aplicação funcionou adequadamente.
A rapidez de execução dos aplicativos é surpreendente!
O que me deixou um pouco frustrado foi identificar que o Kaspersky Internet Security 2012 ainda não é compatível e adquiri três licenças do software recentemente. Terei que fazer a instalação da versão 2013 do Kaspersky que será compatível com o Windows 8. Para quem fez a aquisição de licenças recentes de alguns softwares talvez isto seja um problema. A Kaspersky ainda não me sinalizou se poderei utilizar uma de minhas licenças na versão 2013, mas provavelmente terei que adquirir uma nova.
Aproveitando a pegada fiz a instalação do Visual Studio Ultimate 2012 que funciona somente no Windows 7 e no Windows 8.
Mais uma vez a rapidez é extraordinária e a aplicação surpreende.
Recomendo que você pense seriamente em realizar a mudança de seu sistema operacional para o Windows 8.
Até o momento, tenho que dizer que está sendo extraordinário!
Sucesso a todos!!
domingo, 12 de agosto de 2012
DTS COM O VISUAL STUDIO 2010 - SQLBULKCOPY
O Visual Studio 2010 incorporou diversas ferramentas práticas para que um desenvolvedor realize trabalhos variados sem muito esforço com várias ferramentas da Microsoft. A melhor delas talvez esteja relacionada com a utilização do SQL Server e a facilidade de se criar packages e DTS para se integralizar dados com o Bussines Intelligence (lembra do Visual Studio 2008?)
O SqlBulkcopy é uma ferramenta tipada que possibilita aos desenvolvedores criarem um tipo de DTS incorporado ao código-fonte de suas aplicações. Não é necessário ir até o SQL Server para que o DTS seja executado. Você pode abrir uma base de dados, zerá-la e copiar dados diretamente para outra base de dados sem problemas.
Um DTS trabalha internamente dentro do próprio SQL Server para copiar dados entre tabelas ou executar funcionalidades específicas como atualizar automaticamente dados seguindo determinados critérios estabelecidos. Geralmente utilizamos um DTS para copiar bases de dados de produção para uma base de testes ou para migrar informações necessárias em outros sistemas com outras bases de dados.
Para obter informações sobre a classe:
http://msdn.microsoft.com/pt-br/library/system.data.sqlclient.sqlbulkcopy.aspx
Abaixo, o módulo-exemplo em VB.NET:
Module Module1
Sub Main() Dim connectionString As String = GetConnectionString()
' Open a connection to the AdventureWorks database.
Using sourceConnection As SqlConnection = _
New SqlConnection(connectionString)
sourceConnection.Open()
' Perform an initial count on the destination table.
Dim commandRowCount As New SqlCommand( _
"SELECT COUNT(*) FROM dbo.BulkCopyDemoMatchingColumns;", _
sourceConnection)
Dim countStart As Long = _
System.Convert.ToInt32(commandRowCount.ExecuteScalar())
Console.WriteLine("Starting row count = {0}", countStart)
' Get data from the source table as a SqlDataReader.
Dim commandSourceData As SqlCommand = New SqlCommand( _
"SELECT ProductID, Name, ProductNumber " & _
"FROM Production.Product;", sourceConnection)
Dim reader As SqlDataReader = commandSourceData.ExecuteReader
' Open the destination connection. In the real world you would
' not use SqlBulkCopy to move data from one table to the other
' in the same database. This is for demonstration purposes only.
Using destinationConnection As SqlConnection = _
New SqlConnection(connectionString)
destinationConnection.Open()
' Set up the bulk copy object.
' The column positions in the source data reader
' match the column positions in the destination table,
' so there is no need to map columns.
Using bulkCopy As SqlBulkCopy = _
New SqlBulkCopy(destinationConnection)
bulkCopy.DestinationTableName = _
"dbo.BulkCopyDemoMatchingColumns"
Try
' Write from the source to the destination.
bulkCopy.WriteToServer(reader)
Catch ex As Exception
Console.WriteLine(ex.Message)
Finally
' Close the SqlDataReader. The SqlBulkCopy
' object is automatically closed at the end
' of the Using block.
reader.Close()
End Try
End Using
' Perform a final count on the destination table
' to see how many rows were added.
Dim countEnd As Long = _
System.Convert.ToInt32(commandRowCount.ExecuteScalar())
Console.WriteLine("Ending row count = {0}", countEnd)
Console.WriteLine("{0} rows were added.", countEnd - countStart)
Console.WriteLine("Press Enter to finish.")
Console.ReadLine()
End Using
End Using
End Sub
Private Function GetConnectionString() As String
' To avoid storing the sourceConnection string in your code,
' you can retrieve it from a configuration file.
Return "Data Source=(local);" & _
"Integrated Security=true;" & _
"Initial Catalog=AdventureWorks;"
End Function
End Module
Veja que a função trabalha com duas conexões realizando a transferência de uma base de dados para outra.
A facilidade apresentada pode ser realizada sem a criação de qualquer DTS nas base de dados de origem ou destino, simplesmente utilizando o Visual Studio 2010 para realizar este trabalho.
Reúna a coragem que lhe resta e atreva-se a fazer um DTS através de um código-fonte!
Sucesso a todos!
domingo, 5 de agosto de 2012
O FUTURO COM O KINECT - GUITAR HERO SEM AS MÃOS
A Microsoft recentemente requisitou vários pedidos de patentes para dispositivos que manipulam hardware com as mãos somente.
Um deles chega a ser promissor: trata-se de um bracelete que lê os impulsos elétricos enviados pelo cérebro até suas mãos e os traduz em comandos a serem enviados ao computador. Há inclusive um post no Youtube apresentando a tecnologia. O bracelete é colocando na altura de seu antebraços e os sinais são enviados ao dispositivo eletrônico que realiza a leitura de que dedos das mãos foram ativados.
Todas as patentes parecem tratar do mesmo assunto: precisão.
Pode-se esperar que os futuros dispositivos a evoluírem do Kinect seja promissores.
O que mais poderá ser integrado à plataforma do novo sistema operacional da Microsoft a ser lançado em dois meses? O que poderemos ver dentro do Windows 8?
É esperar para ver.
Veja este artigo:
http://www.extremetech.com/extreme/133732-microsoft-demos-muscle-computer-interface-air-guitar-hero-now-a-reality
Um deles chega a ser promissor: trata-se de um bracelete que lê os impulsos elétricos enviados pelo cérebro até suas mãos e os traduz em comandos a serem enviados ao computador. Há inclusive um post no Youtube apresentando a tecnologia. O bracelete é colocando na altura de seu antebraços e os sinais são enviados ao dispositivo eletrônico que realiza a leitura de que dedos das mãos foram ativados.
Todas as patentes parecem tratar do mesmo assunto: precisão.
Pode-se esperar que os futuros dispositivos a evoluírem do Kinect seja promissores.
O que mais poderá ser integrado à plataforma do novo sistema operacional da Microsoft a ser lançado em dois meses? O que poderemos ver dentro do Windows 8?
É esperar para ver.
Veja este artigo:
http://www.extremetech.com/extreme/133732-microsoft-demos-muscle-computer-interface-air-guitar-hero-now-a-reality
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.
Link para download ou no CD do Windows: http://www.microsoft.com/downloads/details.aspx?FamilyID=c16ae515-c8f4-47ef-a1e4-a8dcbacff8e3&displaylang=en
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!!
Assinar:
Postagens (Atom)
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...
-
O GLPI é um dos muitos tipos de aplicativos helpdesk free existentes na internet. O fórum do mesmo pode ser encontrado neste link: ...
-
As funções abaixo ajudam na leitura de um arquivo XML da NF-e. Você só precisa fazer a leitura das tags corretas e lançá-las na base de dado...
-
A Danfe pode ser gerada em Crystal 8.5 e depois migrada para dentro do Vb.NET ou, se você preferir, totalmente criada dentro do VB.NET 2008 ...


