Utilitário de Carga DBF/Oracle

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Utilitário de Carga DBF/Oracle

Mensagem por asimoes »

Amigos,

Desenvolvi para a nossa conversão de DBF para Oracle este pequeno utilitário, qualquer bug por favor informem.

Código:
AdoOraDbf.prg

Código: Selecionar todos

*********************************************************************
* Programa : ADORADBF                                               *
* Autor    : Alexandre Simões                                       *
* Data     : 23/03/2012                                             *
* Descricao: Carga de uma tabela DBF no Oracle                      *
*            Conexão via ADODB                                      * 
*********************************************************************
#include "hbcompat.ch"
#include "inkey.ch"
#include "setcurs.ch"
#include "error.ch"
#include "achoice.ch"
#include "fileio.ch"
#include "common.ch"
#include "dbinfo.ch"
#include "hbver.ch"
#include "hbdyn.ch"
#include "wvtwin.ch"
#include "hbgtinfo.ch"
#include "hbgtwvg.ch"
#include "wvgparts.ch"
#include "hbcompat.ch"
#include "windows.ch"
#include "directry.ch"
#include "adordd.ch"
#include 'set.ch'

#command SET OPTIMIZE <x:ON,OFF,&>   => Set( _SET_OPTIMIZE, <(x)> )
#command SET AUTOPEN <x:ON,OFF,&>    => Set( _SET_AUTOPEN, <(x)> )
#command SET DBFLOCKSCHEME TO <x>    => Set( _SET_DBFLOCKSCHEME, <x> )   

FUNCTION Main(cPastaDBF)
DEFAULT cPastaDBF TO ""
   Carga_Oracle(cPastaDBF)
RETURN Nil

