Pois é, em inúmeras ocasiões, quais bravos desenvolvedores, precisaremos conectar os mais diversos tipos de dados externos às nossas aplicações.
Isso pode ser feito: MS Access, Outros SGBDS do mercado, Ligações ODBC, Planilhas eletrônicas, Dados disponíveis em sites. E, neste caso, conectando-se a dados .CSV
Bem, tanto no caso do CSV, quanto do Texto, o modo é praticamente igual. Excetuando-se o fato de que os dados dentro do CSV estejam delimitados por ponto-e-vírgula.
Ahh, não seria nada apropriado continuar escrevendo este artigo sem explicar o que significa a extensão CSV, pois então, segue:
CSV - Comma-separated values
É um formato de arquivo que armazena dados tabelados, cujo grande uso vem da época dos mainframes. Por serem bastante simples, arquivos .csv são comuns em todas as plataformas de computador.
O CSV é uma implementação particular de arquivos de texto separados por um delimitador, que usa a vírgula e a quebra de linha para separar os valores. O formato também usa as aspas em campos no qual são usados os caracteres reservados (vírgula e quebra de linha). Essa robustez no formato torna o CSV mais amplo que outros formatos digitais do mesmo segmento.
Embora não exista uma especificação formal do formato CSV, o RFC 4180descreve um formato comum e estabelece text/csv como um tipo MIMEregistrado na IANA. Formalmente, o CSV é um formato de dados delimitado que possui campos (colunas) separados por caracteres de vírgula e registros (linhas) separados por caracteres de quebra de linha. Campos que contêm caracteres especiais (vírgula, quebra de linha ou aspas) devem ser envolvidos em aspas. Entretanto, se uma linha contiver uma única entrada que seja uma cadeia vazia, ela também pode ser envolvida por aspas. Se um campo contiver um caractere de aspas, ele é discernido posicionando outro caractere igual logo em seguida. O formato CSV não requisita uma codificação de caracteres, uma ordenação de bytes ou um formato de terminador de linha.
Bem, vamos ao que interessa. Como podemos conectar, através do VBA, um arquivo texto ou CSV?
Criei duas funções que fazem este papel para nós, livrando-nos de parte da dor de cabeça:
Nesta função abaixo não só conectamos um arquivo externo, mas fazemos ainda mais do que isso por exportá-lo para outro banco de dados. Ou seja, numa aplicação desenvolvida com o MS Access, geralmente um deles contém as interface (Formulários, Relatórios) e maioria das queries. Deixamos as tabelas e respectivas conexões em outro banco a parte.
Neste banco a parte efetuamos backups mais intensamente. Este banco a parte também fica disponível para outras camadas de dados, como por exemplo, para a criação da base indexada: KPI, Dashboard, Reports, e Scorecards.
Function ConecAction' Author: Date: Contact: URL:' André Bernardes 12/04/2011 11:39 bernardess@gmail.com http://al-bernardes.sites.uol.com.br/' Conecta arquivos texto disponíveis no Path.Dim nPath As StringDim nPath2 As StringDim nArchive As StringDim nFile As StringDim dbSource As StringDim dbTarget As String' O nome do arquivo e o caminho (Path) vem de um formulário.Let nPath = Left(CurrentDb().Name, InStr(1, CurrentDb().Name, "Bernardess") - 2) & [Form_frm_Avisos].CxPath2.ValueLet nPath2 = Left(CurrentDb().Name, InStr(1, CurrentDb().Name, "Bernardess ") - 1)Let nArchive = [Form_frm_Avisos].CxFile2Let nFile = nPath & nArchiveLet dbSource = Left(nArchive, Len(nArchive) - 4) '"Cnn_" & nArchiveLet dbTarget = nPath2 & "OtherBernardesBase.accdb"If IsNull(nPath) Or IsNull(nArchive) ThenBeepMsgBox "Providencie o Path onde está o arquivo, bem como o nome do mesmo!", vbExclamation, ".: Bernardes Message"ElseCall ConectTXTFile(1, "<Nome da especificação de importação>", dbSource, nPath & nArchive) ' Conecta arquivo texto.'Call ExportTextFileConected (dbTarget, dbSource) ' Exporta arquivo texto para Base de Dados.End If' Atualiza o Form.[Form_frm_Avisos].listConnectedFiles.RequeryEnd
Function ConectTXTFile' Author: Date: Contact: URL:' André Bernardes 11/04/2010 15:49 bernardess@gmail.com http://al-bernardes.sites.uol.com.br/' Conecta todos os arquivos textos..' Listening: .' Checa a existência da tabela neste banco e a apaga.If ObjectExists("Table", TableName) ThenDoCmd.DeleteObject acTable, TableName ' Se a tabela existir apaga-a.End IfIf nType = 0 ThenDoCmd.TransferText acLinkFixed, nLayout, TableName, nFile, FalseElseIf nType = 1 ThenDoCmd.TransferText acLinkDelim, nLayout, TableName, nFile, FalseEnd IfEnd Function
As demais funções que percebe no código podem ser obtidas, caso deseje, por enviar-me um e-mail solicitando-as.
Boa diversão....Ehhh, em ocasião posterior abordaremos como conectar as demais bases de dados citadas.
Fontes: Wiki, GMAIL - Criando arquivo CSV
Tags: Excel,Connection, conect, CSV, TXT, RFC 4180, IANA, MIME, TransferText, acLinkFixed