Você está offline; aguardando reconexão

INFO: Visual Basic acessando um banco de dados Oracle usando ADO

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: 176936
Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 308071.
Sumário
Com o Visual Basic e o ADO, você tem a capacidade de se conectar a um banco de dados Oracle através de uma conexão DSN menor, executar um procedimento armazenado usando parâmetros e obter valores de retorno do procedimento armazenado. O exemplo neste artigo ilustra toda essa funcionalidade.
Mais Informações
Para executar o código de exemplo neste artigo, talvez seja necessário baixar e instalar o Microsoft Data Access Components se você estiver usando o Visual Basic 5.0. Os componentes MDAC estão localizados em: http://msdn.microsoft.com/en-us/data/aa937729.aspx o seguinte exemplo foi criado em um banco de dados Oracle 7.3 através de um SQL * NET 2.3 conexão. Todo o código seguinte (incluindo o procedimento armazenado) deve funcionar bem com Oracle 7.2. No entanto, o Driver Microsoft ODBC para Oracle ajuda arquivo indica que ele oferece suporte apenas a SQL * NET 2.3.

Há dois objetos que precisam ser criados no banco de dados Oracle; uma tabela (adooracle) e um procedimento armazenado (adoinsert).

Observação : se você tiver trabalhado com o seguinte artigo, você pode usar os objetos Oracle criados no artigo (rdooracle e rdoinsert). Apenas altere adequadamente o código de Visual Basic abaixo:

167225COMO: Acessar um banco de dados Oracle usando RDO
Aqui estão os scripts DDL (linguagem) de definição de dados para criar esses objetos:

ADOORACLE - é apenas uma tabela de duas colunas com a primeira coluna definido como chave primária:

      CREATE TABLE adooracle (            item_number    NUMBER(3) PRIMARY KEY,            depot_number   NUMBER(3));				


ADOINSERT - esse procedimento aceita um único parâmetro de entrada numérico e retorna um parâmetro de saída numérico simples. O parâmetro de entrada é usado por uma instrução de entrada pela primeira vez, ela é dividida por 2 e definida como o parâmetro de saída:

      CREATE OR REPLACE PROCEDURE adoinsert (            insnum IN NUMBER, outnum OUT NUMBER)      IS      BEGIN        INSERT INTO adooracle          (Item_Number, Depot_Number)        VALUES          (insnum, 16);        outnum := insnum/2;      END;      / 				

No SQL 3.3, use uma foward barra (/) para terminar e execute o script declarar o procedimento armazenado.

Observação : você deve usar funções não e procedimentos que tenham parâmetros de saída ao trabalhar com parâmetros Oracle e ADO.

Os scripts anteriores podem ser executados do SQL * Plus. Uma vez que esses objetos foram criados, você pode criar o projeto de Visual Basic irá usá-los.

