Estou usando sem problemas.
Código: Selecionar todos
#include "adordd.ch"
FUNCTION MAIN
PRIVATE lConexaoOk:=.T.
ConexaoOracle(@lConexaoOk)
TRY
RegistroBanco(TABELA->(DbStruct()),"U") //U=UPDATE, I=INCLUDE
CATCH oErr
TONE(800,4)
TONE(800,4)
Pare(oErr:Operation + " ERRO DE CONEXÃO AO BANCO")
END
RETURN Nil
FUNCTION ConexaoOracle(lConexaoOk)
LOCAL oErr
PUBLIC oConnection, oRecordSet, oCommand
cApp :="A_026"
cBancoOracle :='DS01'
cEsquemaOracle :=cApp
cSenhaUsuarioOracle:=cApp
cOwner :='ENF'
cConexao:="Provider=OraOLEDB.Oracle;Data Source="+Trim(cBancoOracle)+";User ID="+Trim(cEsquemaOracle)+";Password="+Trim(cSenhaUsuarioOracle)+";FetchSize=200;CacheType=Memory;PLSQLRSet=True;TNS=DS01;OWNER="+cOwner
#ifdef HOMOLOG
nPos :=AScan( aConexao, { |reg| reg[1] == cApp } )
cBancoOracle :='H01'
cEsquemaOracle :=cApp
cSenhaUsuarioOracle:=aConexao[nPos,2]
cConexao:="Provider=OraOLEDB.Oracle;Data Source="+Trim(cBancoOracle)+";User ID="+Trim(cEsquemaOracle)+";Password="+Trim(cSenhaUsuarioOracle)+";FetchSize=200;CacheType=Memory;PLSQLRSet=True;TNS=H01;OWNER="+cOwner
#endif
#ifdef PROD
nPos :=AScan( aConexao, { |reg| reg[1] == cApp } )
cBancoOracle :='P01'
cEsquemaOracle :=cApp
cSenhaUsuarioOracle:=aConexao[nPos,2]
cConexao:="Provider=OraOLEDB.Oracle;Data Source="+Trim(cBancoOracle)+";User ID="+Trim(cEsquemaOracle)+";Password="+Trim(cSenhaUsuarioOracle)+";FetchSize=200;CacheType=Memory;PLSQLRSet=True;TNS=P01;OWNER="+cOwner
#endif
DO WHILE .T.
TRY
oConnection:=Nil
CriaObjetoConnection(@oConnection)
oConnection:Open(cConexao)
IniciaRecordSet()
lConexaoOk:=.T.
CATCH oErr
TONE(800,4)
TONE(800,4)
Pare(oErr:Operation + " ERRO DE CONEXÃO AO BANCO")
lConexaoOk:=.F.
END
EXIT
ENDDO
RETURN lConexaoOk
FUNCTION IniciaRecordSet
oRecordSet:=Nil
CriaObjetoRecordSet(@oRecordSet)
oRecordSet:CursorType := adOpenDynamic
oRecordSet:ActiveConnection:=oConnection
oCommand:=IniciaCommand()
RETURN Nil
FUNCTION QueryConsulta(cQuery)
LOCAL cOperacao:="", aConsulta:={}
oConnection:Execute( cQuery )
oRecordSet:Source:=cQuery
oRecordSet:Open()
IF !oRecordSet:Eof
aConsulta:=oRecordSet:GetRows()
oRecordSet:MoveFirst()
ENDIF
cOperacao:=IF(oRecordSet:Eof,"I","U")
RETURN cOperacao
FUNCTION CriaObjetoConnection(oObjeto)
LOCAL oObjetoConnection:=Win_OleCreateObject( "ADODB.connection" )
IF oObjeto!=Nil
oObjeto:=Nil
ENDIF
oObjeto:=oObjetoConnection
RETURN oObjetoConnection
FUNCTION CriaObjetoCommand(oObjeto)
LOCAL oObjetoCommand:=Win_OleCreateObject( "ADODB.Command" )
IF oObjeto!=Nil
oObjeto:=Nil
ENDIF
oObjeto:=oObjetoCommand
RETURN oObjetoCommand
FUNCTION CriaObjetoRecordSet(oObjeto)
LOCAL oObjetoRecordSet:=Win_OleCreateObject( "ADODB.recordset" )
IF oObjeto!=Nil
oObjeto:=Nil
ENDIF
oObjeto:=oObjetoRecordSet
RETURN oObjetoRecordSet
FUNCTION IniciaCommand
oCommand:=Nil
oCommand:=CriaObjetoCommand(@oCommand)
oCommand:ActiveConnection:=oConnection
oCommand:CommandType:= adCmdText
RETURN oCommand
FUNCTION Transforme(xVar)
LOCAL dData
IF ValType(xVar) = 'C'
xVar:="'"+xVar+"'"
ENDIF
IF ValType(xVar) = 'N'
xVar:=AllTrim(Str(xVar))
ENDIF
IF ValType(xVar) = 'D'
IF Empty(xVar)
xVar:="NULL"
ELSE
dData:=DTOC(xVar)
xVar:="TO_DATE("+Transforme(dData)+","+"'DD/MM/YYYY')"
ENDIF
ENDIF
IF ValType(xVar) = 'L'
xVar:=IF(xVar,'T','F')
ENDIF
RETURN xVar
FUNCTION RegistroBanco(aTheDBF,cOperacao)
LOCAL cResult:=""
DO CASE
CASE cOperacao = "U"
cResult:=QueryConsulta("SELECT ROWID,INSCIPTU FROM ENF.BENF3106_FUSION WHERE INSCIPTU = "+Transforme(BENF3106->INSCIPTU)+ " ORDER BY INSCIPTU" )
IF cResult = "I"
RegistroBanco(aTheDBF,cResult)
RETURN Nil
ENDIF
cRowID:=oRecordSet:Fields( 0 ):value
oRecordSet:Close()
cSet:=''
FOR X:=2 TO Len(aTheDBF)
cNomeCampo:=Upper(aTheDBF[X,1])
cTheValue := &(aTheDBF[X,1] )
IF ValType(cTheValue) = 'D'
IF Empty(cTheValue)
cTheValue:="NULL"
ELSE
dData:=DTOC(cTheValue)
cTheValue:="TO_DATE("+Transforme(dData)+","+"'DD/MM/YYYY')"
ENDIF
ENDIF
IF ValType(cTheValue) = 'L'
cTheValue:=IF(cTheValue,'T','F')
ENDIF
cSet+=cNomeCampo+'='+Transforme(cTheValue)+IF(X < Len(aTheDBF),',','')
NEXT
cTheQuery:="UPDATE ENF.BENF3106_FUSION SET "+ cSet +" WHERE INSCIPTU = "+Transforme(nInscIPTU)
oConnection:BeginTrans()
oConnection:Execute( cTheQuery )
oConnection:CommitTrans()
HWG_DOEVENTS()
CASE cOperacao = "I"
cQueryLeft := "INSERT INTO ENF.BENF3106_FUSION ("
nEspaco:=Len(cQueryLeft)
FOR X:=1 TO Len(aTheDBF)
cNomeCampo:=Upper(aTheDBF[X,1])
IF AllTrim(cNomeCampo) == "DESC"
cNomeCampo:='"'+'DESC'+'"'
ENDIF
IF AllTrim(cNomeCampo) == "DATA"
cNomeCampo:='"'+'DATA'+'"'
ENDIF
cQueryLeft += IF(X > 1,Space(nEspaco),"")+PADR(cNomeCampo + IF(X < Len(aTheDBF),", ",""),12) + HB_EOL()
NEXT
cQueryLeft+=" ) VALUES ("
nEspaco:=Len(cQueryLeft)-RAT( " ) VALUES (", cQueryLeft )+33
cValorInsert:=""
cTheQuery := cQueryLeft
cValor:=""
FOR X:=1 TO Len(aTheDBF)
cNomeCampo:=Upper(aTheDBF[X,1])
IF AllTrim(cNomeCampo) == "DESC"
cNomeCampo:='"'+DESCR+'"'
ENDIF
IF AllTrim(cNomeCampo) == "DATA"
cNomeCampo:='"'+'DATA'+'"'
ENDIF
cTheValue:=&(aTheDBF[X,1] )
IF aTheDBF[X,2] $ "NDCM"
IF Empty(cTheValue)
cTheValue:=Nil
ENDIF
ENDIF
DO CASE
CASE aTheDBF[X,2] = "C"
IF cTheValue <> NIL
cTheValue:=RTRIM(cTheValue)
ENDIF
ENDCASE
cEspaco:=IF(X > 1,Space(nEspaco),"")
DO CASE
CASE aTheDBF[X,2] = "N"
cTheQuery += "?" + IF(X < Len(aTheDBF),", ","")
Param0 := oCommand:CreateParameter(cNomeCampo, adNumeric, adParamInput,aTheDBF[X,3],cTheValue)
oCommand:Parameters:Append( Param0)
CASE aTheDBF[X,2] = "D"
cTheQuery += "?" + IF(X < Len(aTheDBF),", ","")
Param0 := oCommand:CreateParameter(cNomeCampo, adDate, adParamInput,aTheDBF[X,3],cTheValue)
oCommand:Parameters:Append( Param0)
CASE aTheDBF[X,2] = "L"
cTheQuery += "?"+ IF(X < Len(aTheDBF),", ","")
cTheValue:=IF(cTheValue,1,0)
Param0 := oCommand:CreateParameter(cNomeCampo, adNumeric, adParamInput,aTheDBF[X,3],cTheValue)
oCommand:Parameters:Append( Param0)
CASE aTheDBF[X,2] = "C"
cTheQuery += "?"+IF(X < Len(aTheDBF),", ","")
Param0 := oCommand:CreateParameter(cNomeCampo, adVarChar, adParamInput,aTheDBF[X,3],cTheValue)
oCommand:Parameters:Append( Param0)
CASE aTheDBF[X,2] = "M"
cTheQuery += "?"+IF(X < Len(aTheDBF),", ","")
Param0 := oCommand:CreateParameter(cNomeCampo, adLongVarChar, adParamInput,Len(IF(cTheValue=Nil,aTheDBF[X,1],cTheValue)),cTheValue)
oCommand:Parameters:Append( Param0)
ENDCASE
NEXT
cTheQuery+=" )"
oRecordSet:Close()
oConnection:BeginTrans()
oCommand:CommandText:=cTheQuery
oCommand:Execute()
oCommand:=IniciaCommand()
Param0:=Nil
oConnection:CommitTrans()
HWG_DOEVENTS()
ENDCASE
RETURN Nil