Comentários sobre o HelloData
O aplicativo HelloData percorre as operações básicas de um aplicativo ADO típico: obter, examinar, editar e atualizar dados. Ao iniciar o aplicativo, clique no primeiro botão, Obter Dados. Isso executará a sub-rotina GetData.
GetData
GetData coloca uma cadeia de conexão válida em uma variável de nível de módulo, m_sConnStr. Para saber mais sobre cadeias de conexão, confira Como criar cadeias de conexão.
Atribua um manipulador de erros usando uma instrução Visual Basic OnError. Para obter mais informações sobre o tratamento de erro no ADO, confira Tratamento de erro. Um objeto Connection é criado, e a propriedade CursorLocation é definida como adUseClient porque o exemplo de HelloData cria um Recordset desconectado. Isso significa que, assim que os dados forem buscados da fonte de dados, a conexão física com a fonte de dados será interrompida, mas você ainda poderá trabalhar com os dados armazenados em cache localmente no objeto Recordset.
Depois que a conexão for aberta, atribua uma string SQL a uma variável (sSQL). Em seguida, crie uma instância de um novo objeto Recordset, m_oRecordset1
. Na próxima linha de código, abra o Recordset na Connection existente, transmitindo sSQL
como a origem do Recordset. Você ajuda o ADO a determinar se a cadeia de caracteres SQL transmitida como a origem para o Recordset é uma definição textual de um comando transmitindo adCmdText no argumento final para o método Recordset Open. Essa linha também define o LockType e o CursorType associados ao Recordset.
A próxima linha de código define a propriedade MarshalOptions como igual a adMarshalModifiedOnly. MarshalOptions indica os registros que devem ter marshaling na camada intermediária (ou no servidor Web). Para saber mais sobre o marshaling, confira a documentação do COM. Quando você usa adMarshalModifiedOnly com um cursor do lado do cliente (CursorLocation = adUseClient), somente os registros que foram modificados no cliente são gravados novamente na camada intermediária. A definição de MarshalOptions como adMarshalModifiedOnly pode aprimorar o desempenho porque menos linhas passam pelo marshaling.
Em seguida, desconecte o Recordset definindo a propriedade ActiveConnection como Nothing. Para obter mais informações, confira a seção "Como desconectar e reconectar o conjunto de registros" em Como atualizar e persistir dados.
Feche a conexão com a fonte de dados e destrua o objeto Connection existente. Isso vai liberar os recursos que ele consumiu.
A etapa final é definir o Recordset como o DataSource para o Microsoft DataGrid Control no formulário para que você possa exibir com facilidade os dados do Recordset no formulário.
Clique no segundo botão, Examinar Dados. Isso executará a sub-rotina ExamineData.
ExamineData
ExamineData usa vários métodos e várias propriedades do objeto Recordset para exibir informações sobre os dados contidos no Recordset. Ele relata o número de registros usando a propriedade RecordCount. Ele faz loop pelo Recordset e imprime o valor da propriedade AbsolutePosition na caixa de texto de exibição no formulário. Além disso, no loop, o valor da propriedade Bookmark do terceiro registro é colocado em uma variável variante, vBookmark, para uso posterior.
A rotina volta diretamente para o terceiro registro usando a variável de indicador já armazenada. A rotina chama a sub-rotina WalkFields, que percorre a coleção Fields do Recordset e exibe detalhes sobre cada Field da coleção.
Por fim, ExamineData usa a propriedade Filter do Recordset para exibir somente os registros com uma CategoryId igual a 2. O resultado da aplicação desse filtro fica imediatamente visível na grade de exibição no formulário.
Para obter mais informações sobre a funcionalidade mostrada na sub-rotina ExamineData, confira Como examinar dados.
Em seguida, clique no terceiro botão, Editar Dados. Isso executará a sub-rotina EditData.
EditData
Quando o código entra na sub-rotina EditData, o Recordset ainda é filtrado em CategoryId igual a 2, de modo que somente os itens que atendam aos critérios de filtro fiquem visíveis. Primeiro, ele percorre o Recordset e aumenta o preço de cada item visível no Recordset em 10%. O valor do campo Price é alterado com a definição da propriedade Value desse campo como igual a um valor novo e válido.
Lembre-se de que o Recordset está desconectado da fonte de dados. As alterações feitas em EditData são feitas somente na cópia armazenada em cache dos dados. Para obter mais informações, confira Como editar dados.
As alterações não serão feitas na fonte de dados até que você clique no quarto botão, Atualizar Dados. Isso executará a sub-rotina UpdateData.
UpdateData
UpdateData primeiro remove o filtro que foi aplicado ao Recordset. O código remove e redefine m_oRecordset1
como a DataSource do Microsoft Bound DataGrid no formulário para que o Recordset não filtrado seja exibido na grade.
Em seguida, o código verifica se você pode voltar ao Recordset usando o método Supports com o argumento adMovePrevious.
A rotina passa para o primeiro registro usando o método MoveFirst e exibe os valores originais e atuais do campo usando as propriedades OriginalValue e Value do objeto Field. Essas propriedades, com a propriedade UnderlyingValue (não usada aqui), são discutidas em Como atualizar e persistir dados.
Em seguida, um novo objeto Connection é criado e usado para restabelecer uma conexão com a fonte de dados. Reconecte o Recordset à fonte de dados definindo a nova Connection como ActiveConnection para o Recordset. Para enviar as atualizações ao servidor, o código chama UpdateBatch no Recordset.
Se a atualização em lote for bem-sucedida, uma variável de sinalizador no nível do módulo, m_flgPriceUpdated
, será definida como True. Isso lembrará você posteriormente de limpar todas as alterações feitas no banco de dados.
Por fim, o código volta ao primeiro registro no Recordset e exibe os valores originais e atuais. Os valores são os mesmos após a chamada a UpdateBatch.
Para obter informações detalhadas sobre como atualizar os dados, incluindo o que fazer quando os dados no servidor são alterados enquanto o Recordset está desconectado, confira Como atualizar e persistir dados.
Form_Unload
A sub-rotina Form_Unload é importante por vários motivos. Primeiro, como esse é um aplicativo de exemplo, Form_Unload limpa as alterações feitas no banco de dados antes do encerramento do aplicativo. Em segundo lugar, o código mostra como um comando pode ser executado diretamente de um objeto Connection aberto usando o método Execute. Por fim, ele mostra um exemplo de execução de uma consulta que não retorna linhas (uma consulta UPDATE) na fonte de dados.