Ayuda, me consume toda la memoria
Publicado: Mié Jun 25, 2008 12:47 pm
Hola a todos
Tengo un formularia para poder importar de una dbf a mysql pero me consume
toda la memoria cuando llega alrededor de 2000 registros, y el programa da
un error de windows
Alguien saber como poder hacerlo de forma mas optimizada ò para que no
consuma toda, he probado a cerrar las tablñas y abrilas despues de cada
update pero so surte efecto
Gracias
METHOD BtnImportarClick( oSender ) CLASS FrmImportar
Local nContrato := 0
Local nPersonal := 0
Local nPersonalOmitido := 0
Local nContratoOmitido := 0
Local ECivil
Local Nacionalidad
Local Sexo
Local cVar
oSender:lEnabled := .F.
WITH OBJECT ::oSQLTablePersonal
:oDataSource:= AppData:oServer
:cTableName := "PERSONAL"
:nMaxRecords:= 0
:nLockType := adLockOptimistic
:lOpen := .T.
END WITH
WITH OBJECT ::oSQLTableContrato
:oDataSource:= AppData:oServer
:cTableName := "CONTRATOS"
:nMaxRecords:= 0
:nLockType := adLockOptimistic
:lOpen := .T.
END WITH
WITH OBJECT ::oDbfDataSet1
:GoTop()
While !:Eof()
If !(::oSQLTableContrato:Locate("ORDEN=" +
AllTrim(:aFields[2]:Value)))
::oSQLTableContrato:AddNew()
::oSQLTableContrato:NIF := AllTrim(:aFields[8]:Value)
::oSQLTableContrato:ORDEN := AllTrim(:aFields[2]:Value)
::oSQLTableContrato:TIPOCONTRATO := AllTrim(:aFields[27]:Value)
::oSQLTableContrato:FECHAALTA :=
CtoD(AllTrim(:aFields[4]:Value))
::oSQLTableContrato:FECHABAJA :=
CtoD(AllTrim(:aFields[46]:Value))
::oSQLTableContrato:CAUSA := AllTrim(:aFields[42]:Value)
::oSQLTableContrato:CODIGOCONTRA := AllTrim(:aFields[22]:Value)
::oSQLTableContrato:CATEGORIA := AllTrim(:aFields[29]:Value)
::oSQLTableContrato:CODCATEGORIA := AllTrim(:aFields[28]:Value)
::oSQLTableContrato:VENCPRUEBA :=
CtoD(AllTrim(:aFields[24]:Value))
::oSQLTableContrato:LETRACONTRA := AllTrim(:aFields[26]:Value)
//
::oSQLTableContrato:CENTRO := AllTrim(:aFields[35]:Value)
::oSQLTableContrato:CODCENTRO := AllTrim(:aFields[36]:Value)
::oSQLTableContrato:COEPAGAS := AllTrim(:aFields[34]:Value)
::oSQLTableContrato:BAREMO := AllTrim(:aFields[32]:Value)
::oSQLTableContrato:EMPRESA := AllTrim(:aFields[45]:Value)
::oSQLTableContrato:DELEGACION := AllTrim(:aFields[1]:Value)
::oSQLTableContrato:CUENTACOTIZA := AllTrim(:aFields[44]:Value)
::oSQLTableContrato:CODBAJA := AllTrim(:aFields[41]:Value)
::oSQLTableContrato:JDA := AllTrim(:aFields[33]:Value)
::oSQLTableContrato:GRCOTIZA := AllTrim(:aFields[31]:Value)
::oSQLTableContrato:GRANTIGUEDA := AllTrim(:aFields[30]:Value)
::oSQLTableContrato:DURACIONBAJA := AllTrim(:aFields[43]:Value)
::oSQLTableContrato:FECHAVENCON :=
CtoD(AllTrim(:aFields[23]:Value))
::oSQLTableContrato:UpDate()
nContrato++
::oNoContrato:Value := nContrato
Else
nContratoOmitido++
::oNoContratoOmitido:Value := nContratoOmitido
EndIf
//---------------------------------------------------------
If !(::oSQLTablePersonal:Locate("NIF='" +
AllTrim(:aFields[8]:Value) +"'"))
::oSQLTablePersonal:AddNew()
::oSQLTablePersonal:NIF := AllTrim(:aFields[8]:Value)
::oSQLTablePersonal:AFILIACION := AllTrim(:aFields[7]:Value)
//
::oSQLTablePersonal:APELLIDOS :=
AllTrim(SubStr(:aFields[3]:Value, 1 , AT
("$",:aFields[3]:Value) -1 )) + " " + AllTrim(SubStr(:aFields[3]:Value, AT
("$",:aFields[3]:Value)+1,
(AT(",",:aFields[3]:Value)-AT("$",:aFields[3]:Value) -
1) ))
::oSQLTablePersonal:NOMBRE :=
AllTrim(SubStr(:aFields[3]:Value, AT(",",:aFields
[3]:Value)+1, Len(:aFields[3]:Value) ))
::oSQLTablePersonal:VIA := AllTrim(:aFields[16]:Value)
//
::oSQLTablePersonal:DOMICILIO := AllTrim(:aFields[17]:Value)
;
+", "+
AllTrim(:aFields[18]:Value) // Domicilio
::oSQLTablePersonal:Codigo_Postal:= AllTrim(:aFields[19]:Value)
//
::oSQLTablePersonal:POBLACION := AllTrim(:aFields[20]:Value)
//
::oSQLTablePersonal:PROVINCIA := AllTrim(:aFields[21]:Value)
//
::oSQLTablePersonal:Fecha_Nacimiento :=
CtoD(AllTrim(:aFields[9]:Value)) //
::oSQLTablePersonal:POBLACION_N := AllTrim(:aFields[10]:Value)
//
::oSQLTablePersonal:PROVINCIA_N := AllTrim(:aFields[14]:Value)
//
::oSQLTablePersonal:NOMBRE_P := AllTrim(:aFields[5]:Value)
//
::oSQLTablePersonal:NOMBRE_M := AllTrim(:aFields[6]:Value)
//
::oSQLTablePersonal:TELEFONO_1 := AllTrim(:aFields[15]:Value)
//
Do Case
Case AllTrim(:aFields[13]:Value) = "V"
::oSQLTablePersonal:SEXO := "Varon"
Case AllTrim(:aFields[13]:Value) = "M"
::oSQLTablePersonal:SEXO := "Mujer"
EndCase
::oSQLTablePersonal:Numero_Hijos :=
AllTrim(:aFields[37]:Value) //
Do Case
Case AllTrim(:aFields[11]:Value) = "C"
::oSQLTablePersonal:Estado_C := "Casado/a"
Case AllTrim(:aFields[11]:Value) = "S"
::oSQLTablePersonal:Estado_C := "Soltero/a"
Case AllTrim(:aFields[11]:Value) = "D"
::oSQLTablePersonal:Estado_C := "Divorciado/a"
Case AllTrim(:aFields[11]:Value) = "X"
::oSQLTablePersonal:Estado_C := "P. Hecho"
Case AllTrim(:aFields[11]:Value) = "V"
::oSQLTablePersonal:Estado_C := "Viudo/a"
EndCase
Do Case
Case AllTrim(:aFields[12]:Value) = "ESP"
::oSQLTablePersonal:Nacionalidad := "España"
Case AllTrim(:aFields[12]:Value) = "ITA"
::oSQLTablePersonal:Nacionalidad := "Italia"
Case AllTrim(:aFields[12]:Value) = "MAR"
::oSQLTablePersonal:Nacionalidad := "Marruecos"
EndCase
::oSQLTablePersonal:FechaEA :=
CtoD(AllTrim(:aFields[25]:Value)) //
::oSQLTablePersonal:Numero_Banco := AllTrim(:aFields[47]:Value)
//
::oSQLTablePersonal:Numero_Oficina:= AllTrim(:aFields[39]:Value)
//
::oSQLTablePersonal:Cuenta_Banco := AllTrim(:aFields[38]:Value)
//
::oSQLTablePersonal:DC := AllTrim(:aFields[40]:Value)
//
::oSQLTablePersonal:UpDate()
nPersonal++
::oNoPersonal:Value := nPersonal
Else
nPersonalOmitido++
::oNoPersonalOmitido:Value := nPersonalOmitido
EndIf
::oProgressBar:nValue := :Recno()
:Skip(1)
EndDo
END
RETURN Nil
Tengo un formularia para poder importar de una dbf a mysql pero me consume
toda la memoria cuando llega alrededor de 2000 registros, y el programa da
un error de windows
Alguien saber como poder hacerlo de forma mas optimizada ò para que no
consuma toda, he probado a cerrar las tablñas y abrilas despues de cada
update pero so surte efecto
Gracias
METHOD BtnImportarClick( oSender ) CLASS FrmImportar
Local nContrato := 0
Local nPersonal := 0
Local nPersonalOmitido := 0
Local nContratoOmitido := 0
Local ECivil
Local Nacionalidad
Local Sexo
Local cVar
oSender:lEnabled := .F.
WITH OBJECT ::oSQLTablePersonal
:oDataSource:= AppData:oServer
:cTableName := "PERSONAL"
:nMaxRecords:= 0
:nLockType := adLockOptimistic
:lOpen := .T.
END WITH
WITH OBJECT ::oSQLTableContrato
:oDataSource:= AppData:oServer
:cTableName := "CONTRATOS"
:nMaxRecords:= 0
:nLockType := adLockOptimistic
:lOpen := .T.
END WITH
WITH OBJECT ::oDbfDataSet1
:GoTop()
While !:Eof()
If !(::oSQLTableContrato:Locate("ORDEN=" +
AllTrim(:aFields[2]:Value)))
::oSQLTableContrato:AddNew()
::oSQLTableContrato:NIF := AllTrim(:aFields[8]:Value)
::oSQLTableContrato:ORDEN := AllTrim(:aFields[2]:Value)
::oSQLTableContrato:TIPOCONTRATO := AllTrim(:aFields[27]:Value)
::oSQLTableContrato:FECHAALTA :=
CtoD(AllTrim(:aFields[4]:Value))
::oSQLTableContrato:FECHABAJA :=
CtoD(AllTrim(:aFields[46]:Value))
::oSQLTableContrato:CAUSA := AllTrim(:aFields[42]:Value)
::oSQLTableContrato:CODIGOCONTRA := AllTrim(:aFields[22]:Value)
::oSQLTableContrato:CATEGORIA := AllTrim(:aFields[29]:Value)
::oSQLTableContrato:CODCATEGORIA := AllTrim(:aFields[28]:Value)
::oSQLTableContrato:VENCPRUEBA :=
CtoD(AllTrim(:aFields[24]:Value))
::oSQLTableContrato:LETRACONTRA := AllTrim(:aFields[26]:Value)
//
::oSQLTableContrato:CENTRO := AllTrim(:aFields[35]:Value)
::oSQLTableContrato:CODCENTRO := AllTrim(:aFields[36]:Value)
::oSQLTableContrato:COEPAGAS := AllTrim(:aFields[34]:Value)
::oSQLTableContrato:BAREMO := AllTrim(:aFields[32]:Value)
::oSQLTableContrato:EMPRESA := AllTrim(:aFields[45]:Value)
::oSQLTableContrato:DELEGACION := AllTrim(:aFields[1]:Value)
::oSQLTableContrato:CUENTACOTIZA := AllTrim(:aFields[44]:Value)
::oSQLTableContrato:CODBAJA := AllTrim(:aFields[41]:Value)
::oSQLTableContrato:JDA := AllTrim(:aFields[33]:Value)
::oSQLTableContrato:GRCOTIZA := AllTrim(:aFields[31]:Value)
::oSQLTableContrato:GRANTIGUEDA := AllTrim(:aFields[30]:Value)
::oSQLTableContrato:DURACIONBAJA := AllTrim(:aFields[43]:Value)
::oSQLTableContrato:FECHAVENCON :=
CtoD(AllTrim(:aFields[23]:Value))
::oSQLTableContrato:UpDate()
nContrato++
::oNoContrato:Value := nContrato
Else
nContratoOmitido++
::oNoContratoOmitido:Value := nContratoOmitido
EndIf
//---------------------------------------------------------
If !(::oSQLTablePersonal:Locate("NIF='" +
AllTrim(:aFields[8]:Value) +"'"))
::oSQLTablePersonal:AddNew()
::oSQLTablePersonal:NIF := AllTrim(:aFields[8]:Value)
::oSQLTablePersonal:AFILIACION := AllTrim(:aFields[7]:Value)
//
::oSQLTablePersonal:APELLIDOS :=
AllTrim(SubStr(:aFields[3]:Value, 1 , AT
("$",:aFields[3]:Value) -1 )) + " " + AllTrim(SubStr(:aFields[3]:Value, AT
("$",:aFields[3]:Value)+1,
(AT(",",:aFields[3]:Value)-AT("$",:aFields[3]:Value) -
1) ))
::oSQLTablePersonal:NOMBRE :=
AllTrim(SubStr(:aFields[3]:Value, AT(",",:aFields
[3]:Value)+1, Len(:aFields[3]:Value) ))
::oSQLTablePersonal:VIA := AllTrim(:aFields[16]:Value)
//
::oSQLTablePersonal:DOMICILIO := AllTrim(:aFields[17]:Value)
;
+", "+
AllTrim(:aFields[18]:Value) // Domicilio
::oSQLTablePersonal:Codigo_Postal:= AllTrim(:aFields[19]:Value)
//
::oSQLTablePersonal:POBLACION := AllTrim(:aFields[20]:Value)
//
::oSQLTablePersonal:PROVINCIA := AllTrim(:aFields[21]:Value)
//
::oSQLTablePersonal:Fecha_Nacimiento :=
CtoD(AllTrim(:aFields[9]:Value)) //
::oSQLTablePersonal:POBLACION_N := AllTrim(:aFields[10]:Value)
//
::oSQLTablePersonal:PROVINCIA_N := AllTrim(:aFields[14]:Value)
//
::oSQLTablePersonal:NOMBRE_P := AllTrim(:aFields[5]:Value)
//
::oSQLTablePersonal:NOMBRE_M := AllTrim(:aFields[6]:Value)
//
::oSQLTablePersonal:TELEFONO_1 := AllTrim(:aFields[15]:Value)
//
Do Case
Case AllTrim(:aFields[13]:Value) = "V"
::oSQLTablePersonal:SEXO := "Varon"
Case AllTrim(:aFields[13]:Value) = "M"
::oSQLTablePersonal:SEXO := "Mujer"
EndCase
::oSQLTablePersonal:Numero_Hijos :=
AllTrim(:aFields[37]:Value) //
Do Case
Case AllTrim(:aFields[11]:Value) = "C"
::oSQLTablePersonal:Estado_C := "Casado/a"
Case AllTrim(:aFields[11]:Value) = "S"
::oSQLTablePersonal:Estado_C := "Soltero/a"
Case AllTrim(:aFields[11]:Value) = "D"
::oSQLTablePersonal:Estado_C := "Divorciado/a"
Case AllTrim(:aFields[11]:Value) = "X"
::oSQLTablePersonal:Estado_C := "P. Hecho"
Case AllTrim(:aFields[11]:Value) = "V"
::oSQLTablePersonal:Estado_C := "Viudo/a"
EndCase
Do Case
Case AllTrim(:aFields[12]:Value) = "ESP"
::oSQLTablePersonal:Nacionalidad := "España"
Case AllTrim(:aFields[12]:Value) = "ITA"
::oSQLTablePersonal:Nacionalidad := "Italia"
Case AllTrim(:aFields[12]:Value) = "MAR"
::oSQLTablePersonal:Nacionalidad := "Marruecos"
EndCase
::oSQLTablePersonal:FechaEA :=
CtoD(AllTrim(:aFields[25]:Value)) //
::oSQLTablePersonal:Numero_Banco := AllTrim(:aFields[47]:Value)
//
::oSQLTablePersonal:Numero_Oficina:= AllTrim(:aFields[39]:Value)
//
::oSQLTablePersonal:Cuenta_Banco := AllTrim(:aFields[38]:Value)
//
::oSQLTablePersonal:DC := AllTrim(:aFields[40]:Value)
//
::oSQLTablePersonal:UpDate()
nPersonal++
::oNoPersonal:Value := nPersonal
Else
nPersonalOmitido++
::oNoPersonalOmitido:Value := nPersonalOmitido
EndIf
::oProgressBar:nValue := :Recno()
:Skip(1)
EndDo
END
RETURN Nil