FoxPro/Visual FoxPro - Grabar Registro es Lento

 
Vista:
sin imagen de perfil

Grabar Registro es Lento

Publicado por victor perez (137 intervenciones) el 21/01/2014 23:25:16
Estimados Amigos,

Tenia mi programa trabajando a la perfeccion.

En los ultimos dias, he visto que el grabar un nuevo registro de paciente se torna lento, es decir, demora al presionar el boton de GRABAR.

El codigo para grabar nuevos registros es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
IF EMPTY(Thisform.pgfficha.page1.snacimiento.Value)
       MESSAGEBOX("Debe introducir una FECHA DE NACIMIENTO", "AVISO")
       Thisform.pgfFicha.page1.snacimiento.SetFocus
       RETURN 0
 ENDIF
 
    m.lastorder=DATE()
    m.totinv=0.0
    m.totpmt=0.0
    m.balance=0.0
 
 
 
	TEXT TO XSQL TEXTMERGE NOSHOW
	INSERT INTO CLINICA.PATIENT (CODIGO,NUMERO,NOMBRES,APELLIDOS,DIRECCION,NACIMIENTO,CEDULA,SEGURO,SEXO,TELEFONO,CELULAR,PROFESION,EMAIL,OBS,
	trabajo,teltrab,firstorder,lastorder,SITUACION,totinv,totpmt,balance,openby)
	VALUES (?m.codigo,?_doc,?m.nombres,?m.apellidos,?m.direccion,?m.nacimiento,?m.cedula,?m.seguro,?m.sexo,?m.telefono,?m.celular,?m.profesion,?m.email,?m.obs,?m.trabajo,?m.teltrab,?m.lastorder,?m.lastorder,?" ",0,0,0,?Wuser)
	ENDTEXT
 
	THISFORM.CONECTA
	SQLEXEC(LNHANDLE,XSQL)
	SQLDISCONNECT(LNHANDLE)

Alguna sugerencia. La tabla de pacientes solo tiene 33,000 registros.

Saludos,
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Grabar Registro es Lento

Publicado por Saul (728 intervenciones) el 22/01/2014 02:03:51
Pues no se ve nada raro..

Lo unico que te comento que yo hago la Conexion, al nicio
y la cierro cuando cierro el sistema.

Para evitar estar conectandome y desconectandome de la data.

Pruebalo creo que por alli esta el error

saludos

Sha
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Grabar Registro es Lento

Publicado por VICTOR PEREZ (137 intervenciones) el 22/01/2014 23:38:25
Hola Saul,

Gracias por tu comentario. Hoy cambie todo el sistema de manera que se abre la conexion al iniciar y se cierra solamente cuando se sale del sistema.

En realidad la dificultad grande que tengo es cuando quiero buscar un paciente por una porcion del apellido, o por una porcion del nombre o por una porcion del nombre y una porcion del apellido.

Alli demora bastante.


SQLEXEC(LNHANDLE,"sELECT * FROM PATIENT WHERE APELLIDOS LIKE '%_KEY%","_ALMPAT")


Otro problema con el que he venido lidiando es con el formulario de Servicios....cuando busco un servicio y lo edito, a pesar de presionar GRABAR no se graba la actualizacion. Esto me tiene loco porque no encuentro el por que.

Pero si salgo del formulario y lo corro nuevamente, entonces no tengo problemas al hacer la edicion de un registro.

ESto solo me pasa en el modulo de servicios, y no se donde está el error.

Saludos,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
If _Nuevo
   TEXT TO XSQL TEXTMERGE NOSHOW
   INSERT INTO SERVICE (CA_NOMBRE,CA_CODIGO,COSTO,OBS,CA_PRECIO,STOCK_MIN,REORDER,TIPO,COM1,COM2,COM3,COM4,COM5,PROVEEDOR,SITUACION,STOCK_aCT)
   VALUES(?M.CA_NOMBRE,?M.CA_CODIGO,?M.COSTO,?M.OBS,?M.CA_PRECIO,?M.STOCK_MIN,?M.REORDER,?M.TIPO,?M.COM1,?M.COM2,?M.COM3,?M.COM4,?M.COM5,?M.PROVEEDOR,' ',0)
   ENDTEXT
 
   *THISFORM.CONECTA
   SQLEXEC(LNHANDLE,XSQL)
  * SQLDISCONNECT(LNHANDLE)
 
