Вы находитесь на странице: 1из 6

Gerando uma representao 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 no podem dizer que eu esqueci do VB5/VB6... )

Pois bem , nunca esquecerei do VB5/VB6 , e o site continuar a ter artigos sobre estas verses. A quantidade de artigos sobre o VB .NET se justifica pois h muita novidade e necessitamos tambm ficar atualizados , certo ??? tranquilos...) (por isto fiquem

Neste artigo eu vou mostrar como fcil gerar uma representao XML (o xml ser gerada em uma varivel string) para um recordset ADO. Para poder rodar este artigo voc vai precisar estar usando o VB5 ou VB6 , de preferncia com o ltimo service pack (service pack 5 para o vb6) , ou pelo menos com a verso 2.5 da ADO. Eu vou acessar a tabela Clientes do banco de dados Northwind.mdb e gerar um representao XML para esta tabela. A estrutura desta tabela a seguinte :

Com poucas linhas de cdigo podemos gerar o XML. Vamos ento criar um novo projeto Standard EXE no VB e no formulrio padro inclui os seguintes controles : uma Label , uma caixa de texto (que dever sobrepor o controle ListBox), uma combobox , dois botes de comando e um controle ListBox. Conforme Abaixo:

- O controle TextBox que sobrepe o controle ListBox deve ter sua propriedade Multiline definida como True.

Nota : Eu vou aproveitar este projeto e mostrar como voc pode usar o mtodo Find do objeto Recordset da ADO para localizar registros em uma tabela. Temos que fazer uma referncia 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 critrio e gerar uma representao XML para esta tabela. - A primeira coisa a fazer abrir o recordset . Primeiro declaramos variveis objeto e a seguir no evento Load do formulrio inserimos o cdigo 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 Eu estou usando o provedor OLE DB: Provider=Microsoft.Jet.OLEDB.3.51 E selecionando todos os registros da tabela Clientes: "Select * From Clientes"

Private Sub Form_Load()


carrega_combo 'Abre a conexo cnn.Open "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=C:\teste\Northwind.mdb;"

'Abre o Recordset rst.CursorLocation = adUseClient rst.Open "Select * From Clientes", cnn, adOpenKeyset, adLockOptimistic, adCmdText

End Sub
- Aps criar o objeto recordset estamos pronto para poder gerar a representao XML do mesmo. No evento Click do boto command2 - Gerar XML para o Recordset - vamos incluir o cdigo abaixo que faz o servio:

Private Sub Command2_Click() If Command2.Caption = "Gerar XML para o Recordset >>" Then Me.Width = 7350 Me.Height = 8895

- A representao XML gerada em uma


string chamada ArquivoXML - Ela exibida na caixa de texto Text1.Text que esta sobre o Listbox - Declaramos uma varivel do tipo Stream

Command2.Caption = "<< Gerar - Dim oStream As ADODB.Stream XML para o Recordset" - Criamos o objeto - Set oStream = Dim oStream As ADODB.Stream New ADODB.Stream Set oStream = New ADODB.Stream - e a seguir gerarmos stream a partir do
recordset :

rst.Save oStream, adPersistXML

rst.Save oStream, adPersistXML


- Finalmente lemos o XML e o atribumos a

Dim ArquivoXML As String varivel 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 >>"

ArquivoXML = oStream.ReadText
- A seguir fechamos e liberamos o objeto stream

oStream.Close Set oStream = Nothing


O resto do cdigo usado apenas para expandir o formulrio e mostrar o resultado.

End If
Executando a aplicao e a seguir clicando no boto para gerar o XML teremos a sequncia de telas :

A seguir vou falar da funcionalidade de busca usando o mtodo Find com um critrio usando a clusula Like. A busca funciona assim : Temos uma combo carregada com as letras de A a Z. O usurio escolhe uma letra na combo e clica no boto - Exibir Empresas Selecionadas >> O cdigo que realiza a busca para o critrio o seguinte : - O critrio montando de acordo com a seleo do usurio:

criterio = rst.Find criterio,

"CdigoDoCliente Like '" & Combo1.Text & "%'"


- Usamos o mtodo Find para realizar a busca na base de dados:

0, adSearchForward
- utilizamos tambm um marcador - bookmark - para guardar a ltima posio localizada O cdigo 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 = "CdigoDoCliente 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 formulrio 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 seleo e clicando no boto para buscar os registros de acordo com o critrio teremos:

Perceba que estamos realizando a busca dentro de um loop While/Wend : ' 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

Desta forma , usando um bookmark , conseguimos percorrer o recordset e selecionar todas as ocorrncias do critrio.

Вам также может понравиться