Array desde varias DBFs usando FW_DbfToArray() ? SOLUCIONADO

Array desde varias DBFs usando FW_DbfToArray() ? SOLUCIONADO

Postby FranciscoA » Mon May 31, 2021 8:28 pm

Hola.
La function FW_DbfToArray() no permite crear un array desde varias Dbfs idénticas ?

Siempre he utilizado, sin problemas, esta función para crear consultas, Browsers, y reportes, utilizando los dos primeros parámetros: cFieldList y bFor.
Hoy se me presenta la necesidad de crear el array extrayendo los datos desde varias tablas DBF, sin resultados.
En el siguiente ejemplo, el browser no muestra nada: ( FW1709 )

Code: Select all  Expand view  RUN
//--------------------------------------------//
Function DBFs2Array(dFechaF)
local aData := {}
Comprobd->( FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
Cheques->(  FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
RecibCaj->( FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
Minutas->(  FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
Facturas->( FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
CARTERA->(  FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
XBROWSER aData TITLE "ARRAY DESDE VARIAS DBFs"
return nil


Alguien puede postear un ejemplo de la manera planteada?
Gracias.
Last edited by FranciscoA on Wed Jun 02, 2021 5:46 pm, edited 1 time in total.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Array desde varias DBFs usando FW_DbfToArray() ?

Postby cnavarro » Mon May 31, 2021 8:46 pm

Francisco, has intentado...
Code: Select all  Expand view  RUN

Function DBFs2Array(dFechaF)
local aData := {}
aData         := Comprobd->( FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
.../...
 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Array desde varias DBFs usando FW_DbfToArray() ?

Postby FranciscoA » Mon May 31, 2021 9:04 pm

cnavarro wrote:Francisco, has intentado...
Code: Select all  Expand view  RUN

Function DBFs2Array(dFechaF)
local aData := {}
aData         := Comprobd->( FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
.../...
 


Gracias por contestar, Cristóbal.
Sí, lo he hecho de esa forma... y lo mismo. ( solo trae los datos de la primera tabla dbf )
Saludos.
Code: Select all  Expand view  RUN
Function DBFs2Array(dFechaF)
local aData := {}
aData := Comprobd->( FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
Cheques->(  FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
RecibCaj->( FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
Minutas->(  FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
Facturas->( FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
CARTERA->(  FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
XBROWSER aData TITLE "ARRAY DESDE VARIAS DBFs"
return nil
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Array desde varias DBFs usando FW_DbfToArray() ?

Postby FranciscoA » Mon May 31, 2021 9:22 pm

Lo he intentado asi... y nada...
Code: Select all  Expand view  RUN
Function DBFs2Array(dFechaF)
local aData := {}
Comprobd->( FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , @aData ) )    //  -->> @
Cheques->(  FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , @aData ) )
RecibCaj->( FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , @aData ) )
Minutas->(  FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , @aData ) )
Facturas->( FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , @aData ) )
CARTERA->(  FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , @aData ) )
XBROWSER aData TITLE "ARRAY DESDE VARIAS DBFs"
return nil
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Array desde varias DBFs usando FW_DbfToArray() ?

Postby FranciscoA » Mon May 31, 2021 9:42 pm

Cristóbal:
Increíble... la respuesta la tienen los gurús de Fivewin.

Hice una copia de la función original FW_DbfToArray(), y la coloqué (RENOMBRADA) como una función mas en el programa, y funcionó.
Claro está, que no es la solución correcta, pero mientras..

Code: Select all  Expand view  RUN
//----------------------------------------------------------------------------//
Function DBFs2Array(dFechaF)
local aData := {}
Comprobd->( FWA_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
Cheques->(  FWA_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
RecibCaj->( FWA_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
Minutas->(  FWA_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
Facturas->( FWA_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
CARTERA->(  FWA_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
XBROWSER aData TITLE "ARRAY DESDE VARIAS DBFs"
return nil

//----------------------------------------------------------------------------//

function FWA_DbfToArray( cFieldList, bFor, bWhile, nNext, nRec, lRest, aData )

   local aRet  := {}, nRecNo := RecNo(), bLine, cList

   // cFieldList : comma delimited list of fields. Eg: "First,City,Age"

   if ValType( aData ) == 'A'
      aRet     := aData
   endif

   if Empty( cFieldList ) .or. '*' $ cFieldList
      cList  := ""
      AEval( DbStruct(), { |a| cList += "," + a[ 1 ] } )
      cList  := Substr( cList, 2 )

      if Empty( cFieldList )
         cFieldList  := cList
      else
         cFieldList  := StrTran( cFieldList, '*', cList )
      endif

   endif

   bLine    := &( "{||{" + cFieldList + "}}" )
   DbEval( { || AAdd( aRet, Eval( bLine ) ) }, bFor, bWhile, nNext, nRec, lRest )
   DBGOTO( nRecNo )

return aRet

 

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Array desde varias DBFs usando FW_DbfToArray() ?

Postby cnavarro » Mon May 31, 2021 9:52 pm

Has intentado con un aClone ?
Code: Select all  Expand view  RUN

Function DBFs2Array(dFechaF)
local aData := {}
aData         := aClone( Comprobd->( FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) ) )
.../...
 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Array desde varias DBFs usando FW_DbfToArray() ?

Postby FranciscoA » Tue Jun 01, 2021 1:57 am

Cristóbal.
No hay de piña. Probablemente no he interpretado bien tus sugerencias.

Code: Select all  Expand view  RUN
Function DBFs2Array(dFechaF)
local aData := {}

//Si hago asi, el array se llena  únicamente con los datos de la segunda tabla,
*aData := AClone( Comprobd->( FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) ) )
*aData := AClone( Cheques->(  FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) ) )

//Si lo hago de esta manera, el array se llena únicamente con los datos de la primera tabla,
*aData := AClone( Comprobd->( FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) ) )
*Cheques->(  FW_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )

//Si agrego al programa una copia renombrada de FW_DbfToArray(),  y llamo a esta funcion renombrada, el array se llena con los datos de todas las tablas.
Comprobd->( FWA_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )
Cheques->(  FWA_DbfToArray( , {|| field->fechemis<=dFechaF .and. !Deleted() }, , , , , aData ) )

XBROWSER aData TITLE "ARRAY DESDE VARIAS DBFs"
return nil


Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Array desde varias DBFs usando FW_DbfToArray() ?

Postby nageswaragunupudi » Tue Jun 01, 2021 10:50 am

There is no problem with the function. It is working as expected here.

This is the sample test program.

Code: Select all  Expand view  RUN
#include "fivewin.ch"

REQUEST DBFCDX

function Main()

   local aData

   USE CUSTOMER NEW SHARED VIA "DBFCDX"
   USE NOMBRES  NEW SHARED VIA "DBFCDX"

   aData := CUSTOMER->( FW_DbfToArray( "ALIAS(),RECNO(),TRIM(FIRST),TRIM(STREET)",    { || RECNO() < 4 } ) )
   aData := NOMBRES-> ( FW_DbfToArray( "ALIAS(),RECNO(),TRIM(NOMBRE),TRIM(DIRECCION)",{ || RECNO() < 4 }, nil, nil, nil, nil, aData ) )

   XBROWSER aData TITLE FWVERSION + " : ARRAY FROM CUSTOMER + NOMBRES" ;
      SETUP ( oBrw:cHeaders := { "ALIAS", "RECNO", "NAME", "ADDRESS" } ) SHOW RECID

return nil


Image

It has to work.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10662
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Array desde varias DBFs usando FW_DbfToArray() ?

Postby FranciscoA » Tue Jun 01, 2021 5:05 pm

nageswaragunupudi wrote:There is no problem with the function. It is working as expected here.
It has to work.


Rao.
Gracias por su confirmación.
Ciertamente, he probado mi función ejemplo de manera independiente y funciona sin problemas.
No se por qué al integrarla a mi sistema falla, a como ya lo he expuesto.
Voy a hacer mas pruebas, y luego les comunico.

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Array desde varias DBFs usando FW_DbfToArray() ?

Postby FranciscoA » Wed Jun 02, 2021 5:44 pm

nageswaragunupudi wrote:
It has to work.


Cristóbal y Rao:
Muchas gracias por su tiempo. Me disculpo, fué error mío.

En el fichero 'MisFunc.prg', que incluyo en cada proyecto, tenía la función FW_DbfToArray() que modifiqué hace muchos años.
En ese entonces esta función no tenía el último parámetro aData, y por supuesto siempre reemplazaba a la actual original.

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 100 guests