error en tdatabase con DBF

error en tdatabase con DBF

Postby artu01 » Mon Feb 20, 2023 10:10 pm

Gente estoy usando fw vers. 1712 y tengo problemas con la instruccion database con DBFs
Asi lo uso:
Code: Select all  Expand view  RUN

select factura
DATABASE oDbf
...
 


Con la vers. 13.01 usaba alias o database en forma alternante sin prpblema pero ahora que estoy trabajando
con la 1712 mi programa corre pero despues de leer la instruccion DATABASE oDbf aparecen estos errores tales como: ORDKEYNO(), Alias no existe, etc.

Mis tablas DBFs con su alias son abiertas al iniciar mi programa, segun he leido cuando cierro el objeto oDbf tambien cierra el Alias?

Ha variado la clase TDATABASE de la vers. 13 a la 17?, supongo que si, entonces podrian indicarme la forma correcta de usar el DATABASE odbf sin que cierre la tabla ya que el sistema esta en red.

Gracias
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: error en tdatabase con DBF

Postby jvtecheto » Fri Feb 24, 2023 8:21 am

Hola amigo.

Yo también uso el objeto database alternativamente junto con alias, lo uso para búsquedas. Tengo las bases de datos abiertas y el objeto database lo uso con otro alias.

No tengo ningún problema

Podíamos ver un poco de tu código?

Saludos

Jose.

Enviado desde mi POCOPHONE F1 mediante Tapatalk
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
jvtecheto
 
Posts: 600
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: error en tdatabase con DBF

Postby artu01 » Thu Mar 02, 2023 6:32 am

jose vicente gracias x responder, ahi te alcanzo mi codigo fuente.

MAIN.PRG es en donde abro las tablas dbf al inicio
Code: Select all  Expand view  RUN

