Página 1 de 1

Acesso ao Oracle com MiniGui

Enviado: 26 Jan 2014 10:38
por Hasse
Bom dia colegas.

Com a ajuda dos colegas deste Fórum, estou acessando o banco do Oracle, com um aplicativos gerado em xHarbour modo janela.

Estou tentando migrar o aplicativo para a MiniGui e estou com problemas.

Em modo janela o aplicativo funciona corretamente:

Código: Selecionar todos

oConexao    := TOLEAUTO():New("ADODB.Connection") 
? Len( oConexao )                                  && resultado >>  4
oConexao:Open( c_CntStrng )
? Len( oConexao )                                  && resultado >>  4
Em modo MiniGui ocorre um erro, como explicado abaixo:

Código: Selecionar todos

oConexao    := TOLEAUTO():New("ADODB.Connection") 
? Len( oConexao )                                  && resultado >>  5
oConexao:Open( c_CntStrng )
? Len( oConexao )                                  && resultado >>  5
Observe que o objeto oConexao tem conteudo diferente em ambos. Ver resultado do Len(oConexao).
O janelado reporta comprimento 4 e a MiniGui reporta 5.

Na parte do código abaixo reporta erro nos parâmentros:

Código: Selecionar todos

      WITH Object oRecSet
         *
         :cursorType := adOpenForwardOnly
         :activeConnection( oConexao )             && aqui ocorre o erro, linha 475.
         :cursorLocation = adUseServer
         :maxRecords = 100000
         :cacheSize = 100
         :source := c_SeleStr

Lista de erros do ErrorSys:
<p class="updated">Date:01/25/14 Time: 22:23:05<BR>
Error WINOLE/1007 Erro nos parƒmetros: ACTIVECONNECTION (DOS Error -2147352562)</p><BR>
Called from TOLEAUTO:ACTIVECONNECTION(0)
<BR>
Called from BAIXA_PRESCR(475)
<BR>
Called from (b)MAIN(180)
<BR>
Called from _DOCONTROLEVENTPROCEDURE(5490)
<BR>
Called from EVENTS(1471)
<BR>
Called from _DOMESSAGELOOP(0)
<BR>
Called from _ACTIVATEWINDOW(5146)
<BR>
Called from MAIN(183)
Como pode ser corrigido este erro ?

Acesso ao Oracle com MiniGui

Enviado: 27 Jan 2014 02:28
por rochinha
Amiguinho,

Observe:

Código: Selecionar todos

     :activeConnection := oConexao

Acesso ao Oracle com MiniGui

Enviado: 27 Jan 2014 08:23
por luiz antonio da silva
Bom dia Hasse !

Uso oracle e firebird com harbour + minigui ja tem um tempinho com ADODB, veja se ajuda.

instalar o driver ODBC para oracle.


ADODB.CH

Código: Selecionar todos

*
* Adodb.CH - Arquivo de Definição de Constantes do Sistema
*
//Tipo do Cursor
#Define adOpenForwardOnly     0  //adOpenForwardOnly = 0 # permite somente que você avance aos registros posteriores,perdendo-se os anteriores
#Define adOpenKeyset          1  //adOpenKeyset      = 1 # leitura e escrita (não permite ver alterações ou exclusões feitas por outros usuários)
#Define adOpenDynamic         2  //adOpenDynamic     = 2 # leitura e escrita (permite ver alterações ou exclusões feitas por outros usuários)
#Define adOpenStatic          3  //adOpenStatic      = 3 # permite somente leitura

//Tipo de travamento de Registros - LockType
#Define adLockReadOnly        1  //adLockReadOnly        = 1 somente leitura
#Define adLockPessimistic     2  //adLockPessimistic     = 2 Impede que outras sessões alterem o registro que estiver alocado pelo usuário
#Define adLockOptimistic      3  //adLockOptimistic      = 3 Todos podem alterar o mesmo registro
#Define adLockBatchOptimistic 4  //adLockBatchOptimistic = 4  Impede que outras sessões quando estiver em modo update batch

//Localização do Cursor - CursorLocation
#Define adUseServer  2
#Define adUseClient  3

//Estados dos RecordSets
#Define adEditNone       0
#Define adEditInProgress 1
#Define adEditAdd        2
#Define adEditDelete     4