*-------------------------------------------------------------------------
FUNCTION Carga_Oracle(cPasta)
*-------------------------------------------------------------------------
PRIVATE cBancoOracle, cEsquemaOracle, cSenhaUsuarioOracle, oConnection

   QualConexao()

   oRecordSet:=Nil
   CriaObjetoRecordSet(@oRecordSet)
   oRecordSet:CursorType := adOpenDynamic
   oRecordSet:ActiveConnection:=oConnection          
   oCommand:=IniciaCommand()
   
   //MsgStatus(03,00,"A conexÆo no Oracle est  ativa.")

   SetCursor(0)

   IF Empty(cPasta)
      DO WHILE Empty(cPasta)
         cPasta:=SelectFolder("Informe a pasta dos dbfs.")
         IF Empty(cPasta)
            IF MsgNaoSim("Nenhuma pasta foi selecionada, abandonar?")
               QUIT
            ENDIF   
         ELSE
            IF MsgNaoSim("Confirma a pasta "+cPasta+ " para migra‡Æo?")
               EXIT
            ELSE
               cPasta:=""
               LOOP 
            ENDIF      
         ENDIF
      ENDDO
   ENDIF
   
   SET DEFAULT TO &cPasta.

   IF !MsgNaoSim("Inicia a carga?","Aten‡Æo")
      QUIT
   ENDIF
   
   aDBF:={}

   FErase("dbf2ora.txt")


   aDir:=Directory(cPasta+HB_PS()+"*.DBF")

   ASort( aDir ,,, {|x,y| y[1] > x[1] } )
   
   IF Len(aDir) > 0
      AEval(aDir,{|f| AAdd(aDBF,Upper(f[F_NAME]))})
   ENDIF

   IF Len(aDBF) > 0
   
      @07,00 SAY PADR("Pasta dos dbfs",40)+": "                          COLOR "W+/N" 
      
      @07,42 SAY PADL(cPasta,MaxCol()-42)                                COLOR "W+/N"

      @08,00 SAY PADR("Total de tabela(s)",40)+": "                      COLOR "W+/N" 
      
      @08,42 SAY PADL(Transform(Len(aDBF),"9999"),MaxCol()-42)           COLOR "W+/N"

      @09,00 SAY PADR("Hora inicio",40)+": "                             COLOR "W+/N" 
      
      @09,42 SAY PADL(Time(),MaxCol()-42)                                COLOR "W+/N"

      @10,00 SAY PADR("Hora t‚rmino",40)+": "                            COLOR "W+/N" 
   
      @11,00 SAY PADR("Processando tabela n§",40)+": "                   COLOR "W+/N" 

      @12,00 SAY PADR("Criando e inserindo registros na tabela",40)+": " COLOR "W+/N" 
 
      @13,00 SAY PADR("Total de registros",40)+": "                      COLOR "W+/N" 

      @14,00 SAY PADR("Tempo decorrido",40)+": "                         COLOR "W+/N" 

      @15,00 SAY PADR("% realizado",40)+": "                             COLOR "W+/N" 

      @16,00 SAY PADR("Registro corrente",40)+": "                       COLOR "W+/N" 

      nSecIni:=Seconds()

      TRY
         cTheQuery:="DROP TABLE "+Alias()
         oConnection:Execute( cTheQuery ) 
      CATCH oErr
      END
       
      FOR nContadorTabela:=1 TO Len(aDBF)
   
         cTabelaDBF:=aDBF[nContadorTabela]
         
         cAlias:=StrTran(Upper(aDBF[nContadorTabela]),".DBF") 
   
         USE &(cAlias) ALIAS &cAlias.
      
         aTheDBF := DbStruct()

         @11,42 CLEAR TO 12,MaxCol()
         
         @16,42 CLEAR TO 22,MaxCol()
         
         @11,42 SAY PADL(Transform(nContadorTabela,"9999"),MaxCol()-42)  COLOR "W+/N"
   
         @12,42 SAY PADL(cAlias,MaxCol()-42)                             COLOR "W+/N"

         TRY
            cTheQuery:='DROP TABLE '+Alias()
            oConnection:Execute( cTheQuery )
         CATCH
         END
         
         //cTheQuery:='ALTER SESSION SET NLS_LANGUAGE = "PORTUGUESE"'
         //oConnection:Execute( cTheQuery )
         
         //cTheQuery:='ALTER SESSION SET NLS_TERRITORY = "BRAZIL"'
         //oConnection:Execute( cTheQuery )
         
        
         TRY
            cTheQuery:="CREATE TABLE "+Alias()+ " ( "
            nEspaco:=Len(cTheQuery)
            FOR I:=1 TO Len(aTheDBF)
               cNomeCampo:=Upper(aTheDBF[I,1])
               IF AllTrim(cNomeCampo) == "DESC"
                  cNomeCampo:='"'+'DESC'+'"'
               ENDIF
               IF AllTrim(cNomeCampo) == "DATA"
                  cNomeCampo:='"'+'DATA'+'"'
               ENDIF

               DO CASE
               CASE aTheDBF[I,2] = "C"
                    cTheQuery+=IF(I>1,Space(nEspaco),"")+PADR(cNomeCampo,10)+" varchar("+AllTrim(Str(aTheDBF[I,3]))+") NULL,"+HB_EOL()
               CASE aTheDBF[I,2] = "N"
                    cTamanho:=AllTrim(Str(aTheDBF[I,3]))
                    cDecimal:=AllTrim(Str(aTheDBF[I,4]))
                    cTheQuery+=IF(I>1,Space(nEspaco),"")+PADR(cNomeCampo,10)+" number("+cTamanho+","+cDecimal+") NULL,"+HB_EOL()
               CASE aTheDBF[I,2] = "D"      
                    cTheQuery+=IF(I>1,Space(nEspaco),"")+PADR(cNomeCampo,10)+" date NULL,"+HB_EOL()
               CASE aTheDBF[I,2] = "L"
                    cTheQuery+=IF(I>1,Space(nEspaco),"")+PADR(cNomeCampo,10)+" char(1) DEFAULT 'F' check("+aTheDBF[I,1]+" in ('F', 'T')) NOT NULL,"+HB_EOL()
               CASE aTheDBF[I,2] = "M"
                    cTheQuery+=IF(I>1,Space(nEspaco),"")+PADR(cNomeCampo,10)+" clob NULL,"+HB_EOL()
               ENDCASE
            NEXT
           
            nPosicaoVirgula:=RAT(',', cTheQuery)
           
            cTheQuery:=SubStr(cTheQuery,1,nPosicaoVirgula - 1)+" )"
           
            FErase("c:\temp\querytable.txt")

            EscreveLinha(cTheQuery,"c:\temp\querytable.txt")
           
            oConnection:Execute( cTheQuery ) // Cria a tabela se nÆo existe
        
         CATCH oErr
         END
        
         TRY
            cTheQuery:="TRUNCATE TABLE "+Alias()
            oConnection:Execute( cTheQuery ) 
         CATCH oErr
         END
        
         //TRY 

            nTotalRegistros:=0
            
            &(Alias())->(DbEval({||nTotalRegistros++},{||!&(Alias())->(Deleted()) .AND. !&(Alias())->(Eof())}))

            &(Alias())->(DbGoTop())
      
            @13,42 SAY PADL(Transform(nTotalRegistros,"999999999"),MaxCol()-42) COLOR "W+/N"

            cQueryLeft := "INSERT INTO "+Alias()+" ("
        
            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,10) + ", "+HB_EOL()
            NEXT
        
            nPosicaoVirgula:=RAT(',', cQueryLeft)
        
            cQueryLeft:=SubStr(cQueryLeft,1,nPosicaoVirgula - 1)+" ) VALUES ("
        
            nEspaco:=Len(cQueryLeft)-RAT( " ) VALUES (", cQueryLeft )+33
            
            nPosicaoVirgula:=RAT(',', cQueryLeft)
            
            cValorInsert:="" 

            TermoEspecial(0,nTotalRegistros)

            nTermo:=0

            EscreveLinha("Tabela : "+PADL(Alias(),10)+" iniciado  as: "+Time(),"c:\temp\dbf2ora.txt")

            AbreLinha(1,"c:\temp\dbf2ora.txt") 

            DO WHILE !&(Alias())->(Eof())

               TermoEspecial(++nTermo)
 
               @16,42 SAY PADL(Transform(nTermo,"999999999"),MaxCol()-42) COLOR "W+/N"

               cTheQuery := cQueryLeft
         
               FOR X:=1 TO Len(aTheDBF)

                  @14,42 SAY PADL(TsTring(Seconds()-nSecIni),MaxCol()-42) COLOR "W+/N"
             
                  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
              
                  cEspaco:=IF(X>1,Space(nEspaco),"")

                  DO CASE
                  CASE aTheDBF[X,2] = "N"
                       cTheQuery += "?, "
                       Param0 := oCommand:CreateParameter(cNomeCampo, adNumeric, adParamInput,aTheDBF[X,3],cTheValue)
                       oCommand:Parameters:Append( Param0)
                  CASE aTheDBF[X,2] = "D"      
                       cTheQuery += "?, "
 		                   Param0 := oCommand:CreateParameter(cNomeCampo, adDate, adParamInput,aTheDBF[X,3],cTheValue)
                       oCommand:Parameters:Append( Param0)
                  CASE aTheDBF[X,2] = "L"
                       cTheQuery += "?, "
                       cTheValue:=IF(cTheValue,"T","F")
                       Param0 := oCommand:CreateParameter(cNomeCampo, adVarChar, adParamInput,aTheDBF[X,3],cTheValue)
                       oCommand:Parameters:Append( Param0)
                  CASE aTheDBF[X,2] = "C"
                       cTheQuery += "?, "
                       Param0 := oCommand:CreateParameter(cNomeCampo, adVarChar, adParamInput,aTheDBF[X,3],cTheValue)
                       oCommand:Parameters:Append( Param0)
                  CASE aTheDBF[X,2] = "M"
                       cTheQuery += "?, "
                       Param0 := oCommand:CreateParameter(cNomeCampo, adLongVarChar, adParamInput,Len(IF(cTheValue=Nil,aTheDBF[X,1],cTheValue)),cTheValue)
                       oCommand:Parameters:Append( Param0)
                  ENDCASE
               NEXT

               nPosicaoVirgula:=RAT(',', cTheQuery)
        
               cTheQuery:=SubStr(cTheQuery,1,nPosicaoVirgula - 1)+" )"

               FErase("c:\temp\queryvalor.txt")

               FErase("c:\temp\queryinsert.txt")
            
               EscreveLinha(cValorInsert,"c:\temp\queryvalor.txt")

               EscreveLinha(cTheQuery,"c:\temp\queryinsert.txt")
                
               oCommand:CommandText:= cTheQuery 

               oCommand:Execute()

               oCommand:=IniciaCommand()
               
               Param0:=Nil

               &(Alias())->(DbSkip())

            ENDDO

            EscreveLinha("Tabela : "+PADL(Alias(),10)+" terminado as: "+Time(),"c:\temp\dbf2ora.txt")

            AbreLinha(1,"c:\temp\dbf2ora.txt") 

         //CATCH oErr
         //   TONE(800,4)
         //   Info("NÆo foi possivel inserir registros na tabela "+Alias())
         //END
        
         @14,42 SAY PADL(TsTring(Seconds()-nSecIni),MaxCol()-42) COLOR "W+/N"

         @15,42 SAY PADL(Transform((nContadorTabela/Len(aDBF))*100,"999.99"),MaxCol()-42) COLOR "W+/N"

         &(Alias())->(DbCloseArea())
   
      NEXT

      @10,42 SAY PADL(Time(),MaxCol()-42) COLOR "W+/N"

      Info("Carga concluida com sucesso.","Aten‡Æo")

   ELSE
      Pare("NÆo existe DBF para carga nesta pasta.","Aten‡Æo")
   ENDIF

   oConnection:=NIL

