A ADO - Active Data Objects - pode retornar mais de um conjunto de registros para um único objeto Recordset. Vamos explicar melhor ...
Você pode usar uma instrução SQL com mais de um comando SELECT ao mesmo tempo separados por ponto e vírgula. Isto irá gerar mais de um conjunto de registros para o mesmo recordset. É como se os conjuntos de registros gerados ficassem em uma 'fila'. Abaixo temos um exemplo de sintaxe para usar Múltiplos conjuntos de registros:
| SQL
= "SELECT ...... ;SELECT....;SELECT..." objRS.Open SQL |
Após executar o método Open teremos uma fila com os múltiplos conjuntos de registros selecionados , cada um correspondendo ao respectivo comando SELECT . Os conjuntos de registros são retornados em ordem , assim o primeiro conjunto corresponde ao primeiro comando SELECT.
Para usar o próximo conjunto de registros da 'fila' usamos o método NextRecordset.
O método NextRecordset retorna o próximo conjunto de registros presente no objeto Recordset. Se não houver mais nenhum conjunto de registros será retornado Nothing.
A utilização de Múltiplos conjuntos de registros nos dá duas grandes vantagens :
Para poder usar esta característica da ADO precisamos ter o seguinte:
Um exemplo Prático
Vamos agora a um exemplo prático mostrando a utilização dos Múltiplos conjuntos de registros.
Vamos usar uma conexão com o Banco de dados SQL Server 2000 e acessar a tabela Pubs retornando dois conjuntos de registros para o recordset :
1- Inicie um novo projeto no Visual Basic e no formulário padrão insira os controles conforme a figura abaixo:

A idéia é acessar o banco de dados Pubs e gerar dois conjunto de registros , retornando cada um para um respectivo ListBox conforme identificado na figura.
Precisamos saber o nome do Servidor , o nome do banco de dados , o nome o usuário e da sua senha.
2-) Insira o seguinte código na seção General Declarations do formulário para declarar as variáveis usadas.
Dim usuario, senha, servidor, BancoDados As String Dim sql As String Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset |
3-) Agora no evento click do botão de comando -command1 - Conexão - inclua o código abaixo:
Private Sub Command1_Click()
usuario = txtusuario.Text
senha = txtsenha.Text
servidor = txtservidor.Text
BancoDados = txtbancobd.Text
cn.Provider = "SQLOLEDB"
cn.Properties("Data Source").Value = servidor
cn.Properties("Initial Catalog").Value = BancoDados
cn.Properties("User ID").Value = usuario
cn.Properties("Password").Value = senha
cn.Open
MsgBox " Conexao efetuada com sucesso ! "
Command2.Enabled = True
Command1.Enabled = False
End Sub
|
Este código efetua a conexão com o banco de dados Pubs no servidor MACORATI\MACORATTI usando o usuário sa.
4-) Agora para gerar os conjuntos de registros para o Recordset inclua o seguinte código no evento Click do botão de comando - command2 - Gerar Registros.
Private Sub Command2_Click()
Set rs = New ADODB.Recordset
sql = "SELECT au_fname, au_lname FROM authors;SELECT title FROM Titles"
rs.Open sql, cn
List1.Clear
Do While Not rs.EOF
List1.AddItem rs.Fields("au_lname") & ", " & rs.Fields("au_fname")
rs.MoveNext
Loop
Set rs = rs.NextRecordset
List2.Clear
Do While Not rs.EOF
List2.AddItem rs.Fields("title")
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
End Sub
|
- Usamos a instrução SQL com duas instruções SELECT
- Preenchemos o primeiro Listbox - List1 - com o primeiro conjunto de registros
- Mudamos para o segundo conjunto de registros usando o método : Set rs = rs.NextRecordset
- Preenchemos o segundo Listbox - List2 - com os dados do segundo conjunto de registros.
O resultado obtido seria algo parecido com o exibido a seguir:

Até mais ![]()
José Carlos Macoratti