Todos os posts de Tomás Vásquez

Exportando dados do Microsoft Outlook fácil, fácil

Uma maneira fácil de fazer a exportação de dados do Outlook para uma base de dados é usar o próprio assistente de exportação do aplicativo.

Muitas vezes nos enrolamos tentando fazer consultas diretas ao arquivo .pst sem atentar a este simples recurso. Para efetuar a exportação, basta ir ao menu Arquivo->Importar e exportar…, selecionar a opção “Exportar para um arquivo”, selecionar o tipo de arquivo ou base de dados em que os dados ficarão (para facilitar neste caso, selecione Microsoft Excel), selecionar a pasta a ser exportada (sim, terá que ser uma por vez)e em seguida informar o nome de arquivo. Há uma opção para manipular campos personalizados, mas não é o caso, então, basta confirmar a ação.

Após a exportação, basta conferir o formato em que os dados foram exportados. Praticamente todas as informações relevantes estão lá, e podem ser manipuladas a vontade.

Um recurso bacana e muito simples de ser utilizado.

Até a próxima!

Tomás Vásquez

Visual Studio 2005 – Extendendo o DataGridView Windows Forms

É, às vezes a Microsoft se esquece de algumas coisas, mas tenta consertar logo depois, seja por meio de patches ou através de exemplos postados em seu Knowledge Base.

Um desses esquecimentos, pelo menos que vivenciei, foi a falta do controle DateTimePicker para o .NET Compact Framework, quando me envolvi em um projeto para Pocket PCs. Apesar do controle não existir na ToolBox do Visual Studio .NET, a Microsoft o disponibiliza no site MSDN com código fonte e tudo mais. O link para o código nesta data é:
http://www.microsoft.com/downloads/details.aspx?FamilyID=11e2aa23-a6d3-441b-b622-b3a4d7695f44&DisplayLang=en

Não ter o controle pode dar um ar de imcompleteza à ferramenta, mas pensando pelo lado bom, talvez a real intenção seja mostrar o que é possível fazer com a esta. Venhamos e convenhamos, que programador se daria ao trabalho de construir do zero um DateTimePicker com todas as suas características? Acho que vale a observação.

Completando o assunto, acho que a Microsoft decidiu fazer o mesmo com o DateTimePicker para o controle DataGridView Windows Forms no Visual Studio 2005. Ele não é nativo, mas é possível adicioná-lo na nossa solução com o código também disponibilizado pela Microsoft:
http://msdn2.microsoft.com/en-us/library/7tas5c80(vs.80).aspx

Além de simplesmente embuti-lo no projeto, vale as pena uma bela olhada no código fonte.

Abraços

Tomás Vásquez

Parametrizando a importação de dados no Excel

Fazendo referência aos treinamentos em vídeo sobre união de planilhas usando a importação de dados no Excel, uma das dúvidas que surgiram entre os telespectadores foi sobre a parametrização dos dados nas consultas em SQL.

Pelo que entendi, foi uma tentativa de fazer analogia às consultas criadas no Access, em que costumeiramente menciona-se parâmetros na cláusula WHERE através do caractere chave colchete “[]”.

A criar uma consulta no Access como esta:

1
SELECT *FROM Clientes WHERE ID = [Digite o Id do Cliente];

Ao ser executada, surge uma caixa de texto com a mensagem colocada entre os colchetes da cláusula WHERE, para que o valor do parâmetro seja informado por digitação. O mesmo não acontece com o recurso de importação de dados do Excel. Pelo menos em meus testes, não consegui uma alternativa automática para fazer a importação de dados. Então, o jeito é fazer por código mesmo. Para tentar ajudar nesta tarefa, efetuarei o mesmo procedimento de importação de dados no vídeo de treinamentos com o gravador de macros ativado. Após isso, o seguinte código VBA é gerado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Sub ImportarDados()
'
' ImportarDados Macro
' Macro gravada em 22/9/2006 por Tomás Vásquez
'
 
'
    With ActiveSheet.QueryTables.Add(Connection:=Array( _
                                                 "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=C:\temp\Clientes.xls;Mode=Share Deny Write;Extended Prope" _
       , _
                                     "rties=""HDR=YES;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=35" _
       , _
                                     ";Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Databa" _
       , _
                                     "se Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=Fa" _
       , "lse;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"), _
                                     Destination:=Range("A1"))
        .CommandType = xlCmdSql
        .CommandText = Array( _
                       "SELECT * FROM [Clientes$] WHERE CódigoDoCliente = ""ALFKI""")
        .Name = "Clientes"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .SourceDataFile = "C:\temp\Clientes.xls"
        .Refresh BackgroundQuery:=False
    End With
End Sub

Percebam que todos os dados informados foram gravados, inclusive o nome de planilha e o comando SQL. Agora, usando um pouco de código VBA adicionai, é perfeitamente possível parametrizar nossa importação de dados. Um exemplo extremamente simples é adicionar as seguintes linhas códigos e alterar a linha onde está o comando SQL:

1
2
3
4
5
Dim Codigo As String, SQL As String
Codigo = InputBox("Digite o Código do Cliente:", "Parâmetros da consulta", "Codigo")
SQL = "SELECT * FROM [Clientes$] WHERE CódigoDoCliente = """ & Codigo & """"
'nova linha do comando SQL
.CommandText = Array(SQL)

Agora é só executar e informar o valor do parâmetro na InputBox. Agora é usar a imaginação para construir consultas com parâmetros mais aprimorados, validação e tudo mais. É lógico que agora você pode extrair os valor do parâmetro de qualquer lugar da planilha, como o valor de uma célula, um UserForm. Abaixo segue o código completo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Sub ImportarDados()
'
' ImportarDados Macro
' Macro gravada em 22/9/2006 por Tomás Vásquez
'
 
'
    Dim Codigo As String, SQL As String
    Codigo = InputBox("Digite o Código do Cliente:", "Parâmetros da consulta", "Codigo")
    SQL = "SELECT * FROM [Clientes$] WHERE CódigoDoCliente = """ & Codigo & """"
    With ActiveSheet.QueryTables.Add(Connection:=Array( _
                                                 "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=C:\temp\Clientes.xls;Mode=Share Deny Write;Extended Prope" _
       , _
                                     "rties=""HDR=YES;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=35" _
       , _
                                     ";Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Databa" _
       , _
                                     "se Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=Fa" _
       , "lse;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"), _
                                     Destination:=Range("A1"))
        .CommandType = xlCmdSql
        .CommandText = Array(SQL)
        .Name = "Clientes"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .SourceDataFile = "C:\temp\Clientes.xls"
        .Refresh BackgroundQuery:=False
    End With
End Sub

Agora é com vocês. Boa sorte a todos.

Tomás Vásquez