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