Como recuperar Recordsets do Oracle armazenados procedimentos usando o ADO

Traduções deste artigo Traduções deste artigo
ID do artigo: 176086 - Exibir os produtos aos quais esse artigo se aplica.
Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 321718.
Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 308072.
Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 308073.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Este artigo mostra como criar um projeto Visual Basic 5.0 e ActiveX Data Objects (ADO) ou um projeto Visual Basic 6.0 e ADO que retorna um Recordset típico de um procedimento armazenado Oracle. Este artigo se baseia nos conceitos abordados o seguinte artigo Microsoft Knowledge Base:
174679Como recuperar o conjunto de resultados típico do Oracle procedimentos armazenados
É quase idêntico ao seguinte artigo no artigo da Base de dados de Conhecimento Microsoft que abrange o tópico usando objetos de dados remoto (RDO):
174981Como recuperar o conjunto de resultados típico do Oracle procedimentos armazenados
Observação : a Microsoft recomenda que você use o Driver Microsoft ODBC para Oracle.

Mais Informações

O seguinte artigo do Knowledge Base fornece um exemplo detalhado, utilizando RDO, das todas as maneiras possíveis para retornar um conjunto de registros volta de um procedimento armazenado. O exemplo neste artigo é uma versão simplificada:
174679Como recuperar o conjunto de resultados do Oracle procedimentos armazenados
Observação : A conjuntos de registos criados pelo controlador ODBC da Microsoft para Oracle, usando procedimentos armazenado do Oracle, são somente leitura e estático. Recuperar um conjunto de registros requer que você criar um pacote Oracle.

Você pode criar o projeto de exemplo deste artigo em Visual Basic 5.0 ou 6.0 e usar o ADO para acessar e manipular Recordsets criados pelo controlador ODBC da Microsoft para Oracle versão. Você deve ter esse driver para usar a funcionalidade de conjuntos de registros-de--procedimentos armazenados discutida neste artigo Base de dados de Conhecimento:
174679Como recuperar o conjunto de resultados do Oracle procedimentos armazenados
(Atualmente, ele é o driver somente no mercado que pode retornar um conjunto de registros de um procedimento armazenado.) Se desejar obter informações adicionais sobre como usar o Visual Basic com o Oracle, consulte o seguinte artigo Base de dados de Conhecimento, que utiliza o RDO 2.0 nos seus exemplos:
167225Como acessar um banco de dados Oracle usando RDO
Observação : você deve adquirir e instalar o MDAC 2.1 ou uma pilha posterior para o exemplo neste artigo. O seguinte artigo explica como obter os componentes Oracle e MDAC:
175018Como obter e instalar o driver ODBC do Microsoft Oracle
MDAC 1.5 contém o ADO 1.5 e o Microsoft ODBC driver para Oracle versão 2.0.

O MDAC 2. x pilha, que inclui o driver 2.573, pode ser baixada do seguinte endereço:
http://msdn.microsoft.com/en-us/data/aa937729.aspx
Este artigo está dividido em duas partes. A primeira parte é um procedimento passo a passo para criar o projeto. A segunda parte é uma discussão detalhada sobre as partes interessantes do projeto.

