FoxPro/Visual FoxPro - 2 Consultas 2 (al precio de una : )

   
Vista:

2 Consultas 2 (al precio de una : )

Publicado por Andrea (325 intervenciones) el 13/02/2009 03:37:40
Hola a todos nuevamente.

Tengo que hacerles 2 consultas que tal vez sean obvias pero que no puedo hacer funcionar:

1) Salir con el botón [ x ] (cerrar): en un form, hay un Textbox (el famoso textbox de los post anteriores!!) que si presiono :

-> [Enter] y campo vacío: me despliega una ventana de consulta para que el usuario pueda buscar un cliente
->[Enter] y un código ingresado: busca el código
->[Esc]: sale del formulario

Esta tarde se lo mostré al cliente y al probarlo hizo click en el botón [ X ] del formulario y no salía, ya que el foco se seguía manteniendo en el textbox.

Siguió probando y el botón [ X ] del formulario se puso gris y la única forma de salir del formulario fue presionando ESC en el textbox

¿CÓMO PUEDO HACER PARA QUE ME DEJE SALIR AL HACER CLICK EN EL BOTÓN CERRAR?

2) Si yo hago un cursor con una instrucción SQL (SELECT..... INTO CURSOR micursor),

¿CÓMO HAGO PARA QUE LAS MODIFICACIONES QUE HAGA AHÍ SE TRASLADEN A LA TABLA ORIGEN??

Muchas gracias!!

Andy
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

RE:2 Consultas 2 (al precio de una : )

Publicado por Mario (199 intervenciones) el 13/02/2009 13:30:09
Para la primer pregunta creo que esto te puede servir
http://www.portalfox.com/index.php?name=News&file=article&sid=931
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

RE:2 Consultas 2 (al precio de una : )

Publicado por alexcoinc (449 intervenciones) el 13/02/2009 15:08:02
Para Tú segunda inquietud, se me ocurre que puedes hacer un ciclo para ir leyendo cada registro del cursor e ir grabando los campos necesarios en la tabla maestra; algo como:

SELE 0
SELE TABLA
SELE 1
USE CURSOR
GO TOP
DO WHILE ! EOF()
CARGAR VARIABLES DEL CURSOR
SELE 0
APPE BLANK && SI ES CON REPLACE EL INSERT NO LO NECESITA
DESCARGAR VARIABLES CON INSERT O REPLACE
SELE 1
SKIP
ENDDO


Ensaya espero te sirva la idea.
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

RE:2 Consultas 2 (al precio de una : )

Publicado por Andrea (325 intervenciones) el 13/02/2009 18:31:01
Gracias por las sugerencias. Las voy a probar
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

RE:2 Consultas 2 (al precio de una : )

Publicado por ANDRES CORTEZ M (162 intervenciones) el 13/02/2009 20:22:44
HOLA ANDREITA

para el caso 2

Lo que te dice el amigo ALEXCOINC creo que no te serviria en parte, por lo que yo entiendo tu quieres modificar los registro de tu tabla origen con los datos del cursor.

Si es asi lo que esta asiendo la rutina del amigo es adicionar(Agregar) eso registro a la tabla origen.

ahora esa rutina sirve pero tendria que hacer un seek a la tabla origen con un campo relacionado para buscar el registro y alli realizar las modificaciones.

ejemplo

SELE 0
SELE TABLA
SET INDE TO CODIGO && LINEA NUEVA
SELE 1
USE CURSOR
GO TOP
DO WHILE ! EOF()
CARGAR VARIABLES DEL CURSOR
SELE 0
SEEK CURSOR.CODIGO
IF FOUN()
DESCARGAR VARIABLES CON INSERT O REPLACE
ENDIF
SELE 1
SKIP
ENDDO

saludos

ACM
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

RE:2 Consultas 2 (al precio de una : )

Publicado por Andrea (325 intervenciones) el 13/02/2009 20:59:29
Gracias por el dato.

En realidad pensé que había una instrucción que compara bases y modicara lo necesario, sin tener que recorrer todo el cursor

Gracias nuevamente :)
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

RE:2 Consultas 2 (al precio de una : )

Publicado por ANDRES CORTEZ M (162 intervenciones) el 13/02/2009 22:15:06
HOLA ANDREITA

Si trabajas con tablas nativas, puedes ir actualizando altiro de forma automatica.
no se com mysql o sql no lo e probado, pero creo que deberia

ejemplo ( 1 )

select codigo,desripcion,cxcaja,recno() from t_origen;
----------where condicion;
----------orden by campo:
----------into cursor mycursor

supongo que los cambios los estas asiendo en una grilla sobre el mycursor

ejemplo si vamos a modifica el campo cxcaja

en en evento lostfocus del thisform.grid1.column3.text1 && cxcaja
escribe si

------- ( 2 ) &&

if !empt(mycursor.exp_4) && si no esta en blanco
selec t_origen
go mycursor.exp_4 && va al registro de la tabla origen
replace cxcaja with mycursor.cxcaja
select mycursor
endif

si miras el select ( 1 ), estoy indicando que me traiga el numero de registro recno(), y el en cursor lo asigna como EXP_ el numero que le pone es segun la cantidad de campos en este caso 4, si ubieran 10 campo antes del recno() el campo donde guarda el registro serie EXP_11

debes colocar el paso 2 en todas las columnas que se van a modifica o puedes hacer un metodo para resumir codigo. solo varia la linea

replace nombrecampo with nombrecursor.campo

ahora al pasar por cada campo va a estar grabando, si quieres grabar solo los campos que se han modificado debes hacer la validad

ejemplo

en el evento gotfocus
xcxcaja=mycursor.cxcaja && la variabel xcxcaja usala como publica

------- ( 3 ) &&

if !empt(mycursor.exp_4) .and. xcxcaja<>mycursor.cxcaja && por que se modifico
selec t_origen
go mycursor.exp_4 && va al registro de la tabla origen
replace cxcaja with mycursor.cxcaja
select mycursor
endif

y si quieres validar mas al cumplirse la condicion ( 3 ) al entrar puedes preguntar con messagebox ya que el dato puede ser cambiado por error.

ejemplo

------- ( 4 ) &&

if !empt(mycursor.exp_4) .and. xcxcaja<>mycursor.cxcaja && por que se modifico
mop=messagebox("texto",1+64+256,"texto")
if mop=1
selec t_origen
go mycursor.exp_4 && va al registro de la tabla origen
replace cxcaja with mycursor.cxcaja
else
replace mycursor.cxcaja with xcxcaja
endif
select mycursor
endif

Hace tiempo yo trabajo asi, todos mis sistemas trabajan sin indices ocupo el numero de registro y 0 problemas con los cortes de luz, no hay que estar regenerando indices o la posibles perdidas de estos

Espero haberme explicado bien todo es ,mas automatizado nada de usar un boton para que grabe, o si se corta la luz se perdio la informacion en memoria ya que los cambio los realiza de forma automatica.

Nota: en los campos importantes como SALDO DE PRODUCTO alli debes bloquerar el registo realiza el cambio y lo libera. es fraccion de segundos

Espero te sirva es una buena metodologia

saludos

ACM

.
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

RE:2 Consultas 2 (al precio de una : )

Publicado por Andrea (325 intervenciones) el 15/02/2009 15:33:45
Muy buena explicación... ¡GRACIAS!
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