Este projeto de exemplo usa um formulário simples para enviar que um parâmetro de ligação para o ADOINSERT procedimento armazenado e, em seguida, retornar o parâmetro de saída desse procedimento. Aqui estão as etapas para criar o projeto:

  1. Abra um novo projeto no Visual Basic e adicione uma referência à biblioteca Microsoft ActiveX Data Objects.
  2. Posicione o seguinte os controles no formulário:
       Control      Name      Text/Caption   Button      cmdCheck    Check   Button      cmdSend     Send   Text Box    txtInput   Label       lblInput    Input:						
  3. No menu Ferramentas, escolha ' Opções ', clique na opção "Padrão Visualizar módulo completo" e, em seguida, clique em OK. Isso permite que você exibir todos os o código para este projeto.
  4. 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    Private Sub cmdCheck_Click()      CPw1(0) = Val(txtInput.Text)      Set Rs = CPw1.Execute      MsgBox "Item_Number = " & Rs(0) & ".  Depot_Number = " & Rs(1) & "."      Rs.Close    End Sub    Private Sub cmdSend_Click()       CPw2(0) = Val(txtInput.Text)       CPw2.Execute       MsgBox "Return value from stored procedure is " & CPw2(1) & "."    End Sub    Private Sub Form_Load()       'You will need to replace the "*" with the appropriate values.       Conn = "UID=*****;PWD=****;DRIVER={Microsoft ODBC for Oracle};" _            & "SERVER=*****;"       Set Cn = New ADODB.Connection       With Cn         .ConnectionString = Conn         .CursorLocation = adUseClient         .Open       End With       QSQL = "Select Item_Number, Depot_Number From adooracle Where " _       & "item_number = ?"       Set CPw1 = New ADODB.Command       With CPw1         .ActiveConnection = Cn         .CommandText = QSQL         .CommandType = adCmdText         .Parameters.Append .CreateParameter(, adInteger, adParamInput)       End With       QSQL = "adoinsert"       Set CPw2 = New ADODB.Command       With CPw2         .ActiveConnection = Cn         .CommandText = QSQL         .CommandType = adCmdStoredProc         .Parameters.Append .CreateParameter(, adInteger, adParamInput)         .Parameters.Append .CreateParameter(, adDouble, adParamOutput)       End With    End Sub    Private Sub Form_Unload(Cancel As Integer)       Cn.Close       Set Cn = Nothing       Set CPw1 = Nothing       Set CPw2 = Nothing    End Sub					
  5. Execute o projeto.
Quando você insere um número na caixa de texto, txtInput e clique no botão Enviar , o procedimento armazenado Oracle, ADOINSERT, é chamado. O número inserido no texto da caixa é usada como o parâmetro de entrada para o procedimento. O parâmetro de saída é usado em uma caixa de mensagem que é chamada após o procedimento armazenado concluiu o processamento. Com seu valor original ainda na caixa de texto, clique no botão "Verificação". Isso cria um simples resultset somente leitura é exibido em outra caixa de mensagem.

O que se segue é uma explicação detalhada do código usada no projeto demonstração.

O evento Form_Load contém o código que cria a conexão DSN menor:
Conn = "UID=<uid>;PWD=<pwd>;DRIVER={Microsoft ODBC for Oracle};" _           & "SERVER=<MyServer>;"   Set Cn = New ADODB.Connection   With Cn       .ConnectionString = Conn       .CursorLocation = adUseClient       .Open   End With				
depois que você criar o objeto de conexão ADO (CN), você definir vários de seus parâmetros usando a instrução WITH.

A seqüência de conexão que é usada para abrir uma conexão com um banco de dados Oracle (ou qualquer banco de dados para essa questão) é muito dependente do driver ODBC subjacente. Você pode ver na seqüência de caracteres de conexão abaixo que o driver de Microsoft Oracle que você está usando é chamado especificamente por DRIVER =:
Conn = "UID=<uid>;PWD=<pwd>;DRIVER={Microsoft ODBC for Oracle};" _           & "SERVER==<MyServer>;"				
a parte mais importante dessa seqüência de conexão é a palavra-chave "SERVER". A seqüência atribuída ao servidor é o alias de banco de dados que você configura no SQL * NET. Essa é a única diferença na seqüência de caracteres de conexão ao se conectar a um banco de dados Oracle. Para uma conexão DSN menor, conforme indicado no arquivo de Ajuda, você não especificar um DSN na seqüência de caracteres de conexão.