RETURN NIL

FUNCTION MsgStatus(nLinha,nColuna,cMensagem) 
   @nLinha,nColuna SAY PADR(cMensagem,MaxCol()+1) 
RETURN Nil

INIT FUNCTION AppSetup()

  ErrorBlock( { | oError | DefError( oError,"UTILITARIO" ) } )   
  REQUEST HB_LANG_PT
  REQUEST HB_CODEPAGE_PT850
  HB_LANGSELECT("PT")
  HB_CDPSELECT( "PT850" )

  REQUEST HB_GT_GUI_DEFAULT
  REQUEST HB_GT_WVG
  REQUEST HB_GT_WVT
  REQUEST HB_GT_WGU

  SETMODE(25,80)
  SET TYPEAHEAD TO 0
  SET INTENSITY ON
  SET SCOREBOARD OFF
  SET DELETED ON
  SET SAFETY OFF
  SET DATE BRITI
  SET ESCAPE ON
  SET CENTURY ON
  SET DELIMITERS TO
  SET EXCLUSIVE OFF
  SET WRAP ON
  SET EPOCH TO 1920
  SET OPTIMIZE ON

  aIndFPT:=Directory("*.FPT")

  IF Len(aIndFPT) > 0  
     REQUEST DBFCDX
     RddSetDefault("DBFCDX")
  ELSE
     REQUEST DBFNTX
     RddSetDefault("DBFNTX")
  ENDIF
   
  SET AUTOPEN ON
     
  SET DBFLOCKSCHEME TO DB_DBFLOCK_DEFAULT 
  
  SET MESSAGE TO 24 CENTER
  
  IniciaJanela() 
 