...
...
    IF !(VALTYPE( AbreDbf("ARTICULO", .T., .F. , , cPathDbf+cSubCarp, {"articulo"  }, "Articulos" ) ) == "O" .AND.     ;
         VALTYPE( AbreDbf("PATRON", .T., .F. , , cPathDbf+cSubCarp, {"PATRON"  }, "Patrones" ) ) == "O" .AND.          ;
         VALTYPE( AbreDbf("PERSONA" , .T., .F., , cPathDbf, {"PERSONA"},"Personas") ) == "O" .AND.                     ;
         VALTYPE( AbreDbf("IGV"     , .T., .F., , cPathDBF, , "I.G.V." ) ) == "O" .AND.                                ;
         VALTYPE( AbreDbf("PORC"     , .T., .F., , cPathDBF, , "Porcentaje" ) ) == "O" .AND.                           ;
         VALTYPE( AbreDbf("UBICA"   , .T., .F., , cPathDBF, {"UBICA"  }, "Ubicaciones" ) ) == "O" .AND.                ;
         VALTYPE( AbreDbf("UBIGEO"  , .T., .F., , cPathDBF, {"UBIGEO"  }, "Ubicacion Geografica" ) ) == "O" .AND.      ;
         VALTYPE( AbreDbf("CODERROR", .T., .F., , cPathDBF, {"CODERROR"  }, "Codigo de Errores" ) ) == "O" .AND.       ;
         VALTYPE( AbreDbf(cDbfGuia , .T., .F., "CABGUIA", cPathDbf, {cDbfGuia}, "Cabecera") ) == "O" .and.             ;
         VALTYPE( AbreDbf(cDbfDGuia , .T., .F., "DETGUIAD", cPathDbf, {cDbfDGuia}, "Movimientos de guias" ) ) == "O" .AND. ;
         VALTYPE( AbreDbf(cDbfParte , .T., .F., "CABPARTE", cPathDbf, {cDbfParte}, "Cabecera de Parte") ) == "O" .and. ;
         VALTYPE( AbreDbf(cDbfdParte , .T., .F., "DETPARTE", cPathDbf, {cDbfdParte}, "Movimientos de partes" ) ) == "O" .AND. ;
         VALTYPE( AbreDbf("TIPNOTA"  , .T., .F. , , cPathDBF, {"TIPNOTA"}, "Tipos de Nota"  ) ) == "O" .AND.           ;
         VALTYPE( AbreDbf(cDbfNc, .T., .F., "CABNC", cPathDbf, {cDbfNc}, "Cabecera de NC") ) == "O" .and.              ;
         VALTYPE( AbreDbf(cDbfDNc, .T., .F., "DETNC", cPathDbf,{cDbfDNc}, "Detalle de NC") ) == "O" .and.              ;
         VALTYPE( AbreDbf(cDbfFac   , .T., .F., "FACTURA", cPathDbf, {cDbfFac}, "Facturas"   ) ) == "O"  .AND.         ;
         VALTYPE( AbreDbf(cDbfDFac   , .T., .F., "DETFAC", cPathDbf, {cDbfDFac} ,"Detalle de Facturas"   ) ) == "O"  .AND.      ;
         VALTYPE( AbreDbf(cDbfAnu   , .T., .F., "ANULADA", cPathDbf,  {cDbfAnu}  ,"Comprob. Anulados"   ) ) == "O"  .AND.         ;
         VALTYPE( AbreDbf("CONPAG" , .T., .F., , cPathDBF, {"CONPAG"}, "Condiciones de Pago" ) ) == "O" .AND.          ;
         VALTYPE( AbreDbf("MCODI"   , .T., .F., , cPathDbf+cSubCodi, {"MCODI"}, "Proveedores"         ) ) == "O" .AND. ;
         VALTYPE( AbreDbf("EMPRESA"  , .T., .F. , , cPathDBF, {"empresa"}, "Empresas"  ) ) == "O"  ;
        )
        lOk:=.f.
        Msgalert("El archivo esta siendo usado")
      IIF( Select("PERSONA" ) <> 0, PERSONA->( DBCLOSEAREA() ), )
      IIF( Select("IGV" ) <> 0, IGV->( DBCLOSEAREA() ), )
      IIF( Select("PORC" ) <> 0, PORC->( DBCLOSEAREA() ), )
      IIF( Select(cDbfGuia) <> 0, (cDbfGuia)->( DBCLOSEAREA() ), )
      IIF( Select(cDbfDGuia) <> 0, (cDbfDGuia)->( DBCLOSEAREA() ), )
          IIF( Select(cDbfParte) <> 0, (cDbfParte)->( DBCLOSEAREA() ), )
          IIF( Select(cDbfdParte) <> 0, (cDbfdParte)->( DBCLOSEAREA() ), )
      IIF( Select("MCODI") <> 0, MCODI->( DBCLOSEAREA() ), )
      IIF( Select("ARTICULO") <> 0, ARTICULO->( DBCLOSEAREA() ), )
      IIF( Select("CONPAG") <> 0, CONPAG->( DBCLOSEAREA() ), )
      IIF( Select("EMPRESA"  ) <> 0, EMPRESA->( DBCLOSEAREA()  ), )
      IIF( Select("PATRON"  ) <> 0, PATRON->( DBCLOSEAREA()  ), )
      IIF( Select("Factura") <> 0, Factura->( DBCLOSEAREA() ), )
      IIF( Select("detfac") <> 0, detfac->( DBCLOSEAREA() ), )
      IIF( Select("ANULADA") <> 0, ANULADA->( DBCLOSEAREA() ), )
      IIF( Select("Ubica") <> 0, Ubica->( DBCLOSEAREA() ), )
      IIF( Select("Ubigeo") <> 0, Ubigeo->( DBCLOSEAREA() ), )
      IIF( Select("CodError") <> 0, CodError->( DBCLOSEAREA() ), )
      IIF( Select("CABNC") <> 0, CABNC->( DBCLOSEAREA() ), )
      IIF( Select("DETNC") <> 0, DETNC>( DBCLOSEAREA() ), )
      IIF( Select("TIPNOTA") <> 0, TIPNOTA->( DBCLOSEAREA() ), )
    ENDIF
 


LIBSIS.PRG, prg contiene las funciones del sistema
Code: Select all  Expand view  RUN