Também no Form_Load evento é o código que cria os dois objetos Command do ADO usados no projeto:
QSQL = "Select Item_Number, Depot_Number From adooracle Where " _   & "item_number = ?"   Set CPw1 = New ADODB.Command   With CPw1       .ActiveConnection = Cn       .CommandText = QSQL       .CommandType = adCmdText       .Parameters.Append .CreateParameter(, adInteger, adParamInput)   End With   QSQL = "adoinsert"   Set CPw2 = New ADODB.Command   With CPw2       .ActiveConnection = Cn       .CommandText = QSQL       .CommandType = adCmdStoredProc       .Parameters.Append .CreateParameter(, adInteger, adParamInput)       .Parameters.Append .CreateParameter(, adDouble, adParamOutput)   End With				
o primeiro objeto de comando (CPw1) é uma simples consulta parametrizada. O CommandText tem um parâmetro que é o item_number para onde cláusula. Observe que o CommandType se está definido como adCmdText. Isso é diferente de adCmdStoredProc CommandType no segundo objeto de comando (CPw2). Este é do arquivo HTML de Ajuda do ADO:
"Use a propriedade CommandType para otimizar a avaliação da propriedade CommandText. Se o valor da propriedade CommandType for igual a adCmdUnknown (o valor padrão), você pode enfrentar desempenho quedo porque ADO deve fazer chamadas para o provedor para determinar se a propriedade CommandText é uma instrução SQL, um procedimento armazenado ou um nome de tabela. Se você souber que tipo de comando você está usando, definindo o CommandType propriedade instrui o ADO para ir diretamente para o código relevante. Se a propriedade CommandType não coincidir com o tipo de comando na propriedade CommandText, ocorrerá um erro quando você chama o método Execute."
Usando o comando com, você pode criar e acrescentar parâmetros facilmente o objeto de comando. O primeiro parâmetro da função CreateParameter é o nome do parâmetro. Isso foi deixado em branco porque o programa de exemplo usa o índice da coleção de parâmetros para identificar os parâmetros individuais (como CPw1(0) para identificar o primeiro parâmetro). O programa de exemplo usa adInteger e adDouble tipos de dados. Se ele tivesse usado o tipo de dados um comprimento variável, o parâmetro de função CreateParameter tamanho precisará ser definido. Novamente, de ADO Ajuda em HTML:
"Se você especificar um tipo de dados de comprimento variável no argumento Tipo de, você deve passar um argumento de tamanho ou defina a propriedade tamanho do objeto Parameter antes de acrescentá-lo à coleção Parameters; caso contrário, ocorrerá um erro."
O restante do projeto é bastante simples e bem documentadas no arquivo de Ajuda Online e livros online que vêm com o Visual Basic. Os problemas de ADO que são críticos para trabalhar com Oracle (a seqüência de conexão e a chamada de procedimentos armazenados) tem sido detalhados neste projeto.
Referências
Para obter mais informações sobre essas questões, consulte o Oracle SQL * NET 2.3 documentação, o arquivo de Ajuda para o Driver Microsoft ODBC para Oracle, o HTML ADO que vem com o MDAC, manuais online que vem com Visual Basic 6.0 ou a documentação do servidor Oracle 7.

Driver Microsoft ODBC para Oracle arquivo de Ajuda

ADO ajuda HTML

"Oracle PL/SQL Programming" por Steven Feuerstein

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

Para obter informações adicionais, leia os seguintes artigos na Base de dados de Conhecimento da Microsoft:
174679COMO: Recuperar conjunto de resultados do Oracle procedimentos armazenados

175018COMO: Obter e instalar o driver ODBC do Microsoft Oracle

174981COMO: Recuperar conjunto de típicos resultados do Oracle procedimentos armazenados

167225COMO: Acessar um banco de dados Oracle usando RDO

176086COMO: Recuperar Recordsets do Oracle armazenados procedimentos usando o ADO
ado de procedimentos armazenado do Oracle

Warning: This article has been translated automatically

Propriedades

ID do Artigo: 176936 - Última Revisão: 03/02/2005 18:05:27 - Revisão: 4.4

Microsoft Visual Basic 5.0 Enterprise Edition, Microsoft Visual Basic Enterprise Edition for Windows 6.0, Microsoft ActiveX Data Objects 1.5, Microsoft ActiveX Data Objects 2.0, Microsoft ActiveX Data Objects 2.1 Service Pack 2, Microsoft ActiveX Data Objects 2.5, Microsoft ActiveX Data Objects 2.6, Microsoft ActiveX Data Objects 2.7

  • kbmt kbdatabase kbinfo kboracle kbstoredproc KB176936 KbMtpt
Comentários