RETURN Nil 

FUNCTION IniciaJanela(nLi,nCi,nLf,nCf)
LOCAL oCrt
PUBLIC hWnd,;
       cTituloJanela:="AdoraDbf - Utilit rio de Migra‡Æo DBF/Oracle VersÆo 2012.3",;
       oDlgHabla,;
       oTimer,;
       cPrinter:= WIN_PrinterGetDefault() //GetDefaultPrinter()       

DEFAULT nLi TO -1,;
        nCi TO -2,;
        nLf TO MaxRow(),;
        nCf TO MaxCol()  
  
  oCrt := WvgCrt():New( , , { nLi,nCi }, { nLf,nCf}, , .T. )
  
  oCrt:lModal := .F.
  oCrt:icon := 'P:\GERAL\HARBOUR\HARB_WIN.ICO'
  oCrt:create()
  oCrt:resizable :=.F.
  WVT_SetFont("Lucida Console")
  WVT_SetTitle(cTituloJanela)
  WVT_SetAltF4Close(.F. )
  HB_gtInfo( HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_MAXIMIZED )
  hWnd:=HWG_FindWindow( ,cTituloJanela)
RETURN Nil

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 RetiraAcentos(cPalavra)
LOCAL i:=0,;
      cAcento:= '',;
      cRetiraAcento:= ''
    FOR I = 1 To Len(cPalavra)
        cAcento:=SUBST(cPalavra, I, 1)
        DO CASE
        CASE cAcento $ "µÇ¶·Ž"
           cAcento = "A"
        CASE cAcento $ "ÓÔÒ"
           cAcento = "E"
        CASE cAcento $ "ÖØÞ×"
           cAcento = "I"
        CASE cAcento $ "àåâ™"
           cAcento = "O"
        CASE cAcento $ "éëêš"
           cAcento = "U"
        CASE cAcento $ " Æƒ…„"
           cAcento = "a"
        CASE cAcento $ "‚‰Šˆ"
           cAcento = "e"
        CASE cAcento $ "¡‹Œ"
           cAcento = "i"
        CASE cAcento = "¢ä“”"
           cAcento = "o"
        CASE cAcento $ "£—–"
           cAcento = "u"
        CASE cAcento $ "‡"
           cAcento = "c"
        CASE cAcento $ "€"
           cAcento = "C"
        CASE cAcento $ "õ"
           cAcento = "§"
        ENDCASE
        cRetiraAcento += cAcento
    NEXT