FUNCTION AbreDBF( cFile, lRed, lSoloLee, cAlias, cPath, aNtx, cName )
   LOCAL oDBF, i
   MEMVAR cPathDBF
   MEMVAR Exten

   //Chk defaults
   DEFAULT lRed := .T.
   DEFAULT lSoloLee := .F.
   DEFAULT cAlias := cFile
   DEFAULT cPath  := cPathDBF
   DEFAULT cName  := cFile
   DEFAULT aNtx   := NIL

   //Chk existencia de Archivos
   IF !FILE( cPath+cFile+".DBF" )
      MsgBox(2,"No existe el Archivo:"+cName+".DBF")
      Return ( 1 )
   ENDIF

   //Abre Archivo
   DBUSEAREA( .T.,"DBFCDX",cPath+cFile+".DBF", cAlias, lRED, lSoloLee )

   //Si no hay error retorna objeto
   IF !NETERR()
      //Abre Indices Pasados en aNtx
      If aNtx != NIL
         FOR i:=1 TO LEN(aNtx)
            IF FILE( cPath+aNtx[i]+Exten )
               (cAlias)->( DBSETINDEX( cPath+aNtx[i]+Exten ) )
            ELSE
               MsgBox(2,"No existe Indice : "+aNtx[i]+Exten)
               RETURN ( -2 )
            ENDIF
         NEXT
      Endif
      DATABASE oDBF
      oDBF:bEof := {|| NIL }                              
      oDBF:bBof := {|| NIL }
   ELSE
      //si hay error retorna un numero 0
      MsgBox(2, "No se puede abrir el archivo "+cName+" - Esta siendo usado." )
      oDBF := 0
   ENDIF
   RETURN ( oDBF )
 


BRWFACTU.PRG, modulo para visualizo las facturas con xbrowse
Code: Select all  Expand view  RUN

FUNCTION BrwFactu()
   LOCAL oBtn
   LOCAL nKey
   LOCAL aDatos := {}, nVer, nHor
   cMes    :=StrZero(mMes,2)

    select FACTURA
    set relation to factura->ruc into mcodi
   
    SELECT FACTURA
    DATABASE oDbf        //<==== AQUI BOTA ERROR de msje ORDKEYNO() o Alias no existe
                                  //la primera vez que entro no bota error, salgo del modulo y vuelvo a entrar se cae el prog. lanzando el msje ORDKEYNO u otro msje como ALIAS NO EXISTE
                                 //Con fwh13.07 no tuve problema pero con la vers. fwh1712 sale error

    INDEX ON facbol+numero TAG d:\cabfac to d:\cabfac temporary for factura->CodUsu+factura->mes=MEMVAR->CodUsu+StrZero(mMes,2) .and. factura->estenv <> ' ' .and. year(factura->fecha) = mAnio descending //ADDITIVE

    factura->(dbgotop())

    DEFINE DIALOG  oDlg RESOURCE "BRW_FACTURA" TITLE "Facturas/Boletas/NCs" FONT oFontS

    REDEFINE SAY oSay PROMPT cString ID 111 OF oDlg                     //1

    REDEFINE XBROWSE oBrw                                    ;
     COLUMNS "FACBOL","dtoc(FECHA)","NUMERO","RAZSOC","IIF(MONEDA=='S', 'S/.', 'US$')",;
             "MONTO","DSCTOV","NETO","IGV","TOTAL", "iif(factura->estanu='A', FACTURA->FBaja, '')"  ;
            ALIAS "FACTURA"                                  ;
      FIELDSIZES 28,66,74,200,30,85,60,60,60,85,66           ;
      HEADERS                               ;
             "F/B/C"                        ;
            ,"FECHA"                        ;
            ,"NUMERO"                       ;
            ,"CLIENTE"                      ;
            ,"MON."                         ;
            ,"T.BRUTO"                      ;
            ,"T.DSCTO"                      ;
            ,"SUBTOT"                       ;
            ,"IGV"                          ;
            ,"TOTAL"                        ;
            ,"F.BAJA"                       ;
      PICTURES nil,"99/99/9999","@R 999-9999999",nil, nil, "99,999,999.99", "@999,999.99","999,999.99","999,999.99","99,999,999.99",nil ;
      ID 4001 OF oDlg                       ;                      //2
      LINES CELL NOBORDER                   ;
      UPDATE

      oBrw:aJustify   := {.F.,.F.,.F.,.F.,.F.,.T.,.T.,.T.,.T.,.T.,.F.}
      oBrw:nMarqueeStyle       := MARQSTYLE_HIGHLROW
            oBrw:l2007            := .f.
      oBrw:bClrHeader := {|| { CLR_HBLUE,RGB(232, 255, 232) } }
        oBrw:nStretchCol := STRETCHCOL_WIDEST

      oBrw:LVscroll   := .T.
      oBrw:LHscroll   := .T.

      oBrw:bClrStd = {|| IF( FACTURA->EstAnu="A", { CLR_BLACK, RGB(200, 43, 62) } , { CLR_BLACK, RGB(232, 255, 232) } ) } // STANDAR
      oBrw:bClrSelFocus = {|| { CLR_WHITE, GetSysColor(13 ) } } // CUANDO TIENE EL FOCUS
      oBrw:bClrSel = {|| IF( FACTURA->EstAnu="A", { CLR_BLACK, RGB(200, 35, 18) } , { CLR_BLACK, RGB(232, 255, 232) } ) } // REGISTRO SELECCIONADO

     REDEFINE BUTTON oBtn ID 210 OF oDlg ;                      //3                                                                                                                            
         ACTION ( iif(FACTURA->FacBol='F', rFactura1T(FACBOL+NUMERO) , ;
         iif(FACTURA->FacBol='B',rBoleta1T(FACBOL+NUMERO),rCredito1T(FACBOL+NUMERO))), pone_cursor() )
         oBtn:cTooltip := "Impresion de Comprobante"

     REDEFINE BUTTON oBtn ID 18 OF oDlg ;                      //4
         ACTION ( rGuia1(FACBOL+NUMERO), pone_cursor() )
         oBtn:cTooltip := "Impresion de Guia de Remision"

     REDEFINE BUTTON oBtn ID ID_CANCEL OF oDlg ;                      //5
         ACTION ( oDlg:End() ) CANCEL
         oBtn:cTooltip := "Sale de la ventana"

     REDEFINE BUTTON oBtn ID 4002 OF oDlg ;                      //6
         ACTION IIF(FACTURA->EstAnu<>'A', (IIF(FACTURA->FACBOL="B",iif(iif(empty(cUserTda),Pide_ClaveR(),.T.), AnularBol(),) ,AnuCpe()), Pone_Cursor()), )
         oBtn:cTooltip := "Anulacion de Comprobante"

     REDEFINE BUTTON oBtn ID 4003 OF oDlg ;                      //7
         ACTION ( Validar_CPE(), Pone_Cursor(oBrw) )
         oBtn:cTooltip := "Validar Anulacion"

     ACTIVATE DIALOG oDlg NOWAIT ON INIT (oDlg:MOVE(100,100), oBrw:SetFocus())