Exemplo passo a passo

  1. Execute o seguinte script DDL no servidor Oracle:
    DROP TABLE person;
    
    CREATE TABLE person
     (ssn     NUMBER(9) PRIMARY KEY,
      fname   VARCHAR2(15),
      lname   VARCHAR2(20));
    
    INSERT INTO person VALUES(555662222,'Sam','Goodwin');
    
    INSERT INTO person VALUES(555882222,'Kent','Clark');
    
    INSERT INTO person VALUES(666223333,'Jane','Doe');
    
    COMMIT;
     / 
    					
  2. Criar o pacote seguinte no servidor Oracle:
    CREATE OR REPLACE PACKAGE packperson
      AS
        TYPE tssn is TABLE of  NUMBER(10)
        INDEX BY BINARY_INTEGER;
        TYPE tfname is TABLE of VARCHAR2(15)
        INDEX BY BINARY_INTEGER;
        TYPE tlname is TABLE of VARCHAR2(20)
        INDEX BY BINARY_INTEGER;
    
        PROCEDURE allperson
                (ssn    OUT     tssn,
                 fname  OUT     tfname,
                 lname  OUT     tlname);
        PROCEDURE oneperson
            (onessn IN      NUMBER,
             ssn    OUT     tssn,
                 fname  OUT     tfname,
                 lname  OUT     tlname);
    END packperson;
    / 
    					
  3. Criar o corpo de pacote seguinte no servidor Oracle:
    CREATE OR REPLACE PACKAGE BODY packperson
    AS
    
    PROCEDURE allperson
                (ssn    OUT     tssn,
                 fname  OUT     tfname,
                 lname  OUT     tlname)
    IS
        CURSOR person_cur IS
                SELECT ssn, fname, lname
                FROM person;
    
        percount NUMBER DEFAULT 1;
    
    BEGIN
        FOR singleperson IN person_cur
        LOOP
                ssn(percount) := singleperson.ssn;
                fname(percount) := singleperson.fname;
                lname(percount) := singleperson.lname;
                percount := percount + 1;
        END LOOP;
    END;
    
    PROCEDURE oneperson
          (onessn  IN    NUMBER,
                 ssn     OUT   tssn,
                 fname   OUT   tfname,
                 lname   OUT   tlname)
    IS
     CURSOR person_cur IS
               SELECT ssn, fname, lname
               FROM person
               WHERE ssn = onessn;
    
        percount NUMBER DEFAULT 1;
    
    BEGIN
        FOR singleperson IN person_cur
        LOOP
                ssn(percount) := singleperson.ssn;
                fname(percount) := singleperson.fname;
                lname(percount) := singleperson.lname;
                percount := percount + 1;
        END LOOP;
    END;
    END;
    / 
    					
  4. Abra um novo projeto no Visual Basic 5.0 ou 6.0 Enterprise edition. O Form1 é criado por padrão.
  5. Posicione o seguinte os controles no formulário:
    Control     Name             Text/Caption
    -----------------------------------------
    Button      cmdGetEveryone   Get Everyone
    Button      cmdGetOne        Get One
    					
  6. No menu Ferramentas, selecione o item Opções. Clique na opção "Padrão Visualizar módulo completo" e, em seguida, clique em OK. Isso permitirá que você visualize todo o código para este projeto.
  7. Cole o código seguinte na sua janela de código:
    Option Explicit
    Dim Cn As ADODB.Connection
    Dim CPw1 As ADODB.Command
    Dim CPw2 As ADODB.Command
    Dim Rs As ADODB.Recordset
    Dim Conn As String
    Dim QSQL As String
    Dim inputssn As Long
    
    Private Sub cmdGetEveryone_Click()
    
      Set Rs.Source = CPw1
    
      Rs.Open
    
      While Not Rs.EOF
          MsgBox "Person data: " & Rs(0) & ", " & Rs(1) & ", " & Rs(2)
          Rs.MoveNext
      Wend
    
      Rs.Close
    
    End Sub
    
    Private Sub cmdGetOne_Click()
    
      Set Rs.Source = CPw2
    
      inputssn = InputBox("Enter the SSN you wish to retrieve:")
    
      CPw2(0) = inputssn
    
      Rs.Open
    
      MsgBox "Person data: " & Rs(0) & ", " & Rs(1) & ", " & Rs(2)
    
      Rs.Close
    
    End Sub
    
    Private Sub Form_Load()
    
      'Replace <User ID>, <Password>, and <Server> with the
      'appropriate parameters.
      Conn = "UID=*****;PWD=*****;driver=" _
             & "{Microsoft ODBC for Oracle};SERVER=dseOracle;"
    
      Set Cn = New ADODB.Connection
      With Cn
          .ConnectionString = Conn
          .CursorLocation = adUseClient
          .Open
      End With
    
      QSQL = "{call packperson.allperson({resultset 9, ssn, fname, " _
             & "lname})}"
    
      Set CPw1 = New ADODB.Command
      With CPw1
          Set .ActiveConnection = Cn
          .CommandText = QSQL
          .CommandType = adCmdText
      End With
    
      QSQL = "{call packperson.oneperson(?,{resultset 2, ssn, fname, " _
             & "lname})}"
    
      Set CPw2 = New ADODB.Command
      With CPw2
          Set .ActiveConnection = Cn
          .CommandText = QSQL
          .CommandType = adCmdText
          .Parameters.Append .CreateParameter(, adInteger, adParamInput)
      End With
    
      Set Rs = New ADODB.Recordset
      With Rs
          .CursorType = adOpenStatic
          .LockType = adLockReadOnly
      End With
    
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
    
      Cn.Close
      Set Cn = Nothing
      Set CPw1 = Nothing
      Set CPw2 = Nothing
      Set Rs = Nothing
    
    End Sub
  8. Vá para o item de menu Project e selecione References. Selecione o "Microsoft Active Data Objects 2. x biblioteca."
  9. Execute o projeto. Quando você clica no botão "Instale todos", ele executa essa consulta:
    QSQL = "{call packperson.allperson({resultset 9, ssn, fname, "_
                   & "lname})}"
    					
