Oh es 15 millones, y que datos guardas ahi, y si lo separas por meses y años por archivos?Saludos
VFP Unlimited - Canal de Youtube
PROCEDURE Leer
LPARAMETERS tcFileName
TRY
LOCAL i,;
lcLinea,;
lnHandle,;
lnLines,;
loex AS Exception
LOCAL ARRAY laLines(1)
lnHandle = FOPEN(m.tcFileName,0)
IF lnHandle # -1
*=FSEEK(m.lnHandle,0,0) && se necesita si antes se movió el puntero
lcLinea=FGETS(m.lnHandle,8192) && salta encabezado
DO WHILE !FEOF(m.lnHandle)
lcLinea = FGETS(m.lnHandle,8192)
IF !EMPTY(m.lcLinea)
lnLines = ALINES(laLines,m.lcLinea,1+2,CHR(9))
FOR i = 1 TO m.lnLines
* Operaciones con laLines[i]
NEXT
ENDIF
ENDDO
ENDIF
CATCH TO loex
loex.UserValue = PROGRAM()
* ShowError(loex) && muestra el error
FINALLY
IF m.lnHandle # -1
FCLOSE(m.lnHandle)
ENDIF
ENDTRYAunque un arreglo de vfp puede manejar 2 gb de elementos, eso se da en vfp 9 y no anteriores, además tienes que tener memoria RAM suficiente para manejar ese volumen de datos (15 millones por 20 bytes ya supera lo que puede direccionar el Windows).Tal como te sugirieron, vas a tener que pasar los datos a un SGBD externo ya que las dbf no lo soportan. Sugiero Firebird, por lo simple de instalar, SQLite, aguantaría el volumen de datos pero la inserción sería en extremo muy lenta.También puedes usar postgresql, que es libre en todas las versiones, y esa cantidad de registros cae en su rango de tablas casi medianas.Saludos: Miguel, La Pampa (RA)Larga Vida y ProsperidadQue la Fuerza los acompañe
El 25 de mayo de 2017, 19:27, ZeRoberto <zero...@gmail.com> escribió:
Oh es 15 millones, y que datos guardas ahi, y si lo separas por meses y años por archivos?Saludos
VFP Unlimited - Canal de Youtube
*****************************************************************************************
* PROCEDURE....: ReduceMemory()
* Author......: Bernard Bout
* Date........: 05/12/2007 3:03:15 PM
* Returns.....:
* Parameters..:
* Notes.......: reduces memory usage for vfp
*****************************************************************************************
PROCEDURE ReduceMemory()
Declare Integer SetProcessWorkingSetSize In kernel32 As SetProcessWorkingSetSize ;
Integer hProcess , ;
Integer dwMinimumWorkingSetSize , ;
Integer dwMaximumWorkingSetSize
Declare Integer GetCurrentProcess In kernel32 As GetCurrentProcess
nProc = GetCurrentProcess()
bb = SetProcessWorkingSetSize(nProc,-1,-1)
ENDPROCAh yo pensaba que cargabas un bloque de datos ahí y después hacías el insert
VFP Unlimited - Canal de Youtube