Else
   TEXT TO XSQL TEXTMERGE NOSHOW
   UPDATE SERVICE SET CA_NOMBRE=?M.CA_NOMBRE,COSTO=?M.COSTO,CA_PRECIO=?M.CA_PRECIO,STOCK_MIN=?M.STOCK_MIN,REORDER=?M.REORDER,TIPO=?M.TIPO,PROVEEDOR=?M.PROVEEDOR,COM1=?M.COM1,COM2=?M.COM2,COM3=?M.COM3,COM4=?M.COM4,COM5=?M.COM5,OBS=?M.OBS,SITUACION=' ' WHERE CA_CODIGO=?THISFORM.PGFFICHA.PAGE1.SCODIGO.Value
   ENDTEXT
 
   *THISFORM.CONECTA
   SQLEXEC(LNHANDLE,XSQL)
   *SQLDISCONNECT(LNHANDLE)
ENDIF
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Grabar Registro es Lento

Publicado por Saul (728 intervenciones) el 23/01/2014 00:44:43
Hola Victor..

Veo que tu problema no es mas que de INDICES (Si haz leido lago de indices de MYSQL )??

pues que al buscar por nombre o apellido, deveria ser sumamente rapido
te dejo un link para que veras.

http://boozox.net/mysql/20-consejos-para-mejorar-tu-mysql-que-quizas-no-conocias/

Con esto te aseguro que tus indices queran full, y no tendras problema alguno con tus busquedas.

Ahora bien con lo de tu actulizacion, pasa lo mismo, puesto que buscar un registro para poderlo actulizarlo.
indexa de la misma manera este registro para poder actulizarlo.

conseo yo no uso los datos propios de Visual Fox pra actulizar

nCampoLLave = Thisform.micapoPrimario.value


UPDATE miTabla SET campo1 = ?m.campo1
campo2 = ?m.campo2
WHERE micampollave = ?nCampoLlave

Suerte

Sha
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Grabar Registro es Lento

Publicado por victor perez (137 intervenciones) el 24/01/2014 15:37:01
Hola Saul,

Efectivamente mis tablas estan indexadas por primary key y otras son Multi (apellidos, nombres)

Cambie el sistema para que la conexion se haga al entrar y se cierre solo al salir, pero nada, sigue lento al intentar grabar un nuevo registro en el modulo de pacientes. Esto solo ocurre en ese modulo, en los otros no ocurre nada similar.

Sigo con el problema al querer actualizar un registro a pesar de haber hecho los cambios que me sugeriste.

Normalmente no uso nomenclatura de VFP para las variables sino que lo guardo en una variable, que es la que luego llevo a MYSQL.

Ejemplo:

_nombre= thisform.nombres.value
_apellido= Thisform.apellido.value

etc...y en Mysql solo llevo las variables _nombre y _apellido.

Si tienes otra sugerencia, agradecido.

Saludos,


Victor
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Grabar Registro es Lento

Publicado por victor perez (137 intervenciones) el 24/01/2014 16:12:23
hOLA,

hICE LOS cambios en el modulo de servicios, y el problema persiste, no me edita

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
If Empty(thisform.pgfFicha.page1.sCodigo.VALUE)
   MessageBox('No puede Dejar Código del Servicio en Blanco',"< A V I S O >")
   Thisform.pgfFicha.page1.scodigo.setfocus
   Return 0
Endif
 
