Acesso a Oracle

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Acesso a Oracle

Mensagem 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.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Acesso a Oracle

Mensagem 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.
[]´s
Alexandre Santos (AlxSts)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Acesso a Oracle

Mensagem 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 ?
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Acesso a Oracle

Mensagem 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.
[]´s
Alexandre Santos (AlxSts)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Acesso a Oracle

Mensagem 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.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Acesso a Oracle

Mensagem 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.
[]´s
Alexandre Santos (AlxSts)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Acesso a Oracle

Mensagem 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)
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Acesso a Oracle

Mensagem 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).
[]´s
Alexandre Santos (AlxSts)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Acesso a Oracle

Mensagem 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.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Acesso a Oracle

Mensagem 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
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Acesso a Oracle

Mensagem 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)
Anexos
Como criar connection string usando arquivo .UDL (Associação de Dados Microsoft).
Como criar connection string usando arquivo .UDL (Associação de Dados Microsoft).
[]´s
Alexandre Santos (AlxSts)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Acesso a Oracle

Mensagem 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.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Acesso a Oracle

Mensagem 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!
[]´s
Alexandre Santos (AlxSts)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Acesso a Oracle

Mensagem 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.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Responder