Esta consulta está executando o procedimento armazenado "allperson", que está no pacote "packperson" (referenciado como "packperson.allperson"). Não existem parâmetros entrados e o procedimento está retornando três matrizes (ssn, fname e sobrenome) cada com nove ou menos registros. Conforme mencionado no seguinte artigo da Base de dados de Conhecimento:
174679Como recuperar o conjunto de resultados do Oracle procedimentos armazenados
Você deve especificar o número máximo de linhas que você irá retornar. Consulte o Driver Microsoft ODBC para Oracle ajuda de arquivos e base de dados de Conhecimento artigo Q174679 para obter mais informações sobre esse problema.

Quando você clicar na "obter um," botão, ele exibe uma caixa de entrada que solicita um SSN. Depois de inserir um SSN válido e clique em OK, esta consulta é executada:
QSQL = "{call packperson.oneperson(?,{resultset 2, ssn, fname, "_
           & "lname})}"
				
o procedimento armazenado, packperson.oneperson, utiliza um único parâmetro de entrada como critério de seleção para o Recordset ele cria. Assim como packperson.allperson, o Recordset é construído usando os tipos de tabela definidos em packperson. (Consulte o artigo Q174679 do Knowledge Base para obter mais informações.)

Observação : você só pode definir parâmetros de entrada para procedimentos armazenados Oracle que retorno um Recordset. Não é possível definir parâmetros de saída para esses procedimentos armazenados.

Esses dois rosto procedimentos armazenados o básico usa procedimentos armazenados que retornam conjuntos de registros. Primeiro você terá um conjunto predefinido de registros (ou seja, todos) e um segundo dará a você um conjunto de registros (ou apenas um registro) com base em um ou mais parâmetros de entrada. Depois de ter esses conjuntos de registros, você pode fazer inserções, atualizações e exclusões através de procedimentos armazenados ou SQL que você cria no cliente.

Referências

Driver Microsoft ODBC para Oracle arquivo de Ajuda

"Oracle PL/SQL Programming" por Steven Feuerstein

"Hitchhiker ' s Guide para o Visual Basic & SQL Server" por William Vaughn

Para obter informações adicionais, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
174679Como recuperar o conjunto de resultados do Oracle procedimentos armazenados
175018Como obter e instalar o driver ODBC do Microsoft Oracle
174981Como recuperar o conjunto de resultados típico do Oracle procedimentos armazenados
167225Como acessar um banco de dados Oracle usando RDO

Propriedades

ID do artigo: 176086 - Última revisão: segunda-feira, 14 de março de 2005 - Revisão: 8.5
A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Open Database Connectivity 2.0
  • Microsoft Open Database Connectivity 2.0
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.0
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Data Access Components 2.0
  • Microsoft Data Access Components 2.1 Service Pack 2
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
  • Microsoft Data Access Components 2.7
Palavras-chave: 
kbmt kbdatabase kbdriver kbhowto kboracle KB176086 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 176086

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com