RETURN cRetiraAcento

FUNCTION MsgNaoSim(cMensagem,cTitulo)
DEFAULT cTitulo TO "Aviso do Sistema"
RETURN MsgNoYes(HB_OemToAnsi(cMensagem),Hb_OemToAnsi(cTitulo))

FUNCTION Info(cMensagem,cTitulo)
DEFAULT cTitulo TO "Aviso do Sistema"
RETURN MsgInfo(HB_OemToAnsi(cMensagem),Hb_OemToAnsi(cTitulo))

FUNCTION Pare(cMensagem,cTitulo)
DEFAULT cTitulo TO "Aviso do Sistema"
RETURN MsgStop(HB_OemToAnsi(cMensagem),Hb_OemToAnsi(cTitulo))

//FUNCTION EscreveLinha(cVar,cArq)
//   StrFile(cVar,cArq,.T.)
//RETURN Nil

//FUNCTION AbreLinha(nLinha,cArq)
//LOCAL I
//DEFAULT nLinha TO 1
// FOR I:=1 TO nLinha
//      StrFile(""+HB_EOL(),cArq,.T.)
//   NEXT
//RETURN Nil

FUNCTION QualConexao()

LOCAL cNada:=""

cBancoOracle       :=Space(10)

cEsquemaOracle     :=Space(30)

cSenhaUsuarioOracle:=Space(20)


@00,00 SAY PADC(cTituloJanela,MaxCol()+1) COLOR "B/W*"

@01,00 TO 01,MaxCol() COLOR "B+/N"
   
@02,00 TO 06,MaxCol() COLOR "B+/N"

@23,00 TO 23,MaxCol() COLOR "B+/N"

TermoEspecial(0,0)