//Tipos de dados retornados pelo DB
#Define RS_Empty              0     //Padrao Dbase C
#Define RS_TinyInt           16     //Padrao Dbase N
#Define RS_SmallInt           2     //Padrao Dbase N
#Define RS_integer            3     //Padrao Dbase N
#Define RS_BigInt            20     //Padrao Dbase N
#Define RS_UnsignedTinyInt   17     //Padrao Dbase N
#Define RS_UnsignedSmallInt  18     //Padrao Dbase N
#Define RS_UnsignedInt       19     //Padrao Dbase N
#Define RS_UnsignedBigInt    21     //Padrao Dbase N
#Define RS_Single             4     //Padrao Dbase N
#Define RS_Double             5     //Padrao Dbase N
#Define RS_currency           6     //Padrao Dbase N
#Define RS_Decimal           14     //Padrao Dbase N
#Define RS_Numeric          131     //Padrao Dbase N
#Define RS_Boolean           11     //Padrao Dbase N
#Define RS_Error             10     //Padrao Dbase C
#Define RS_UserDefined      132     //Padrao Dbase C
#Define RS_Variant           12     //Padrao Dbase C
#Define RS_IDispatch          9     //Padrao Dbase C
#Define RS_IUnknown          13     //Padrao Dbase C
#Define RS_GUID              72     //Padrao Dbase C
#Define RS_Date               7     //Padrao Dbase D
#Define RS_DBDate           133     //Padrao Dbase D
#Define RS_DBTime           134     //Padrao Dbase D
#Define RS_DBTimeStamp      135     //Padrao Dbase D
#Define RS_BSTR               8     //Padrao Dbase C
#Define RS_Char             129     //Padrao Dbase C
#Define RS_VarChar          200     //Padrao Dbase C
#Define RS_LongVarChar      201     //Padrao Dbase C
#Define RS_WChar            130     //Padrao Dbase C
#Define RS_VarWChar         202     //Padrao Dbase C
#Define RS_LongVarWChar     203     //Padrao Dbase C
#Define RS_Binary           128     //Padrao Dbase C
#Define RS_VarBinary        204     //Padrao Dbase C
#Define RS_LongVarBinary    205     //Padrao Dbase C
#Define RS_Chapter          136     //Padrao Dbase C
#Define RS_FileTime          64     //Padrao Dbase C
#Define RS_DBFileTime       137     //Padrao Dbase C
#Define RS_PropVariant      138     //Padrao Dbase C
#Define RS_VarNumeric       139     //Padrao Dbase C

#xcommand DECLARE CONNECTION <w> ;
   =>;
   #xtranslate <w>.\<p:BeginTrans,RollbackTrans,CommitTrans,close,execute\> => <w>:\<p\>;;

#xcommand DECLARE RECORDSET <w> ;
   =>;
   #xtranslate <w>.\<p:MoveNext,MovePrevious,MoveFirst,MoveLast,Find,AddNew,Update,Eof,Bof,close,CancelUpdate,Delete,Requery\> => <w>:\<p\>;;
   #xtranslate <w>->\<c>\.\<p:Value,Name,type\> => <w>:Fields\[\<(c)\>]:\<p\>;;
   #xtranslate <w>.\<c\>.\<p:Value,Name,type\> => YKKRETVALUE <w> \<(c)\> \<p\> 

   #xtranslate YKKRETVALUE <a> <b> <c> => <a>:Fields\[\<b>]:<c>

#xTranslate NEW RECORDSET <a>  => <a>:=CreateObject("ADODB.Recordset")
#xTranslate NEW CONNECTION <a> => <a>:=CreateObject("ADODB.Connection")
#command CLOSE CONNECTION <a> => <a>:close()
#command CLOSE RECORDSET <a> => <a>:close()
#xtranslate OPEN CONNECTION <b> STRING <(a)> => <b>:Open(<(a)>)
#command OPEN RECORDSET <a> CONNECTION <b> CURSORTYPE <d> LOCKTYPE <e> SQL <f> => <a>:Open(<f>,<b>,<d>,<e>)
#command ERROR CONNECTION <a> =>  if(<a>:Errors:Count>0,MsgStop("Erro Nativo: "+alltrim(Str(<a>:Errors\[0\]:NativeError))+chr(13)+chr(10)+"Descrição..: "+<a>:Errors\[0\]:Description),Nil)

