Sobre como conectar-se aos dados no Visio
Observação
Recursos de conectividade de dados estão disponíveis apenas para usuários licenciados do Microsoft Visio Professional 2013.
São quatro os aspectos de conectividade de dados no Visio:
Conexão com uma fonte de dados
Vinculando formas aos dados
Exibição gráfica de dados vinculados
Atualização de dados vinculados que foram alterados na fonte de dados, atualização de formas vinculadas e solução de conflitos subsequentes que possam surgir
Em geral, você aborda esses aspectos na ordem em que eles estão listados, ou seja, primeiro você conecta o desenho do Visio a uma fonte de dados, depois vincula as formas do desenho aos dados da fonte de dados, exibe os dados graficamente em formas vinculadas, e atualiza os dados vinculados, quando necessário. Cada um desses aspectos tem novos objetos e membros associados a ele no modelo de objeto do Visio. Este tópico fala sobre o primeiro desses aspectos, a conexão do desenho do Visio com uma fonte de dados. Para obter mais informações sobre os outros aspectos da conectividade de dados, consulte os seguintes tópicos:
Para conectar seu desenho do Visio a uma fonte de dados programaticamente, você pode usar a API do Visio para a conectividade dos dados, que inclui os seguintes objetos e seus membros associados:
Coleção DataRecordsets
ObjetoDataRecordset
ObjetoDataConnection
Coleção DataColumns
ObjetoDataColumn
Sobre os conjuntos de registros de dados e as conexões de dados
Cada objeto Document do Visio tem uma coleção DataRecordsets, que fica vazia até que seja efetuada uma conexão a uma fonte de dados. Para conectar um documento Visio a uma fonte de dados, é preciso adicionar um objeto DataRecordset à coleção DataRecordsets do documento. Um objeto DataRecordset por sua vez, tem uma coleção DataColumns de objetos DataColumn, cada um deles mapeado a uma coluna (campo) correspondente na fonte de dados.
As fontes de dados, às quais você pode se conectar, incluem as planilhas do Excel, bancos de dados do Microsoft Access e do SQL Server, listas do Microsoft SharePoint e demais fontes de dados OLEDB ou ODBC, como um banco de dados Oracle. Quando for adicionado um objeto DataRecordset conectando-se a uma dessas fontes de dados, o Visio resumirá a conexão em um objeto DataConnection e o objeto DataRecordset será interpretado como conectado.
Também é possível adicionar um objeto DataRecordset usando um arquivo XML em conformidade com o esquema de Conjunto de Registros de Dados XML ADO Classic (ADO versão 2.x) como a fonte de dados. O objeto DataRecordset resultante é considerado sem conexão. A conexão entre uma fonte de dados e um objeto DataRecordset é unidirecional — da fonte de dados para o desenho do Visio. Se os dados da fonte forem alterados, você poderá atualizá-los no desenho para refletir essas alterações. Porém, você não poderá fazer alterações nos dados do desenho e, em seguida, levar essas alterações de volta para a fonte de dados.
Adicionando objetos DataRecordset
Para adicionar um objeto DataRecordset à coleção DataRecordsets, é possível usar um dos três métodos seguintes, dependendo da fonte de dados à qual você deseja se conectar e se você optar por passar ao método uma cadeia de conexão ou uma cadeia de comandos para consulta ou um arquivo ODC (Conexão de Dados do Office) salvo que contém as informações de conexão e de consulta:
A macro de exemplo do VBA (Visual Basic for Applications) a seguir mostra como é possível usar o método Add para conectar um desenho do Visio aos dados de uma planilha do Excel, neste caso, na pasta de trabalho de exemplo ORGDATA.XLS, incluída no Visio:
Public Sub AddDataRecordset()
Dim strConnection As String
Dim strCommand As String
Dim strOfficePath As String
Dim vsoDataRecordset As Visio.DataRecordset
strOfficePath = Visio.Application.Path
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" _
& "User ID=Admin;" _
& "Data Source=" + strOfficePath + "SAMPLES\1033\ORGDATA.XLS;" _
& "Mode=Read;" _
& "Extended Properties=""HDR=YES;IMEX=1;MaxScanRows=0;Excel 12.0;"";" _
& "Jet OLEDB:Engine Type=34;"
strCommand = "SELECT * FROM [Sheet1$]"
Set vsoDataRecordset = ActiveDocument.DataRecordsets.Add(strConnection, strCommand, 0, "Data")
End Sub
Observação
Se você executar esse código em compilações do Visio que não sejam no idioma inglês, o caminho para o arquivo ORGDATA.XLS, mostrado aqui como "Samples\1033\ORGDATA.XLS," será diferente. Substitua o caminho correto da sua versão do Visio no seu código.
O método Adicionar retorna um objeto DataRecordset e aplica quatro parâmetros:
ConnectionIDOrString A identificação de um objeto DataConnection existente ou a cadeia de conexão para especificar uma nova conexão à fonte de dados. Se for passada a identificação de um objeto DataConnection existente que, no momento, está sendo usado por um ou mais conjuntos de registro de dados, esses conjuntos tornam-se um grupo de conjuntos de registros transacionado. Todos os conjuntos de registros de dados no grupo serão atualizados sempre que ocorrer uma operação de atualização de dados. É possível determinar uma cadeia de conexão adequada usando primeiro o Assistente do Seletor de Dados na interface de usuário (IU) para realizar a mesma conexão, registrando uma macro durando a execução do assistente e em seguida copiando a cadeia da conexão a partir do código da macro.
CommandStringA cadeia que especifica a tabela do banco de dados ou a planilha do Excel e especifica os campos (colunas) dentro da tabela do banco de dados ou a planilha do Excel e especifica os campos (colunas) dentro da tabela ou planilha que contém os dados que deseja consultar. A cadeia de comando é também passada ao método DataRecordset.Refresh quando os dados no conjunto de registros são atualizados.
AddOptions A combinação de um ou mais valores da enumeração VisDataRecordsetAddOptions. Esses valores especificam alguns comportamentos do conjunto de registros de dados e tornam possível, por exemplo, impedir que os dados consultados no conjunto de registros apareçam na janela Dados Externos na IU do Visio ou sejam atualizados por meio de ações de usuários. Após atribuir esse valor, não será possível alterá-lo por toda a validade do objeto DataRecordset .
Nomeie uma cadeia de caracteres opcional que forneça ao conjunto de dados um nome de exibição. Caso você especifique que a janela Dados Externos seja exibida na interface do usuário do Visio, o nome que você passar aparecerá na guia daquela janela que correspondente ao conjunto de registros de dados. Em nosso exemplo, não existe uma conexão; assim, como primeiro parâmetro do método Add passamos strConnection, a cadeia de caracteres de conexão que definimos. Para o segundo parâmetro, passamos strCommand, a cadeia de caracteres de comando que definimos, que orienta o Visio a selecionar todas as colunas da planilha especificada. Como terceiro parâmetro do método Add, passamos zero para especificar o comportamento padrão do conjunto de registro de dados e, como último parâmetro, passamos Org Data, o nome de exibição que definimos para o conjunto de registro de dados.
O código de amostra a seguir mostra como obter o objeto DataConnection que foi criado quando adicionamos um objeto DataRecordset à coleção DataRecordsets. Imprime a cadeia de conexão associada ao objeto DataConnection na janela Immediate acessando a propriedade ConnectionString do objeto DataConnection.
Public Sub GetDataConnectionObject(vsoDataRecordset As Visio.DataRecordset)
Dim vsoDataConnection As DataConnection
Set vsoDataConnection = vsoDataRecordset.DataConnection
Debug.Print vsoDataConnection.ConnectionString
End Sub
Do mesmo modo que você obtém a cadeia de conexão associada a um objeto DataConnection acessando sua propriedade ConnectionString, é possível obter a cadeia de comandos associada ao objeto DataRecordset acessando sua propriedade CommandString. Ambas as propriedades são atribuíveis, portanto, é possível alterar a fonte de dados associada a um objeto DataRecordset ou a consulta associada ao objeto DataConnection sempre que necessário, embora as alterações não sejam refletidas no seu desenho antes de atualizar os dados. Para obter mais informações sobre a atualização de dados, consulte Vinculando formas a dados.
Acessando dados em Conjuntos de Registros de Dados programaticamente
Ao importar os dados, o Visio atribui identificações de linha de inteiro, iniciando pelo número 1, a cada linha de dados no respectivo conjunto de registro de dados, com base na classificação das linhas na fonte de dados original. O Visio usa as identificações de linha de dados para rastrear as linhas quando essas estão vinculadas a formas e quando os dados são atualizados. Se optar por acessar as linhas de dados programaticamente, você deverá usar essas identificações de linha de dados. Para obter mais informações sobre como as operações de atualização de dados afetam a classificação das linhas, consulte Vinculando formas a dados.
Use o método DataRecordset.GetDataRowIDs para obter uma matriz de IDs de todas as linhas em um conjunto de registros de dados, em que cada linha representa um único registro de dados. O método GetDataRowIDs usa como parâmetro uma cadeia de caracteres de critérios, que é uma cadeia de caracteres que está em conformidade com as diretrizes especificadas na API ActiveX Data Object (ADO) para definir a propriedade ADO.Filter. A especificação de critérios apropriados e o uso dos operadores AND e OR para separar cláusulas permite filtrar as informações no conjunto de registros de dados para retornar apenas algumas linhas do conjunto de registros de dados de forma seletiva. Para não aplicar nenhum filtro (ou seja, para obter todas as linhas), passe uma cadeia de caracteres vazia (""). Para obter mais informações sobre as cadeias de critérios, consulte o tópico Propriedade do filtro na Referência de API do ADO 2.x. Após serem recuperadas as identificações das linhas de dados, é possível usar o método DataRecordset.GetRowData para obter todos os dados armazenados em cada coluna da linha de dados. Para obter mais informações sobre as colunas de dados, consulte Sobre vinculação de formas a dados.
O código de exemplo a seguir mostra como usar os métodos GetDataRowIDs e GetRowData para retornar a identificação de cada linha e, em seguida, obter os dados armazenados em cada coluna, em cada linha do conjunto de registros de dados passado. Ele usa dois loops aninhados For…Next para iterar em todas as linhas do conjunto de registros e para cada linha, iterar em todas as colunas dessa linha. O código exibe as informações retornadas na janela Imediato. Observe que você passa uma cadeia de caracteres vazia para o método GetDataRowIDs para ignorar a filtragem e obter todas as linhas do conjunto de registros. Após chamar o procedimento, observe que o primeiro conjunto de dados exibido (correspondente à primeira linha de dados) contém os títulos de todas as colunas de dados do conjunto de registros de dados.
Public Sub GetDataRecords(vsoDataRecordset As Visio.DataRecordset)
Dim lngRowIDs() As Long
Dim lngRow As Long
Dim lngColumn As Long
Dim varRowData As Variant
'Get the row IDs of all the rows in the recordset
lngRowIDs = vsoDataRecordset.GetDataRowIDs("")
'Iterate through all the records in the recordset.
For lngRow = LBound(lngRowIDs) To UBound(lngRowIDs)
varRowData = vsoDataRecordset.GetRowData(lngRow)
'Print a separator between rows
Debug.Print "------------------------------"
'Print the data stored in each column of a particular data row.
For lngColumn = LBound(varRowData) To UBound(varRowData)
Debug.Print vsoDataRecordset.DataColumns(lngColumn + 1).Name _
& Trim(Str(lngColumn)) & " = " & VarRowData(lngColumn)
Next lngColumn
Next lngRow
End Sub
Suporte e comentários
Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.