O objeto Field
Cada objeto Field geralmente corresponde a uma coluna em uma tabela de banco de dados. No entanto, um Field também pode representar um ponteiro para um outro Recordset, chamado de capítulo. Exceções, como colunas de capítulo, serão abordadas posteriormente neste guia.
Use a propriedade Value de objetos Field para definir ou retornar dados para o registro atual. Dependendo da funcionalidade que o provedor expõe, algumas coleções, métodos ou propriedades de um objeto Field podem não estar disponíveis.
Com as coleções, métodos e propriedades de um objeto Field, você pode fazer o seguinte:
Retorne o nome de um campo usando a propriedade Name.
Exiba ou altere os dados no campo usando a propriedade Value. Value é a propriedade padrão do objeto Field.
Retorne as características básicas de um campo usando as propriedades Type, Precisione NumericScale.
Retorne o tamanho declarado de um campo usando a propriedade DefinedSize.
Retorne o tamanho real dos dados em um determinado campo usando a propriedade ActualSize.
Determine quais tipos de funcionalidade têm suporte para um determinado campo usando a propriedade Attributes e a coleção Properties.
Manipule os valores de campos contendo dados binários longos ou de caracteres longos usando os métodos AppendChunk e GetChunk.
Resolva discrepâncias nos valores de campo durante a atualização em lote usando as propriedades OriginalValue e UnderlyingValue, se o provedor der suporte a atualizações em lote.
Descrevendo um campo
Os tópicos a seguir discutirão as propriedades do objeto Field que representam informações que descrevem o field objeto propriamente dito, ou seja, metadados sobre o campo. Essas informações podem ser usadas para determinar muito sobre o esquema do conjunto de registros . Essas propriedades incluem Type, DefinedSize, ActualSize, Name, NumericScale e Precision.
Descobrindo o tipo de dados
A propriedade Type indica o tipo de dados do campo. As constantes enumeradas de tipo de dados suportadas pelo ADO são descritas em DataTypeEnum no Referência do Programador do ADO.
Para tipos numéricos de ponto flutuante, como adNumeric, você pode obter mais informações. A propriedade NumericScale indica quantos dígitos à direita do ponto decimal serão usados para representar valores para o campo . A propriedade Precision especifica o número máximo de dígitos usados para representar valores para o campo .
Determinando o tamanho do campo
Use a propriedade DefinedSize para determinar a capacidade de dados de um objeto Field.
Use a propriedade ActualSize para retornar o comprimento real do valor do objeto Field. Para todos os campos, a propriedade ActualSize é somente leitura. Se o ADO não puder determinar o comprimento do valor do objeto Field, a propriedade ActualSize retornará adUnknown.
As propriedades DefinedSize e ActualSize têm diferentes finalidades. Por exemplo, considere um objeto Field com um tipo declarado de adVarChar e um valor de propriedade DefinedSize de 50, contendo um único caractere. O valor da propriedade ActualSize que retorna é o comprimento em bytes do caractere único.
Determinando o conteúdo do campo
O identificador da coluna da fonte de dados é representado pela propriedade Name do campo . A propriedade Value do objeto Field retorna ou define o conteúdo real dos dados do campo. Essa é a propriedade padrão.
Para alterar os dados em um campo, defina a propriedade Value igual a um novo valor do tipo correto. Seu tipo de cursor deve dar suporte a atualizações para alterar o conteúdo de um campo. A validação do banco de dados não é feita aqui no modo de lote, portanto, você precisará verificar se há erros ao chamar UpdateBatch nesse caso. Alguns provedores também dão suporte às propriedades UnderlyingValue e OriginalValue do objeto Field do ADO para ajudá-lo a resolver conflitos quando você tenta executar atualizações em lote. Para obter detalhes sobre como resolver esses conflitos, consulte Editando dados.
Nota
Os valores do campo no conjunto de registros não podem ser definidos ao acrescentar novos campos a um conjunto de registros . Em vez disso, novos campos de podem ser acrescentados a um conjunto de registros fechado. Em seguida, o Recordset deve ser aberto e somente então os valores podem ser atribuídos a esses campos .
Obtendo mais informações de campo
Os objetos ADO têm dois tipos de propriedades: internos e dinâmicos. Até agora, somente as propriedades internas do objeto Field foram discutidas.
As propriedades internas são essas propriedades implementadas no ADO e imediatamente disponíveis para qualquer novo objeto, usando a sintaxe MyObject.Property
. Eles não aparecem como objetos Property na coleção de Propriedades de um objeto.
As propriedades dinâmicas são definidas pelo provedor de dados subjacente e aparecem na coleção Properties para o objeto ADO apropriado. Por exemplo, uma propriedade específica do provedor pode indicar se um objeto Recordset dá suporte a transações ou atualização. Essas propriedades adicionais aparecerão como objetos Property na coleção properties do objetoRecordset. As propriedades dinâmicas só podem ser referenciadas por meio da coleção, usando a sintaxe MyObject.Properties(0)
ou MyObject.Properties("Name")
.
Você não pode excluir qualquer tipo de propriedade.
Um objeto de propriedade dinâmico possui quatro propriedades embutidas próprias:
A propriedade Name é uma cadeia de caracteres que identifica a propriedade.
A propriedade Type é um inteiro que especifica o tipo de dados da propriedade.
A propriedade Value é uma variante que contém a configuração da propriedade. Value é a propriedade padrão para um objeto de Propriedade.
A propriedade Atributos é um valor Long que indica características específicas do provedor.
A coleção Propriedades do para o objeto Field contém metadados adicionais sobre o campo. O conteúdo dessa coleção varia dependendo do provedor. O exemplo de código a seguir examina a coleção Properties do exemplo Recordset introduzido no início desta seção. Ele examina primeiro o conteúdo da coleção. Esse código usa o provedor OLE DB parado SQL Server, de modo que a coleção propriedades contém informações relevantes para esse provedor.
'BeginFieldProps
Dim objProp As ADODB.Property
For intLoop = 0 To (objFields.Count - 1)
Debug.Print objFields.Item(intLoop).Name
For Each objProp In objFields(intLoop).Properties
Debug.Print vbTab & objProp.Name & " = " & objProp.Value
Next objProp
Next intLoop
'EndFieldProps
Lidando com dados binários
Use o método AppendChunk em um objeto Field para preenchê-lo com dados binários ou de caracteres longos. Em situações em que a memória do sistema é limitada, você pode usar o método AppendChunk para manipular valores longos em partes e não em sua totalidade.
Se o bit adFldLong na propriedade Attributes de um objeto Field estiver definido como True, você pode usar o método AppendChunk para esse campo.
A primeira chamada AppendChunk em um objeto Field grava dados no campo, substituindo quaisquer dados existentes. Chamadas AppendChunk subsequentes adicionam aos dados existentes. Se você estiver acrescentando dados a um campo e, em seguida, definir ou ler o valor de outro campo no registro atual, o ADO pressupõe que você terminou de acrescentar dados ao primeiro campo. Se você chamar o método AppendChunk no primeiro campo novamente, o ADO interpretará a chamada como uma nova operação AppendChunk e substituirá os dados existentes. Acessar campos em outros Recordset objetos que não são clones do primeiro Recordset objeto não interromperá as operações de AppendChunk.
Use o método GetChunk em um objeto Field para recuperar parte ou todos os seus dados binários ou de caractere longos. Em situações em que a memória do sistema é limitada, você pode usar o método GetChunk para manipular valores longos em partes, em vez de em sua totalidade.
Os dados que uma chamada GetChunk retorna são atribuídos a variável. Se Tamanho for maior que os dados restantes, o método GetChunk retornará apenas os dados restantes sem preencher a variável com espaços vazios. Se o campo estiver vazio, o método GetChunk retornará um valor nulo.
Cada chamada GetChunk subsequente recupera dados a partir do ponto onde a chamada anterior GetChunk parou. No entanto, se você estiver recuperando dados de um campo e, em seguida, definir ou ler o valor de outro campo no registro atual, o ADO pressupõe que você concluiu a recuperação de dados do primeiro campo. Se você chamar novamente o método GetChunk no primeiro campo, o ADO interpretará a chamada como uma nova operação GetChunk e começará a ler desde o início dos dados. Acessar campos nos outros objetos do tipo Recordset que não são clones do primeiro objeto Recordset não interromperá as operações de GetChunk.
Se o adFldLong bit na propriedade Attributes de um objeto Field estiver definido como True, você poderá usar o método GetChunk para esse campo.
Se não houver nenhum registro atual quando você usar o método GetChunk ou AppendChunk em um objeto Field, ocorrerá o erro 3021 (nenhum registro atual).
Para obter um exemplo de como usar esses métodos para manipular dados binários, consulte os exemplos do método AppendChunk e método GetChunk na Referência do Programador do ADO .