DO WHILE .T.
   @03,01     SAY "Banco   : " COLOR "W+/N"
   @03,Col()  GET cBancoOracle        PICTURE "@!" VALID         !Empty(cBancoOracle)   COLOR "B+/W*,B/GR*,,,B/W*"

   @04,01     SAY "Esquema : " COLOR "W+/N"
   @04,Col()  GET cEsquemaOracle      PICTURE "@!" VALID         !Empty(cEsquemaOracle) COLOR "B+/W*,B/GR*,,,B/W*"

   @05,01     SAY "Senha   : " COLOR "W+/N"
   @05,Col()  GET cSenhaUsuarioOracle PICTURE "@!" VALID !Empty(cSenhaUsuarioOracle)    COLOR "B+/W*,B/GR*,,,B/W*"
                            ATAIL(GETLIST):READER := {|BL1|GETSEN(BL1)} 

   READ

   IF LastKey() = 27
      QUIT
   ENDIF

   cConexao:="Provider=OraOLEDB.Oracle;Data Source="+Trim(cBancoOracle)+";User ID="+Trim(cEsquemaOracle)+";Password="+Trim(cSenhaUsuarioOracle)+";FetchSize=100;CacheType=Memory;PLSQLRSet=True;"

   TRY 
      oConnection:=Nil
      CriaObjetoConnection(@oConnection)                
      oConnection:Open(cConexao)
      @05,52 SAY PADL("Conectado ao Oracle... ",MaxCol()-52) COLOR "G+/N"
   CATCH oErr
      @05,52 SAY PADL("                       ",MaxCol()-52) COLOR "G+/N" 
      TONE(800,4)
      TONE(800,4)
      Info(oErr:Operation + " ERRO DE CONEXÇO AO BANCO")
      cSenhaUsuarioOracle:=Space(20)
      LOOP
   END
   EXIT
ENDDO

RETURN Nil

PROCEDURE GETSEN(P1)

   LOCAL L2, L3, L4

   IF GETPREVALIDATE(P1)

      P1:SETFOCUS()
      P1:CARGO := ""

      DO WHILE P1:EXITSTATE() == 0

         IF P1:TYPEOUT()

            P1:EXITSTATE := 5

         ENDIF

         DO WHILE P1:EXITSTATE() == 0

            L2 := INKEY(0)

            IF L2 >= 32 .AND. L2 <= 255

               P1:CARGO := P1:CARGO() + CHR(L2)
               GETAPPLYKEY(P1, 254) 

            ELSEIF L2 = 8

               P1:CARGO := SUBSTR(P1:CARGO(), 1, LEN(P1:CARGO()) - 1)
               GETAPPLYKEY(P1, L2)

            ELSEIF L2 = 13  // Sai com tecla ENTER e retorna a
                    // senha digitada
               GETAPPLYKEY(P1, L2)

            ELSEIF L2 = 27  // Sai com Tecla ESC e retorna vazio

               GETAPPLYKEY(P1, L2)

            ENDIF

         ENDDO

         IF  .NOT. GETPOSTVALIDATE(P1)

            P1:EXITSTATE := 0

         ENDIF

      ENDDO

      P1:KILLFOCUS()

   ENDIF

   IF P1:EXITSTATE() <> 7

      P1:VARPUT(P1:CARGO())

   ENDIF

RETURN

FUNCTION TermoEspecial
PARAMETERS C, D
LOCAL cPrint := SET( _SET_DEVICE, 'SCREEN' )
   IF TYPE('_TERMOFIM') = 'U'
       PUBLIC _TERMOFIM
      _TermoFim:=0
   ENDIF
   IF D <> NIL
      @24,00 CLEAR TO 24,MaxCol()
      @24,00 SAY PADR('0                25                50                75              100',MaxCol()+1) COLOR "B/W*"
      _TermoFim:=d
      SET( _SET_DEVICE, cPrint )
      RETURN .T.
   ELSE
      D:=0
      PintaEspecial(24,00,24,MaxCol()+1,47,C,_TermoFim)
   ENDIF
   SET( _SET_DEVICE, cPrint )
RETURN Nil

FUNCTION PintaEspecial

PARAMETERS nLinIni, nColIni, nLinFim, nColFim, nChr, nRegistro, nTotalReg

LOCAL nPorcenta, nTamanho, cTecoTela, nPintar