_CODIGO=THISFORM.PGFFICHA.PAGE1.SCODIGO.Value
_NOMBRE=THISFORM.PGFFICHA.PAGE1.TXTNOMBRE.VALUE
_COSTO=THISFORM.PGFFICHA.PAGE1.TXTCOSTO.Value
_OBS=THISFORM.PGFFICHA.PAGE1.TXTOBS.VALUE
_PRECIO=THISFORM.PGFFICHA.PAGE1.TXTPRECIO.VALUE
_STOCK_MIN=THISFORM.PGFFICHA.PAGE1.TXTSTOCK_MIN.VALUE
_REORDER=THISFORM.PGFFICHA.PAGE1.TXTREORDER.VALUE
_TIPO=THISFORM.PGFFICHA.PAGE1.CMBTIPO.VALUE
_COM1=THISFORM.PGFFICHA.PAGE1.TXTCOM1.VALUE
_COM2=THISFORM.PGFFICHA.PAGE1.TXTCOM2.VALUE
_COM3=THISFORM.PGFFICHA.PAGE1.TXTCOM3.VALUE
_COM4=THISFORM.PGFFICHA.PAGE1.TXTCOM4.VALUE
_COM5=THISFORM.PGFFICHA.PAGE1.TXTCOM5.VALUE
_PROVEEDOR=THISFORM.PGFFICHA.PAGE1.CMBPROVEEDOR.VALUE
 
If _Nuevo
   TEXT TO XSQL TEXTMERGE NOSHOW
   INSERT INTO SERVICE (CA_NOMBRE,CA_CODIGO,COSTO,OBS,CA_PRECIO,STOCK_MIN,REORDER,TIPO,COM1,COM2,COM3,COM4,COM5,PROVEEDOR,SITUACION,STOCK_aCT)
   VALUES(?_NOMBRE,?_CODIGO,?_COSTO,?_OBS,?_PRECIO,?_STOCK_MIN,?_REORDER,?_TIPO,?_COM1,?_COM2,?_COM3,?_COM4,?_COM5,?_PROVEEDOR,' ',0)
   ENDTEXT
 
   *THISFORM.CONECTA
   SQLEXEC(LNHANDLE,XSQL)
  * SQLDISCONNECT(LNHANDLE)
 
Else
   TEXT TO XSQL TEXTMERGE NOSHOW
   UPDATE SERVICE SET CA_NOMBRE=?_NOMBRE,COSTO=?_COSTO,CA_PRECIO=?_PRECIO,STOCK_MIN=?_STOCK_MIN,REORDER=?_REORDER,TIPO=?_TIPO,PROVEEDOR=?_PROVEEDOR,COM1=?_COM1,COM2=?_COM2,COM3=?_COM3,COM4=?_COM4,COM5=?_COM5,OBS=?_OBS WHERE CA_CODIGO=?_CODIGO
   ENDTEXT
 
   *THISFORM.CONECTA
   SQLEXEC(LNHANDLE,XSQL)
   *SQLDISCONNECT(LNHANDLE)
ENDIF
 
 
 
Thisform.TextOff
thisform.pgfFicha.page1.sCodigo.enabled=.f.
_Nuevo=.f.
thisform.pgfFicha.page2.enabled=.t.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Grabar Registro es Lento

Publicado por victor perez (137 intervenciones) el 24/01/2014 20:37:17
Hola,

Las tablas estan bien indexadas. He hecho pruebas directo a las tablas mediante busquedas y el tiempo de respuesta es correcto.

Tambien vacie la tabla de pacientes (la borre enteramente para prueba) y trate de agregar un resgistro y efectivamente trabaja a la perfeccion...el problema es cuando añado a la tabla original de 33,000 registros (tiempo de espera es mayor).

Con respecto al modulo de servicios, todavia no encuentro el por que no me actualiza la primera vez que lo intento. Para lograrlo, cierro el formulario y luego lo vuelvo a abrir y efectivamente puedo actualizar lo que deseo. Algo extraño.

Si hay alguna sugerencia, bienvenida


Victor,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar