Compartilhar via


Coleção Fields

Aplica-se ao: Access 2013, Office 2013

A coleção Fields é uma das coleções intrínsecas do ADO. Uma coleção é um conjunto ordenado de itens ao qual podemos nos referir como uma unidade.

A coleção Fields contém um objeto Field para cada campo (coluna) no Recordset. Como todas as coleções do ADO, ela possui as propriedades Count e Item, além dos métodos Append e Refresh. Ela também possui métodos CancelUpdate, Delete, Resync e Update, que não estão disponíveis para outras coleções da ADO.

Examinando a coleção Fields

Considere a coleção Fields do Recordset de exemplo apresentado neste capítulo. O Recordset de exemplo foi derivado da instrução SQL

 
SELECT ProductID, ProductName, UnitPrice FROM Products WHERE CategoryID = 7 

Assim, deverá descobrir que a coleção Campos do Conjunto de Registos contém três campos.

 
'BeginWalkFields 
 Dim objFields As ADODB.Fields 
 
 objRs.Open strSQL, strConnStr, adOpenForwardOnly, adLockReadOnly, adCmdText 
 
 Set objFields = objRs.Fields 
 
 For intLoop = 0 To (objFields.Count - 1) 
 Debug.Print objFields.Item(intLoop).Name 
 Next 
'EndWalkFields 

Esse código determina simplesmente o número de objetos Field na coleção Fields usando a propriedade Count e os loops pela coleção, retornando o valor da propriedade Name de cada objeto Field. Você pode usar muitas outras propriedades de Field para obter informações sobre um campo. Para obter mais informações sobre como consultar um campo, consulte O objeto Field.

Contando colunas

Como você deve esperar, a propriedade Count retorna o número real de objetos Field na coleção Fields. Como a numeração dos participantes de uma coleção começa com zero, você sempre deve codificar os loops começando com o participante zero e terminado com o valor da propriedade Count menos 1. Se estiver a utilizar o Microsoft Visual Basic e quiser percorrer os membros de uma coleção sem verificar a propriedade Contar , utilize a opção ParaCada... Comando seguinte .

Se a propriedade Count for zero, não haverá objetos na coleção.

Chegando ao Field

Como em qualquer coleção do ADO, a propriedade Item é a propriedade padrão da coleção. Ela retorna o objeto Field individual especificado pelo nome ou índice passado para ela. Portanto, as instruções a seguir são equivalentes para o Recordset de exemplo:

 
objField = objRecordset.Fields.Item("ProductID") 
objField = objRecordset.Fields("ProductID") 
objField = objRecordset.Fields.Item(0) 
objField = objRecordset.Fields(0) 

Se esses métodos são equivalentes, qual é o melhor? Depende. Usar um índice para recuperar um campo da coleção é mais rápido porque ele acessa o campo diretamente, sem precisar executar uma busca de sequência. Por outro lado, a ordem de campos na coleção deve ser conhecida e, se a ordem for alterada, a referência ao índice de campos deverá ser alterado, onde quer que ocorra. Apesar de um pouco mais lenta, a utilização do nome do campo é mais flexível porque não depende da ordem dos campos na coleção.

Usando o método Refresh

Diferente de algumas outras coleções do ADO, a utilização do método Refresh na coleção Fields não tem nenhum efeito visível. Para recuperar alterações da estrutura do banco de dados de base, você deve usar o método Requery ou, se o objeto Recordset não oferecer suporte a indicadores, o método MoveFirst, que fará o comando ser executado contra o provedor novamente.

Adicionando campos a um Recordset

O método Append é usado para adicionar campos a um Recordset.

Você pode usar o método Append para fabricar um Recordset por programação, sem abrir uma conexão com uma origem de dados. Ocorrerá um erro em tempo de execução se o método Append for chamado na coleção Fields de um Recordset aberto ou em um Recordset onde a propriedade ActiveConnection tiver sido definida. Você pode acrescentar campos apenas a um Recordset que não esteja aberto e ainda não esteja conectado a uma origem de dados. Contudo, para especificar valores para os campos recém-acrescentados, o Recordset deverá ser aberto primeiro.

Frequentemente os desenvolvedores precisam de um lugar para armazenar alguns dados temporariamente ou desejam que alguns dados atuem como se viessem de um servidor de forma que possam participar na ligação de dados em uma interface do usuário. O ADO (em conjunto com o Microsoft Cursor Service for OLE DB) permite que o desenvolvedor crie um objeto Recordset vazio especificando informações de coluna e chamando Open. No exemplo a seguir, três novos campos são acrescentados a um objeto Recordset novo. Em seguida, o Recordset é aberto, dois registros novos são adicionados e o Recordset é mantido em um arquivo. (Para obter mais informações sobre a manutenção do Recordset, consulte o Capítulo 5: Atualizando e mantendo dados.)

 
 'BeginFabricate 
 Dim objRs As New ADODB.Recordset 
 
 With objRs.Fields 
 .Append "StudentID", adChar, 11, adFldUpdatable 
 .Append "FullName", adVarChar, 50, adFldUpdatable 
 .Append "PhoneNmbr", adVarChar, 20, adFldUpdatable 
 End With 
 
 With objRs 
 .Open 
 
 .AddNew 
 .Fields(0) = "123-45-6789" 
 .Fields(1) = "John Doe" 
 .Fields(2) = "(425) 555-5555" 
 .Update 
 
 .AddNew 
 .Fields(0) = "123-45-6780" 
 .Fields(1) = "Jane Doe" 
 .Fields(2) = "(615) 555-1212" 
 .Update 
 End With 
 
 objRs.Save App.Path & "\FabriTest.adtg", adPersistADTG 
 
 objRs.Close 
 'EndFabricate 

A utilização do método CamposAcrescentar difere entre o objeto Conjunto de registos e o objeto Gravar . Para obter mais informações sobre o objeto Record, consulte o Capítulo 10: Registros e fluxos.