DEFAULT nLinIni   TO 0,;
        nColIni   TO 0,;
        nLinFim   TO 0,;
        nChr      TO 0,;
        nRegistro TO 0
   nPorcenta := (nRegistro / nTotalReg) * 100
   nTamanho  := 72 
   cTecoTela := ""
   nPintar   := Int(((nTamanho * nPorcenta) / 100) * 2)
   @ nLinIni,MaxCol()-4 SAY Transform(nPorcenta,"999%") COLOR "R+/W*"
   cTecoTela := SaveScreen(nLinIni,nColIni,nLinFim,nColFim)
   cTecoTela := Transform(Left(cTecotela,nPintar),;
                             Replicate("X"+Chr(nChr),nPintar))+;
                             SubStr(cTecoTela,nPintar+1)
   RestScreen(nLinIni,nColIni,nLinFim,nColFim,cTecoTela)
RETURN .T.

/*
* Observa‡äes da migra‡Æo DBF / ORACLE
* -----------------------------------------------------------------------------------------------
* Campos com o nome DESC devem ser renomeados para DESCR, DESC ‚ uma palavra reservada do ORACLE.
* -----------------------------------------------------------------------------------------------
* Instru‡Æo SQL para evitar o ORA-01653: unable to extend table in tablespace 
* -----------------------------------------------------------------------------------------------
select
'alter database datafile '||
file_name||
' '||
' autoextend on;'
from
dba_data_files;

alter database datafile 'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\SYSTEM.DBF'  autoextend on;
alter database datafile 'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\USERS.DBF'  autoextend on;
alter database datafile 'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\SYSAUX.DBF'  autoextend on;
alter database datafile 'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\UNDOTBS1.DBF'  autoextend on;

alter database datafile 'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\SYSTEM.DBF'  autoextend on next 10000M MAXSIZE UNLIMITED;

select tablespace_name, file_name, bytes/1048576 File_Size_MB, autoextensible, increment_by from dba_data_files order by file_id

Criar TABLESPACE:

CREATE tablespace wiliam datafile 'C:\oraclexe\app\oracle\oradata\XE\asaprev.dbf'
size 100m
autoextend on
next 50m
maxsize 20g;

Aceitar caracteres acentuados da lingua portuguesa.

ALTER SESSION SET NLS_LANGUAGE = "PORTUGUESE";
ALTER SESSION SET NLS_TERRITORY = "BRAZIL";

OU 

conn sys as sysdba;
SHUT;
STARTUP RESTRICT;
Alter database character set INTERNAL_USE WE8ISO8859P1;
SHUT;
STARTUP;

*/
AdoOraDbf.HBP

Código: Selecionar todos

# ---------------------------------------------------------------------------------
# Script de construção do ADORADBF
# ---------------------------------------------------------------------------------
# Autor     : Alexandre Simões
# Versão    : 1.0
# Data      : 20/03/2012
# Harbour   : Harbour 3.1.0dev (Rev. 17207) Copyright (c) 1999-2012,
#             http://harbour-project.org/
# Compilador: MinGW GNU C 4.6.1 (32-bit)
# ---------------------------------------------------------------------------------
# Nome do Execut vel
# ---------------------------------------------------------------------------------
-oadoradbf
# ---------------------------------------------------------------------------------
# Bibliotecas
# ---------------------------------------------------------------------------------
-lhwgui
-lprocmisc
-lhbct
-lhbgt
-lgtwvg
-lgtwvt
-lhbwin
-lhbnf
-lhbtip
-lxhb
-lhproc
-lhgac
# ---------------------------------------------------------------------------------
# Caminhos dos Includes e Lib
# ---------------------------------------------------------------------------------
-incpath=D:\HARBOUR32\INCLUDE;D:\HARBOUR32\HWGUI\INCLUDE
-LD:\HARBOUR32\HWGUI\LIB;
# ---------------------------------------------------------------------------------
# Outros Parâmetros
# ---------------------------------------------------------------------------------
-workdir=.\OBJ\
-gtgui
-head=full
-n
-nowarn
-inc
-b
-dHARBOUR
-icon=HARB_WIN.ICO
# ---------------------------------------------------------------------------------
# Prg(s) e Rc(s)
# ---------------------------------------------------------------------------------
adoradbf.prg
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder