Artigo: 167225 - Última revisão: quarta-feira, 2 de Março de 2005 - Revisão: 1.3

Como aceder a uma base de dados Oracle utilizando RDO

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Reduzir tudo

Sumário

Com o Visual Basic 5.0 e superior Enterprise edition, tem a capacidade de ligar a uma base de dados Oracle através de uma ligação de DSN menor, executar um procedimento armazenado utilizando os parâmetros e obter valores de retorno desse procedimento armazenado. O exemplo neste artigo mostra todos os esta funcionalidade.

Mais Informação

O exemplo neste artigo é um projecto do Visual Basic simples que cria uma ligação de DSN menor numa base de dados Oracle e executa um procedimento armazenado. Quando trabalhar com Oracle e o controlador ODBC da Microsoft para Oracle, existem algumas definições que são diferentes de trabalhar com o Microsoft SQL Server. Estas diferenças ocorrem porque está a utilizar um controlador ODBC diferente.

A edição Enterprise do Visual Basic 5.0 e versões posterior incluem RDO 2.0 e o controlador ODBC da Microsoft para Oracle. Ambos têm de ser instaladas para executar o projecto de exemplo neste artigo.

Nota : O ODBC controlador da Oracle não suporta o RDO 2.0 funcionalidade conjunto (incluindo de chamada de procedimentos armazenados e valores de retorno de ligação).

O exemplo seguinte foi criado numa base de dados Oracle 7.3 através de um SQL * NET 2.3 ligação. Todo o código seguinte (incluindo o procedimento armazenado) deverão funcionar correctamente com 7.2 da Oracle. Mas, o controlador de ODBC da Microsoft para Oracle ajuda ficheiro indica que só suporta SQL * NET 2.3

Existem dois objectos que necessitam de ser criados numa base de dados Oracle; uma tabela (rdooracle) e um procedimento armazenado (rdoinsert). Seguem-se os scripts de idioma (DDL) de definição de dados para criar estes objectos:
  • RDOORACLE: Isto é apenas uma tabela de duas colunas com a primeira coluna definida como a chave primária:
          CREATE TABLE rdooracle (
                    item_number    NUMBER(3) PRIMARY KEY,
                    depot_number   NUMBER(3));
    					
  • RDOINSERT: Este procedimento aceita um parâmetro de entrada numérico único e devolve um resultado numérico único parâmetro. Em seguida o parâmetro de entrada é utilizado por uma instrução entrada pela primeira vez, é dividido por 2 e predefinir o parâmetro de saída:
          CREATE OR REPLACE PROCEDURE rdoinsert
             (insnum IN NUMBER, outnum OUT NUMBER)
          IS
          BEGIN
          INSERT INTO rdooracle
             (Item_Number, Depot_Number)
          VALUES
             (insnum, 16);
          outnum := insnum/2;
          END;
    					
Nota : tem de utilizar procedimentos tem parâmetros de saída e funções não quando trabalhar com Oracle e RDO parâmetros de marcador de posição.

Os scripts acima podem ser executados a partir do SQL * mais ou de dentro de Visual da base de dados ferramentas Add-in na edição do Visual Basic 5.0 Enterprise. Uma vez criados estes objectos, é possível criar o projecto de Visual Basic que irá utilizá-los.

Exemplo passo a passo

Este projecto de exemplo utiliza um formulário simples para enviar que um parâmetro de ligação para o RDOINSERT procedimento armazenado e, em seguida, devolver o parâmetro de saída a partir desse procedimento. Eis os passos para criar o projecto:
  1. Abra um projecto novo no Visual Basic 5.0 Enterprise edition. É criado o Form1 por predefinição.
  2. Coloque os seguintes controlos no formulário:
          Control     Name     Text/Caption
          ---------------------------------
          Button      cmdCheck  Check
          Button      cmdSend   Send
          Text Box    txtInput
          Label       lblInput  Input:
    					
  3. No menu Ferramentas , seleccione o item Opções . Clique na opção Ver módulo completo predefinido e, em seguida, clique em OK . Isto permitirá visualizar todo o código para este projecto.
  4. Cole o código seguinte na janela de código:
          Option Explicit
          Dim Cn As rdoConnection
          Dim En As rdoEnvironment
          Dim CPw As rdoQuery
          Dim Rs As rdoResultset
          Dim Conn As String
          Dim QSQL As String
          Dim Response As String
          Dim Prompt As String
    
          Private Sub cmdCheck_Click()
    
              QSQL = "Select Item_Number, Depot_Number From rdooracle Where " _
              & "item_number =" & txtInput.Text
              Set Rs = Cn.OpenResultset(QSQL, rdOpenStatic, , rdExecDirect)
    
              Prompt = "Item_Number = " & Rs(0) & ".  Depot_Number = " _
              & Rs(1) & "."
    
              Response = MsgBox(Prompt, , "Query Results")
    
              Rs.Close
    
          End Sub
    
          Private Sub cmdSend_Click()
    
              CPw(0) = Val(txtInput.Text)
              CPw.Execute
    
              Prompt = "Return value from stored procedure is " & CPw(1) & "."
              Response = MsgBox(Prompt, , "Stored Procedure Result")
    
          End Sub
    
          Private Sub Form_Load()
    
              Conn = "UID=;PWD=;driver={Microsoft ODBC Driver for Oracle};" _
                   & "CONNECTSTRING=MyOracle;"
    
              Set En = rdoEnvironments(0)
              Set Cn = En.OpenConnection("", rdDriverPrompt, False, Conn)
              QSQL = "{call rdoinsert(?,?)}"
              Set CPw = Cn.CreateQuery("", QSQL)
    
          End Sub
    
          Private Sub Form_Unload(Cancel As Integer)
    
              En.Close
    
          End Sub
    
    					
  5. Execute o projecto.
