Página 1 de 1

Acesso a Oracle

Enviado: 25 Nov 2013 13:14
por Hasse
Boa tarde colegas.

Preciso acessar um Banco Oracle.

Estou batendo cabeça, gente.

Usar: A)-ADO, ou B)-conexão direta com o Oracle ( é assim que se denomina ? ) ?

O ADO precisa instalar um aplicativo ?

Conexão direta com o Oracle. Na linha abaixo:

Código: Selecionar todos

nc := SR_ADDCONNECTION( CONNECT_ORACLE, "OCI=127.0.0.1;UID=SYSTEM;PWD=kl6qaxv9;TNS=XE" )
Informa a falta da função SR_ADDCONNECTION(). Onde ela se encontra ? O que está faltando ?

Peço ajuda passa a passo (para novato mesmo...)

Creio que, depois de conectado, me viro, pois terei ajuda de um especialista em Oracle.

Acesso a Oracle

Enviado: 25 Nov 2013 13:37
por alxsts
Olá!

Veja o tópico Exemplo Conexão Oracle e Executando uma SP.

Utilize o recurso de busca do fórum. Existem outros exemplos.

Acesso a Oracle

Enviado: 25 Nov 2013 14:02
por Hasse
Boa tarde alxsts.
Obrigado pelo teu retorno em tempo record.

OK. Já consegui compilar, mas falta "algo" .....

Código: Selecionar todos