/********************** Com estas linhas funciona com Harbour
*********************/
#ifdef __HARBOUR__
//ANNOUNCE HB_GTSYS
ANNOUNCE HB_GTSYS
REQUEST HB_GT_GUI_DEFAULT
#xcommand TRY => BEGIN SEQUENCE WITH s_bBreak
#xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr->
#xcommand FINALLY => ALWAYS
static s_bBreak := { |oErr| break( oErr ) }
#endif
BANCO.INI

Código: Selecionar todos

[FIREBIRD]
IP=192.168.0.176
CM=C:\pesagem\DADOS
BD=BALANCA.FDB
SN=masterkey
FB=1

[ORACLE]
HOST=192.168.0.18
PORTA=1521
SID=orcl
OR=1
FB=0 // NÃO USAR FIREBIRD
OR=0 // NÃO USAR ORACLE

ORACLE.PRG

Código: Selecionar todos

#include "MINIGUI.CH"
#INCLUDE "ADODB.CH"

FUNC MAIN()
PUBLIC R_FB:=R_OR:=R_IP:=R_CM:=R_BD:=HOST_CON:=PORTA_CON:=SID_CON:=mUSER:=""
PUBLIC _PASTA:=GETSTARTUPFOLDER()
PUBLIC ARQCFG:=_PASTA+"\BANCO.INI"

SET DATE BRIT
SET CENTURY ON
SET NAVIGATION EXTENDED

if file(ARQCFG)
   BEGIN INI FILE (ARQCFG)
     GET R_IP      SECTION 'FIREBIRD'   ENTRY 'IP'
     GET R_CM      SECTION 'FIREBIRD'   ENTRY 'CM'
     GET R_BD      SECTION 'FIREBIRD'   ENTRY 'BD'
     GET R_FB      SECTION 'FIREBIRD'   ENTRY 'FB'

     GET HOST_CON  SECTION 'ORACLE'     ENTRY 'HOST'
     GET PORTA_CON SECTION 'ORACLE'     ENTRY 'PORTA'
     GET SID_CON   SECTION 'ORACLE'     ENTRY 'SID'
     GET R_OR      SECTION 'ORACLE'     ENTRY 'OR'
   END INI
else
   MSGINFO("BANCO.INI NAO ENCONTRADO")
endif

if VAL(R_OR)<>0
   // CONEXÃO COM ORACLE
   _USER   :="USUARIO"
   _SENHA  :="SENHA"  
   ** CONEXAO COM ORACLE ***************************************************************************
      CON:="S"
      server_con:="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST="
      server_con+=host_con+")(PORT="+porta_con+"))(CONNECT_DATA=("
      server_con+="SERVICE_NAME="+sid_con+")))"
      Try
       ORA:=CreateObject("ADODB.Connection")
       ORA:Open("DRIVER={Microsoft ODBC for Oracle};Server="+server_con+";UID="+_USER+";PWD="+_SENHA)
      Catch e
       Error Connect ORA
       con:="N"
      End

      IF CON="N"
         msginfo(HBA("ERRO NA CONEXÇO COM ORACLE"),"ERRO")
         close(FDB)
         close(ORA)
         QUIT
      endif
endif      
*************************************************************************************************

load window seu_form
activate window seu_form

RETU

func inicio()
	csql:="select * from sua_tabela where sua_condicao="+seu_criterio
    Try
		Ret:=ORA:Execute(csql)
    Catch e
		Error Connection ORA
		Return
    End

    if !Ret:eof()
		while !Ret:eof()
			
			Ret:movenext()
		enddo	
    endif
retu
* Mostrado somente conexão com oracle no código acima


Abraço.
Luiz

Acesso ao Oracle com MiniGui

Enviado: 27 Jan 2014 22:14
por Hasse
Boa noite colegas.

Ao colega Rochinha:
Você acertou na mosca. A gente nunca aprende o suficiente, e eternamente dependemos daqueles que sabem mais do nós.
Eu nem podia imaginar que migrando do xHarbour para a MiniGui esta sintaxe poderia mudar.
Obrigado.

Ao colega Luiz Antônio:
Origado pela tua colaboração, diga-se muito valiosa. Obrigado a você também.