FoxPro/Visual FoxPro - Boton Guardar en Visual Fox Pro

 
Vista:
sin imagen de perfil

Boton Guardar en Visual Fox Pro

Publicado por kendri (1 intervención) el 27/09/2014 14:32:06
Hola! soy un joven programador y quisiera que me asisitieran con esto mi boton guardar esta todo bien y todo bien pero cuando reviso la tabla se nota que tiene espacios en blanco y que mis datos estan muy abajo quisiera que desapareciaran esos espacios en blanco y poner el orden de la tabla normal me ayudan? este es mi codigo

SELECT tablak
PUBLIC tablak

codigo = thisform.txtCodigo.value
locate for alltrim(codigo)==alltr(thisform.txtCodigo.Value)
IF FOUND() then
MESSAGEBOX ("Codigo ya existe", 0, " Alerta ")
thisform.txtCodigo.SetFocus
ELSE
APPEND BLANK
Replace codigo with thisform.txtCodigo.Value
Replace nombre with thisform.txtNombre.Value
replace edad WITH thisform.txtEdad.Value
replace curso WITH thisform.txtCurso.Value
replace seccion WITH thisform.txtSeccion.Value

thisform.txtCodigo.value = ""
thisform.txtNombre.value = ""
thisform.txtEdad.value = ""
thisform.txtCurso.value = ""
thisform.txtSeccion.value = ""
thisform.txtCodigo.SetFocus
thisform.Refresh
ENDIF
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

Boton Guardar en Visual Fox Pro

Publicado por Mauricio (45 intervenciones) el 27/09/2014 14:43:31
Quita el APPEND BLANK, se supone que existe un boton NUEVO, alli le das el APPEND BLANK.


SELECT tablak
PUBLIC tablak
*
codigo = thisform.txtCodigo.value
locate for alltrim(codigo)==alltr(thisform.txtCodigo.Value)
IF FOUND() then
....MESSAGEBOX ("Codigo ya existe", 0, " Alerta ")
....thisform.txtCodigo.SetFocus
ELSE
....Replace codigo with thisform.txtCodigo.Value, ;
........nombre with Thisform.txtNombre.Value, edad WITHthisform.txtEdad.Value, ;
........curso WITH thisform.txtCurso.Value, seccion WITH thisform.txtSeccion.Value
*
...STORE '' TO thisform.txtCodigo.value, thisform.txtNombre.value, ;
........thisform.txtEdad.value, thisform.txtCurso.value, thisform.txtSeccion.value
...thisform.txtCodigo.SetFocus
...thisform.Refresh
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
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Boton Guardar en Visual Fox Pro

Publicado por Fidel José (558 intervenciones) el 27/09/2014 15:38:33
Un poco más prolijo.

1) Por qué PUBLIC tablak?
2) La llamada al método Thisform.refresh debe ocurrir lo menos posible, y en general, nunca. En este caso, al no haber controles liados por ControlSource, thisform.refresh no se necesita porque estás asignando directamente la propiedad .Value. Reserva Refresh para los controles que utilicen ControlSource y en lo posible, pide el refresh de cada control que lo necesite y no de todo el formulario.
3) En lugar de Append Blank / Replace, utiliza INSERT INTO. Estudia este comando que te librará de muchos problemas en el futuro. Además, es más rápido.
4) Si necesitas utilizar, por lo que fuere, una serie de sentencias replace, por ejemplo:

En lugar de esta escritura:
Replace codigo with thisform.txtCodigo.Value
Replace nombre with thisform.txtNombre.Value
replace edad WITH thisform.txtEdad.Value
replace curso WITH thisform.txtCurso.Value
replace seccion WITH thisform.txtSeccion.Value

utiliza esta forma, con un solo REPLACE. Será mucho más rápido porque habrá solo una verificación de estado de bloqueo del registro.
Replace codigo with thisform.txtCodigo.Value,;
nombre with thisform.txtNombre.Value,;
edad WITH thisform.txtEdad.Value,;
curso WITH thisform.txtCurso.Value,;
seccion WITH thisform.txtSeccion.Value

Esta será todavía más rápida porque no necesita buscar la referencia de objeto en cada replace. Agrupa las referencias comunes.
1
2
3
4
5
6
7
8
WITH thisform
Replace codigo with .txtCodigo.Value,;
	nombre with .txtNombre.Value,;
	edad WITH .txtEdad.Value,;
	curso WITH .txtCurso.Value,;
	seccion WITH .txtSeccion.Value
 
ENDWITH

Con Insert Into, tu código quedaría así.
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
SELECT tablak
*!*	PUBLIC tablak
LOCAL lcCodigo
lcCodigo =ALLTRIM(thisform.txtCodigo.value)
locate for alltrim(codigo)==lcCodigo
IF FOUND() then
	MESSAGEBOX ("Codigo ya existe", 0, " Alerta ")
 
ELSE
	INSERT INTO TABLAK ;
		(CODIGO,;
		NOMBRE,;
		EDAD,;
		CURSO,;
		SECCION);
	VALUES(lcCodigo,;
		THISFORM.TXTNOMBRE.VALUE,;
		THISFORM.TXTEDAD.VALUE,;
		THISFORM.TXTCURSO.VALUE,;
		THISFORM.TXTSECCION.VALUE)
	WITH thisform
		.txtCodigo.value = ""
		.txtNombre.value = ""
		.txtEdad.value = ""
		.txtCurso.value = ""
		.txtSeccion.value = ""
	ENDWITH
 
	*!*	thisform.Refresh
ENDIF
thisform.txtCodigo.SetFocus
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