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
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.