return nil
 
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: error en tdatabase con DBF

Postby James Bott » Thu Mar 02, 2023 4:35 pm

Parece que ambos están usando objetos de la base de datos como si no fueran objetos. Estás haciendo mucho trabajo.

Cuando crea un objeto de base de datos, se abre automáticamente en una nueva área. Entonces puedes hacer:

oCliente1:= TDatabase:Nuevo( ,"cliente")
oCliente2:= TDatabase:Nuevo( ,"cliente")

Para probar lo anterior haz:

? oCliente1:nÁrea
? oCliente2:nÁrea

Habrá dos copias de la base de datos abiertas y cada una en su propia área de trabajo. Pueden estar en la misma función o en funciones diferentes y ambos pueden estar abiertos al mismo tiempo.

> entonces podría decirme la forma correcta de usar la BASE DE DATOS odbf sin cerrar la tabla ya que el sistema está en red.

No desea estar limitado a abrir solo una copia de una base de datos a la vez en cualquier aplicación. Las computadoras ahora tienen suficiente memoria para manejar la apertura de la misma base de datos varias veces en la misma aplicación. Además, esto le evita tener que guardar y restaurar los atributos de una base de datos (regno actual, índice, filtro, etc.) siempre que la use.

Ver también: http://gointellitech.com/program.html
FWH 18.05/xHarbour 1.2.3/BCC7/Windows 10
User avatar
James Bott
 
Posts: 4840
Joined: Fri Nov 18, 2005 4:52 pm
Location: San Diego, California, USA

Re: error en tdatabase con DBF

Postby artu01 » Sun Mar 05, 2023 3:23 pm

thank you Mr. Bott!

i will change my code.

Excellent your explain about POO.
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: pedroluis and 50 guests