Quando introduz um número na caixa de texto, txtInput e clique no botão "Enviar", o procedimento armazenado Oracle, RDOINSERT, é chamado. O número que introduziu no texto caixa é utilizada como o parâmetro de entrada para o procedimento. O parâmetro de saída é utilizado numa caixa de mensagem que é chamada depois do procedimento armazenado concluiu o processamento. Com o valor original permanece na caixa de texto, clique no botão "Verificar a". Isto cria uma simples resultset só de leitura é apresentado na outra caixa de mensagem.

Segue-se uma explicação detalhada do código utilizado neste projecto demonstração:

O evento Form_Load contém o código que cria a ligação de DSN menor. É também contém o código que cria a consulta que chame o procedimento armazenado:
    Private Sub Form_Load()

       Conn = "UID=;PWD=;driver={Microsoft ODBC Driver for Oracle};" _
            & "CONNECTSTRING=MyOracle;"

       Set En = rdoEnvironments(0)
       Set Cn = En.OpenConnection("", rdDriverPrompt, False, Conn)
       QSQL = "{call rdoinsert(?,?)}"
       Set CPw = Cn.CreateQuery("", QSQL)

   End Sub
				
Nota: Se não está a utilizar o objecto rdPreparedStatement. Este objecto foi substituído pelo objecto rdoQuery. Isto é novo no RDO 2.0. Além disso, com o RDO 2.0, não é necessário criar explicitamente um objecto de ligação, tal como é feito neste projecto. Pode criar um objecto de consulta autónomo que não está especificamente associado uma ligação. Para obter mais informações sobre esta funcionalidade, consulte rdoQuery objecto no ficheiro de ajuda do Visual Basic 5.0 Enterprise edition.

A cadeia de ligação utilizada para abrir uma ligação a uma base de dados Oracle (ou uma base de dados) está muito dependente o controlador ODBC subjacente. Apesar de semelhantes parâmetros são utilizados pela maior parte dos controladores ODBC (UID, PWD, etc.), a cadeia de ligação utilizada aqui irá funcionar apenas com o controlador ODBC da Microsoft para Oracle:
Conn = "UID=;PWD=;driver={Microsoft ODBC Driver for Oracle};" _
            & "CONNECTSTRING=MyOracle;"
				
a parte mais importante desta cadeia de ligação é a palavra-chave "CONNECTSTRING". É utilizada apenas pelo controlador ODBC da Microsoft para Oracle. Para Microsoft SQL Server 6.5, é utilizar a palavra-chave "Servidor". A cadeia atribuída a CONNECTSTRING é o alias de base de dados que definiu no SQL * NET. Esta é a única diferença na cadeia de ligação quando a ligação a uma base de dados Oracle. Todos os outros parâmetros de funcionam como descrito no ficheiro Ajuda (em rdoConnection Object) do Visual Basic 5.0 Enterprise Edition. Conforme indicado no ficheiro de ajuda, para uma ligação, não especifique um DSN na cadeia de ligação.

Também in a Form_Load evento é o código que cria o objecto de consulta que chame o procedimento armazenado:
   QSQL = "{call rdoinsert(?,?)}"
   Set CPw = Cn.CreateQuery("", QSQL)
				
não com Oracle, pode especificar um valor devolvido por uma chamada de procedimento armazenado como faria com o Microsoft SQL Server 6.5; tem de utilizar procedimentos armazenados que têm de saída parâmetros tal como indicado neste artigo. Os marcadores de parâmetro posição na cadeia de QSQL são indicadas por um "?" e referenciadas pela ordem em que em que aparecem na cadeia. Para mais informações sobre a utilização do parâmetro marcadores de posição no objecto rdoQuery, consulte o objecto rdoParameter no ficheiro de ajuda do Visual Basic 5.0 Enterprise edition.

O restante do projecto está bastante rectas reencaminhamento e well-documented no ficheiro de ajuda online e Books Online, sendo que ambos vêm com o Visual Basic 5.0. Os problemas RDO fundamentais para trabalhar com Oracle, a cadeia de ligação e de chamada de procedimentos armazenados tem sido detalhados neste projecto. Para mais informações sobre estas questões, consulte o Oracle SQL * NET 2.3 documentação, o ficheiro de ajuda para o controlador de ODBC da Microsoft para Oracle e a documentação do servidor Oracle 7.

Referências

Ficheiros de ajuda do Visual Basic 5.0 Enterprise Edition

Oracle SQL * NET 2.3 ajuda ficheiro

Guia do Hitchhiker para Visual Basic e do SQL Server - quarto Edition.

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
Palavras-chave: 
kbmt kbhowto kboracle KB167225 KbMtpt
Tradução automáticaTraduçã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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 167225  (http://support.microsoft.com/kb/167225/en-us/ )