FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour creation dbf with
Posts: 7317
Joined: Thu Oct 18, 2012 07:17 PM
creation dbf with
Posted: Sat Oct 12, 2024 08:56 PM
I wish create a dbf from array

oVirtuale:ArrayToDBF( atempDbf, , nil, .t., .t. )

but oVirtuale not have the same structure of atempDbf

oVitruale init with
Code (fw): Select all Collapse
local aFields := { { "CONCORSO", "C", 3, 0 },;
                   { "DATA", "D", 8, 0 },;
                   { "BA1", "N", 2, 0 },;
                   { "BA2", "N", 2, 0 },;
                   { "BA3", "N", 2, 0 },;
                   { "BA4", "N", 2, 0 },;

....


and atempDbf have
Code (fw): Select all Collapse
local aFields := { { "NUMERO", "N", 6, 0 },;
                   { "DATA", "D", 8, 0 },;
                   { "CONCORSO", "C", 3, 0 },;
                   { "BA1", "N", 2, 0 },;
                   { "BA2", "N", 2, 0 },;
                   { "BA3", "N", 2, 0 },;
                   { "BA4", "N", 2, 0 },;

....
I used oVirtuale:ArrayToDBF( atempDbf, cItemFlds , nil, .t., .t. )

where cItemFlds is
Code (fw): Select all Collapse
 static cItemFlds  :="CONCORSO,DATA,BA1,BA2,BA3,BA4,BA5,CA1,CA2,CA3,CA4,CA5,FI1,FI2,FI3,FI4,FI5,GE1,GE2,GE3,GE4,GE5,MI1,MI2,MI3,MI4,MI5,NA1,NA2,NA3,NA4,NA5,PA1,PA2,PA3,PA4,PA5,RM1,RM2,RM3,RM4,RM5,TO1,TO2,TO3,TO4,TO5,VE1,VE2,VE3,VE4,VE5,NZ1,NZ2,NZ3,NZ4,NZ5"
make me error on oVirtuale:ArrayToDBF( atempDbf, cItemFlds , nil, .t., .t. )

error
Code (fw): Select all Collapse
 Error description: Error DBFCDX/1021  Errore nella dimensione dei dati: BA1
   Args:
     [   1] = N   100

Stack Calls
===========
   Called from: .\source\classes\database.prg => FIELDPUT( 0 )
   Called from: .\source\function\dbffunc2.prg => FW_ARRAYTODBF( 586 )
   Called from: .\source\classes\database.prg => TDATABASE:HB_EXECFROMARRAY( 0 )
   Called from: .\source\classes\database.prg => TDATABASE:ARRAYTODBF( 1637 )
   Called from: Source\test.prg => LOAD_DBF( 584 )
   Called from: Source\test.prg => ESTRAZIONE( 106 )
   Called from: Source\test.prg => MAIN( 40 )




oLotto:gobottom()

xbrowser olotto TITLE "OLOTTO" ----> I see all ok

atempDbf:= oLotto:DbfToArray()

xbrowser atempDbf TITLE "ATEMPDBF" ---> I see all ok

oVirtuale:=TDatabase():Open( , cDir+"Virtuale", "DBFCDX", .T. )
oVirtuale:SetOrder( 0 )
oVirtuale:ArrayToDBF( atempDbf, cItemFlds , nil, .t., .t. ) ----> make error
oVirtuale:close()


Any solution pls
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)

I use : FiveWin for Harbour March-April 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Posts: 2706
Joined: Fri Oct 07, 2005 01:50 PM
Re: creation dbf with
Posted: Wed Oct 16, 2024 06:36 PM
Silvo

I use the array to create my database structure
xVol := "C"
Code (fw): Select all Collapse
DO WHILE .T.
   SITEDBF := "TEMP"+(SUBSTR(TIME(),7,2)+SUBSTR(TIME(),4,2))+".DBF"
   IF .not. FILE( xVol+"\DBTMP\"+SITEDBF )
      EXIT
   ENDIF
ENDDO

cName := "Opening Temp Table "+xVol+"\DBTMP\"+SITEDBF
oSay1:ReFresh()
SysReFresh()

DBF_STRU := { }
AADD( DBF_STRU, { "CUSTOMERID",   "C",  10,  0 } )
AADD( DBF_STRU, { "CUSTNAME",     "C",  50,  0 } )
AADD( DBF_STRU, { "SCEISID",      "C",  20,  0 } )
AADD( DBF_STRU, { "Date",         "D",   8,  0 } )
AADD( DBF_STRU, { "InvoiceTp",    "C",  20,  0 } )
AADD( DBF_STRU, { "InvNo",        "C",  10,  0 } )
AADD( DBF_STRU, { "BILLED",       "N",  12,  2 } )
AADD( DBF_STRU, { "PAID",         "N",  12,  2 } )
AADD( DBF_STRU, { "ADJUST",       "N",  12,  2 } )
AADD( DBF_STRU, { "CURRENT",      "N",  12,  2 } )
AADD( DBF_STRU, { "OVER30",       "N",  12,  2 } )
AADD( DBF_STRU, { "OVER60",       "N",  12,  2 } )
AADD( DBF_STRU, { "OVER90",       "N",  12,  2 } )
AADD( DBF_STRU, { "FINANCE",      "N",  12,  2 } )
AADD( DBF_STRU, { "TOTAL",        "N",  12,  2 } )
AADD( DBF_STRU, { "CurrDay",      "D",   8,  0 } )
AADD( DBF_STRU, { "Days",         "N",  10,  0 } )

DBCREATE( xVol+"\DBTMP\"+SITEDBF, DBF_STRU )
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: creation dbf with
Posted: Thu Oct 17, 2024 01:59 PM

Good morning Rick. Sorry for my stupidity, but I can't understand your function. Could you please make a complete example? Something's wrong, it's not right... I think... hahahaha.

Buenos días rick. Perdón por mi estupidez, pero no puedo entender su función. ¿Podrías hacer un ejemplo completo? Algo anda mal, no está bien... creo... jajajaja.

Gracias, tks.

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 2706
Joined: Fri Oct 07, 2005 01:50 PM
Re: creation dbf with
Posted: Thu Oct 17, 2024 08:38 PM
Karinha

this creates a unique database name to be created below
Code (fw): Select all Collapse
DO WHILE .T.
   SITEDBF := "TEMP"+(SUBSTR(TIME(),7,2)+SUBSTR(TIME(),4,2))+".DBF"
   IF .not. FILE( xVol+"\DBTMP\"+SITEDBF )
      EXIT
   ENDIF
ENDDO


DBF_STRU := { }  creates a blank array


these lines

create the array data structure

AADD( DBF_STRU, { "CUSTOMERID",   "C",  10,  0 } )
AADD( DBF_STRU, { "CUSTNAME",     "C",  50,  0 } )
AADD( DBF_STRU, { "SCEISID",      "C",  20,  0 } )
AADD( DBF_STRU, { "Date",         "D",   8,  0 } )
AADD( DBF_STRU, { "InvoiceTp",    "C",  20,  0 } )
AADD( DBF_STRU, { "InvNo",        "C",  10,  0 } )
AADD( DBF_STRU, { "BILLED",       "N",  12,  2 } )
AADD( DBF_STRU, { "PAID",         "N",  12,  2 } )
AADD( DBF_STRU, { "ADJUST",       "N",  12,  2 } )
AADD( DBF_STRU, { "CURRENT",      "N",  12,  2 } )
AADD( DBF_STRU, { "OVER30",       "N",  12,  2 } )
AADD( DBF_STRU, { "OVER60",       "N",  12,  2 } )
AADD( DBF_STRU, { "OVER90",       "N",  12,  2 } )
AADD( DBF_STRU, { "FINANCE",      "N",  12,  2 } )
AADD( DBF_STRU, { "TOTAL",        "N",  12,  2 } )
AADD( DBF_STRU, { "CurrDay",      "D",   8,  0 } )
AADD( DBF_STRU, { "Days",         "N",  10,  0 } )
this creates the temp database name generated above and
DBCREATE( xVol+"\DBTMP\"+SITEDBF, DBF_STRU ) // takes the array and creates the database


copy this code and you will see how the code works .. with a random name generated by the time() function and the array structure is created by another array DBF_STRU ..

Rick Lipkin
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: creation dbf with
Posted: Sat Oct 19, 2024 01:48 PM
Thanks Rick. Now I understand. I modified it a little, so beginners like me with little experience/intelligence can understand. I hope it doesn't bother you.

Gracias Rick. Ahora lo entiendo. Lo modifiqué un poco, para que los principiantes como yo con poca experiencia/inteligencia puedan entenderlo. Espero que no te moleste.
Code (fw): Select all Collapse
// Original by Rick Lipkin:
// https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45007&p=274888&sid=4fd10da1789049fb5a17e330f466a2c9#p274857

// C:\FWH\SAMPLES\RICKSTR.PRG
// MODIFIED by Kapiabafwh@gmail.com in: 19/10/2024 - João Santos. São Paulo - Brazil.

#include "FiveWin.ch"

FUNCTION Main()

   LOCAL xLocalDBF := "C:\TMP\" // .DBF Folder.
   LOCAL Dbf_Stru               // structure of .DBF.
   LOCAL cFileRick, cNameDBF    // NAME.DBF TEMPORARY

   HB_GCALL( .F. )

   WHILE( .T. )

      SYSREFRESH()

      cNameDBF := "TEMP" + ( SubStr( Time(), 7, 2 ) + ;
                             SubStr( Time(), 4, 2 ) ) + ".DBF"

      IF .NOT. FILE( xLocalDBF + cNameDBF )

         EXIT

      ENDIF

   ENDDO

   Dbf_Stru := {}  // creates a blank array

   // these lines
   // create the array data structure
   AADD( Dbf_Stru, { "CUSTOMERID",   "C",  10,  0 } )
   AADD( Dbf_Stru, { "CUSTNAME",     "C",  50,  0 } )
   AADD( Dbf_Stru, { "SCEISID",      "C",  20,  0 } )
   AADD( Dbf_Stru, { "Date",         "D",  08,  0 } )
   AADD( Dbf_Stru, { "InvoiceTp",    "C",  20,  0 } )
   AADD( Dbf_Stru, { "InvNo",        "C",  10,  0 } )
   AADD( Dbf_Stru, { "BILLED",       "N",  12,  2 } )
   AADD( Dbf_Stru, { "PAID",         "N",  12,  2 } )
   AADD( Dbf_Stru, { "ADJUST",       "N",  12,  2 } )
   AADD( Dbf_Stru, { "CURRENT",      "N",  12,  2 } )
   AADD( Dbf_Stru, { "OVER30",       "N",  12,  2 } )
   AADD( Dbf_Stru, { "OVER60",       "N",  12,  2 } )
   AADD( Dbf_Stru, { "OVER90",       "N",  12,  2 } )
   AADD( Dbf_Stru, { "FINANCE",      "N",  12,  2 } )
   AADD( Dbf_Stru, { "TOTAL",        "N",  12,  2 } )
   AADD( Dbf_Stru, { "CurrDay",      "D",  08,  0 } )
   AADD( Dbf_Stru, { "Days",         "N",  10,  0 } )

   DBCREATE( xLocalDBF + cNameDBF, Dbf_Stru )

   cFileRick := cNameDBF

   IF FILE( xLocalDBF + cFileRick )

      MsgInfo( "New .dbf file created successfully! -->" + cNameDBF, ;
               "New .dbf file created successfully! -->" + cNameDBF)

   ELSE

      MsgInfo( ".DBF file was not created. Fatal error!", ;
               ".DBF file was not created. Fatal error!" )

   ENDIF

   HB_GCALL( .T. )

RETURN NIL

// FIN / END - kapiabafwh@gmail.com
Gracias. tks.

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: creation dbf with
Posted: Sat Oct 19, 2024 02:17 PM
Code (fw): Select all Collapse
atempDbf := oLotto:DbfToArray( cItemFlds )
oVirtuale:ArrayToDBF( atempDbf, ... )
But, the best method is:
Code (fw): Select all Collapse
USE VIRTUALE
APPEND FROM LOTTO
Regards



G. N. Rao.

Hyderabad, India

Continue the discussion