Gerando uma representação XML para um recordset ADO.
Já que estamos falando sobre XML vou neste artigo mostrar como podemos gerar um arquivo XML para um Recordset ADO. (Assim não podem dizer que eu esqueci do VB5/VB6... )
Pois bem , nunca esquecerei do VB5/VB6 , e o site continuará a ter artigos sobre estas versões. A quantidade de artigos sobre o VB .NET se justifica pois há muita novidade e necessitamos também ficar atualizados , certo ??? (por isto fiquem tranquilos...)
Neste artigo eu vou mostrar como é fácil gerar uma representação XML (o xml será gerada em uma variável string) para um recordset ADO.
Para poder rodar este artigo você vai precisar estar usando o VB5 ou VB6 , de preferência com o último service pack (service pack 5 para o vb6) , ou pelo menos com a versão 2.5 da ADO.
Eu vou acessar a tabela Clientes do banco de dados Northwind.mdb e gerar um representação XML para esta tabela. A estrutura desta tabela é a seguinte :
Com poucas linhas de código podemos gerar o XML. Vamos então criar um novo projeto Standard EXE no VB e no formulário padrão inclui os seguintes controles : uma Label , uma caixa de texto (que deverá sobrepor o controle ListBox), uma combobox , dois botões de comando e um controle ListBox. Conforme Abaixo:
- O controle TextBox que sobrepõe o controle ListBox deve ter sua propriedade Multiline definida como True. |
Nota : Eu vou aproveitar este projeto e mostrar como você pode usar o método Find do objeto Recordset da ADO para localizar registros em uma tabela. Temos que fazer uma referência no projeto a library Microsoft Activex Data Object 2.5 (ou 2.7) ( Menu Project|References...)
O recordset deverá esta aberto ; feito isto podemos consultar a fonte de dados para exibir registros de acordo com um critério e gerar uma representação XML para esta tabela.
- A primeira coisa a fazer é abrir o recordset . Primeiro declaramos variáveis objeto e a seguir no evento Load do formulário inserimos o código que abre o banco de dados Northwind.mdb e gera um recordset ADO para a tabela Clientes:
Dim
cnn As New ADODB.Connection Dim rst As New ADODB.Recordset Dim criterio As String Private
Sub Form_Load() |
Eu
estou usando o provedor OLE DB: Provider=Microsoft.Jet.OLEDB.3.51 E selecionando todos os registros da tabela Clientes: "Select * From Clientes"
|
- Após criar o objeto recordset estamos pronto para poder gerar a representação XML do mesmo. No evento Click do botão command2 - Gerar XML para o Recordset - vamos incluir o código abaixo que faz o serviço:
Private Sub Command2_Click() If Command2.Caption = "Gerar XML para o Recordset >>" Then Me.Width = 7350 Me.Height = 8895 Command2.Caption = "<< Gerar XML para o Recordset" Dim oStream As ADODB.Stream Set oStream = New ADODB.Stream rst.Save oStream, adPersistXML Dim ArquivoXML As String ArquivoXML = oStream.ReadText oStream.Close Set oStream = Nothing Text1.Visible = True List1.Visible = False Text1.Text = ArquivoXML Else List1.Visible = True Text1.Visible = False Me.Width = 7350 Me.Height = 2085 Command2.Caption = "Gerar XML para o Recordset >>" End If |
- A representação XML
é gerada em uma string chamada ArquivoXML - Ela é exibida na caixa de texto - Text1.Text que esta sobre o Listbox - Declaramos uma variável do tipo Stream - Dim oStream As ADODB.Stream - Criamos o objeto - Set oStream = New ADODB.Stream - e a seguir gerarmos stream a partir do recordset : rst.Save oStream, adPersistXML - Finalmente lemos o XML e o atribuímos a variável string : ArquivoXML = oStream.ReadText - A seguir fechamos e liberamos o objeto stream oStream.Close O resto do código é usado apenas para expandir o formulário e mostrar o resultado. |
Executando a aplicação e a seguir clicando no botão para gerar o XML teremos a sequência de telas :
A seguir vou falar da funcionalidade de busca usando o método Find com um critério usando a cláusula Like.
A busca funciona assim : Temos uma combo carregada com as letras de A a Z. O usuário escolhe uma letra na combo e clica no botão - Exibir Empresas Selecionadas >>
O código que realiza a busca para o critério é o seguinte :
- O critério é montando de acordo com a seleção do usuário: criterio = "CódigoDoCliente Like '" & Combo1.Text & "%'"
- Usamos o método Find para realizar a busca na base de dados: rst.Find criterio, 0, adSearchForward
- utilizamos também um marcador - bookmark - para guardar a última posição localizada
O código completo é o seguinte :
Private Sub Command1_Click() If Command1.Caption = "Exibir Empresas Selecionadas >>" Then Text1.Visible = False List1.Visible = True 'move-se para o primeiro registro rst.MoveFirst 'limpa a combo List1.Clear ' define o criterio para busca criterio = "CódigoDoCliente Like '" & Combo1.Text & "%'" ' inicia busca no recordset rst.Find criterio, 0, adSearchForward ' percorre o recordset ate o seu final While Not rst.EOF List1.AddItem rst("NomeDaEmpresa") marcador = rst.Bookmark rst.Find criterio, 1, adSearchForward, marcador Wend Me.Width = 7350 Me.Height = 6345 Command1.Caption = "<< Exibir Empresas Selecionadas" Else 'contrai o formulário para o tamanho original Me.Width = 6375 Me.Height = 2085 Command1.Caption = "Exibir Empresas Selecionadas >>" End If End Sub |
Executando o projeto e , realizando um seleção e clicando no botão para buscar os registros de acordo com o critério teremos:
Perceba que
estamos realizando a busca dentro de um loop While/Wend :
' percorre
o recordset ate o seu final Desta forma , usando um bookmark , conseguimos percorrer o recordset e selecionar todas as ocorrências do critério. |
Pronto , matamos dois coelhos de uma vez ; até o próximo artigo ..
José Carlos Macoratti