....
Local oConnection := Win_OleCreateObject( "ADODB.connection" ) 
Local oRecordSet  := Win_OleCreateObject( "ADODB.recordset"  ) 
Local oCommand    := Win_OleCreateObject( "ADODB.Command"    ) 
Local oErrorCmd 
cConexao:="Provider=OraOLEDB.Oracle;Data Source=XE;User ID=system;Password=sistema;FetchSize=100;CacheType=Memory;PLSQLRSet=True;" 
....
....
oConnection:Open( cConexao ) 
O compilador informa a falta das funções
Win_OleCreateObject
Win_OleCreateObject(
Win_OleCreateObject(
Em qual arquivo temos elas ?

Acesso a Oracle

Enviado: 25 Nov 2013 16:04
por alxsts
Olá!

Está na lib HbWin. Acrescentar: -lhbwin.

O tópico Harbour+ADO+SQL Server 2008 + Automação OLE - Como fazer? pode ter algum conteúdo que te ajude.

Acesso a Oracle

Enviado: 25 Nov 2013 21:15
por Hasse
Boa noite alxsts.

Muito bom. Esta tua última mensagem resolveu o problema. Copiei o PRG da página Harbour+ADO+SQL Server 2008 + Automação OLE - Como fazer? de tua autoria.
Bastou inserir a Lib Hbwin.lib e a compilação passou sem erro.

Amanhã irei até o cliente para obter o IP e a senha para efetuar a conexão.

Você poderia me orientar sobre os conteúdos dos diversos campos desta linha ?

Código: Selecionar todos

    cConexao:="Provider=OraOLEDB.Oracle; " +;
              "Data Source=XE; " +;
              "User ID=system; " +;
              "Password=sistema; " +;
              "FetchSize=100; " +;
              "CacheType=Memory; " +;
              "PLSQLRSet=True;"
Onde insiro o IP do Servidor ?

E os outros campos, quais devo alterar e quais manter ?

Mais uma vez obrigado pela tua atenção.

Acesso a Oracle

Enviado: 26 Nov 2013 10:49
por alxsts
Olá!

Fico feliz em saber que você conseguiu avançar.

Quanto às questões
Hasse escreveu:Onde insiro o IP do Servidor ?
E os outros campos, quais devo alterar e quais manter ?

se for trabalhar com IP, o mesmo deverá ser inserido no item "Data Source=". O mais comum é criar uma fonte de dados ODBC (de sistema) para o banco de dados que vai utilizar (Oracle, no teu caso) e no Data Source colocar o nome da fonte de dados que foi criada (no exemplo, criei uma fonte de dados ODBC para Oracle eXpress Edition e dei a ela o nome de XE.

Quanto aos demais parâmetros da string de conexão, você deverá usar conforme o banco de dados que vai conectar. No site Connection Strings você encontrará exemplos para todos os bancos de dados.

Acesso a Oracle

Enviado: 26 Nov 2013 13:47
por Hasse
Boa tarde Alexandre.

A string de conexão ficou assim:

Código: Selecionar todos

cCn := "Provider=OraOLEDB.Oracle;"           +;
       "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.250)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=dbprod)));" +;
       "User ID=LABORATORIO;"                +;
       "Password=aloisklab;"                 +;
       "FetchSize=100;"                      +;
       "CacheType=Memory;"                   +;
       "PLSQLRSet=True;"
Ao rodar apresenta o erro abaixo em uma janela retangular em fundo vermelho:

Código: Selecionar todos

Error:  open -> S_OK
na linha de abertura

Código: Selecionar todos

      oConect:Open( cCn )
Não falta algum driver ?
Algum específico do Oracle ? (OraOLEDB.Oracle)

Acesso a Oracle

Enviado: 26 Nov 2013 14:58
por alxsts
Olá!

Infelizmente fica difícil ajudar à distância nesta questão.

Creio que não falte instalar nada. O erro pode ser nos parâmetros de conexão (verifique com quem os passou a você) ou pode ser nos parâmetros que você está passando para a conexão ADO (creio que você esteja usando isso), particularmente nas configurações do objeto record set.

Código: Selecionar todos

With Object oRs
31	 
32	         :cursorType := adOpenForwardOnly  //adOpenForward //adOpenDynamic adOpenStatic //
33	         :activeConnection( oCn )
34	         :cursorLocation = adUseServer
35	         :maxRecords = 100000
36	         :cacheSize = 100
37	         :source := cSql
38	 
39	         :open()
40	 
41	         :moveFirst()
42	 
43	         If ! :Eof()
44	            aRs := :GetRows
45	         Else
46	            ? "RS vazio"
47	         Endif
Qual a versão do Oracle usada? Poderia colocar o código que você está usando? (Não precisa publicar o usuário e password do banco de dados do cliente).

Acesso a Oracle

Enviado: 26 Nov 2013 15:11
por Hasse
Boa tarde Alexandre.

Segue o Código usado.

Código: Selecionar todos

**
#include "ado.ch"
#include "set.ch"
#include "hbcompat.ch"
#include "Oracle.ch"
#include "sqlora.ch"
**
PROCEDURE Main()
   *
   LOCAL oConect, oRs, oErr, aRs, cSql
   *
   Try
      *
      Set( _SET_DATEFORMAT, "dd/mm/yyyy" )
      *
      //oConect := CreateObject( "ADODB.Connection" )
      oConect := TOLEAUTO():New("ADODB.Connection")
      *
      //  Oracle XE
      cCn := "Provider=OraOLEDB.Oracle;"           +;
             "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.250)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=dbprod)));" +;
             "User ID=LABORATORIO;"                +;
             "Password=sistema;"                 +;
             "FetchSize=100;"                      +;
             "CacheType=Memory;"                   +;
             "PLSQLRSet=True;"
      *
clear
? cCn + "<<=="
? "=================================="       && Esta linha passa da execução
      *
      oConect:Open( cCn )                    && Esta NÃO passa.  Aqui dá o erro !!!!!!!!
      *

? "----------------"
? len( oConect )
? "----------------"

      *
      // oRs := CreateObject("ADODB.RecordSet")
      oRs := TOLEAUTO():New("ADODB.RecordSet")
      *
      With Object oRs
         *
         :cursorType := adOpenForwardOnly //adOpenForward //adOpenDynamic adOpenStatic //
         :activeConnection( oConect )
         :cursorLocation = adUseServer
         :maxRecords = 100000
         :cacheSize = 100
         :source := cSql
         *
         :open()
         *
         :moveFirst()
         *
         If ! :Eof()
            aRs := :GetRows
         Else
            ? "RS vazio"
         Endif
         *
         :moveFirst()
         *
         While ! :eof()
            *
            QOut( :Fields( "idOrder" ):value, "-", ;
            :Fields( "dtOrder" ):Value, "-", ;
            Transform( :Fields( "vlTotalOrder" ):Value, "@E 999,999.99" ) )
            :MoveNext()
            *
         Enddo
         *
         ? LTrim( Str( Len( aRs ) ) ), " Records"
         *
      End With
      *
*/
      *
      Catch oErr
      Alert( "Error: " + oErr:Operation + " -> " + oErr:Description )
      *
      // Finnaly
   End
   *
*   oConect:Close()
   oConect := Nil
   oRs := Nil
   *
 RETURN
Em tempo: Estamos trabalhando em conjunto com os Administradores do Banco Oracle, lado a lado, comigo.

Acesso a Oracle

Enviado: 26 Nov 2013 16:09
por Hasse
Tentei usar a função SR_AddConnection de um outro exemplo:

Código: Selecionar todos

    oConexao := SR_AddConnection(CONNECT_ORACLE, "OCI=nomeservidor;UID=nomeusu;PWD=senha;TNS=nometns")
Obtenho o erro:
Error: Unresolved external '_HB_FUN_SR_ADDCONNECTION' referenced from D:\DEV2\TESTES\T_SQL\ADO2\OBJ\ADO2.OBJ

Acesso a Oracle

Enviado: 26 Nov 2013 19:38
por alxsts
Olá!

Bem, neste seu tópico mais recente, você mudou para SQLRDD e aí não posso opinar pois desconheço o assunto. Só sei que é uma lib paga que só funciona com xHarbour (não funciona com Harbour). Tem que comprar o produto e linkar a lib SQL.Lib na tua aplicação . Tem um exemplo de código neste tópico.

Prosseguindo com a alternativa anterior (ADO), ele nem chega a conectar. Então, o problema é na conexão. Você não informa qual versão do Oracle está usando e nem se criou uma fonte de dados ODBC mas, o melhor modo de se descobrir a conexão é deixar o Windows criar uma e depois copiar. Veja se consegue ver a imagem abaixo e seguir os passos descritos.

(Edit para adicionar informações)

Acesso a Oracle

Enviado: 26 Nov 2013 21:00
por Hasse
Boa noite Alexandre.

Em relação à biblioteca SR_* en tendido, e assunto descartado.

Realmente esqueci de informar a versão do Oracle. É a 10g.

Voltando ao assunto anterior:
Realmente nos faltou efetuar o passo 2 que você muito bem explicou nesta última mensagem.
No meu NB, mesmo sem a possibilidade de conectar com o Oracle, segui estas instruções e ao final a string de conexão lá estava no editor de texto.
Se esta string ainda continuar a mesma quando o Oracle estiver presente muito. Se nãom, será necessário somente refazer o passo 2.
Amanhã pela manhã faremos o teste com esta nova string.

Mais uma vez obrigado.
Sds.

Acesso a Oracle

Enviado: 27 Nov 2013 01:08
por alxsts
Olá!

Imagino que esta versão do Oracle 10g que você vai utilizar seja uma versão completa, corporativa.

Aproveite a oportunidade e ingresse no mundo Oracle. É muito bom e rentável. Instale no teu notebook uma versão mais leve e atualizada, o Oracle 11g Express Edition, que pode ser baixado da área de downloads do site da Oracle.

Torne-se um membro da Oracle Technology Network (OTN) e acesse materiais de treinamento, fóruns e dowloads, tudo gratuitamente. No topo desta página há um menu. Selecione o item "Select a Country/Region" e escolha Brazil para traduzir a página para português.

Boa sorte!

Acesso a Oracle

Enviado: 27 Nov 2013 13:23
por Hasse
Boa tarde colega Alexandre.

EUREKA !!!!! - Banco conectado !!!!!!!!!!!!! - Viva !!!!!!!!!!!!!

Muito obrigado, Alexandre.

Os méritos são todos seus Alexandre. OK, gastamos alguns neurônios, mas sem a tua ajuda ainda estaríamos tateando no escuro.
Então essa do passo 2, cara.... mais parece uma "gambiarra" do Windows (só mais uma, entre tantas outras....).

Agora, o passo seguinte, decifrar o funcionamento das funções, objetos, navegação, etc., etc., etc..........

Tens alguma sugestão em termos de documento para consulta ?

Sds.