FoxPro/Visual FoxPro - EL HP SQL O YO

 
Vista:

EL HP SQL O YO

Publicado por alexcoinc (450 intervenciones) el 19/09/2008 00:24:33
Tengo un grid el cual se llena con la siguiente instrucción SQL:

ESTO LO TENGO EN UN BOTON:
buscadoc='E'+space(1)+str(docu) && El docu es un dato de entrada.
THISFORM.gridmov.recordsource = 'SELECT tipo,swiche,documento,recno() as registro FROM movim WHERE (tipo+swiche+str(documento))==buscadoc into cursor curdoc'

Luego al refrescar tanto el grid como la form, me funciona muy bien.

Resulta que este grid lo utilizo para escoger un registro y posteriormente borrarlo
del archivo principal que en este caso se llama MOVIM.

Bueno imaginense y acá va la pregunta :

El proceso se ejecuta muy bien (aparentemente), el usuario escoge el registro a borrar del
grid, luego se realiza el proceso (es decir el DELETE EN EL ARCHIVO MOVIM) y saca
el mensaje "PROCESO CULMINADO CON EXITO"... es decir el proceso de borrado.

Se devuleve el control de la rutina a donde se pide otro documento para que el usuario
lo escoja, y asi volver a armar la cadena, asi: Dando clik en el boton:

buscadoc='E'+space(1)+str(docu) && El docu es un dato de entrada.
THISFORM.gridmov.recordsource = 'SELECT tipo,swiche,documento,recno() as registro FROM movim WHERE (tipo+swiche+str(documento))==buscadoc into cursor curdoc'

PEDI EL MISMO DOCUMENTO (EL ANTERIOR)

SORPRESA: El registro que había borrado y que procesó me vuelve a aparecer en el grid.

Inquieto por esta situación abri la tabla MOVIM y efectivamente ese registro si se había
borrado (estaba correcto).

Volvi a entrar a la rutina y la corri y en esa ocasión ya no me trajo el registro.

RESUMIENDO: Que pasa con la instrucción SQL que si se corre inmediatamente después
de la primera vez no trae los datos correctos, es algo asi como que uno se tenga que
salir del programa o de la rutina para que funcione... ESO ES UNA FALLA INMENSA NO?

Bueno que es lo que debo hacer, en que estoy fallando ??

Gracias por sus comentarios

alexcoinc.
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:EL HP SQL O YO

Publicado por Plinio (7841 intervenciones) el 19/09/2008 15:08:46
pusiste SET DELETE ON?
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:EL HP SQL O YO

Publicado por alexcoinc (450 intervenciones) el 19/09/2008 16:04:50
Gracias Plinio por cvontestar:

Te comento que : ESTA AL PRINCIPIO (En el programa Principal).

Quiero saber si te parece extraño o que mas puede estar pasando.

Ademas te cuento que no es la primera vez que me pasa, de hecho, lo he consultado mas de una vez en el foro y no he tenido respuesta.

No se si esta vez será la vencida !!

Lo he solucionado colocando a funcionar tablas temporales ( no con instrucciones SQL) .

PERO SERA QUE SQL... Tiene ese BUG tan inmenso ??

Gracias por tus comentarios

alexcoinc
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:EL HP SQL O YO

Publicado por Plinio (7841 intervenciones) el 19/09/2008 18:29:01
No creo. Ya probaste usando una vista en vez de un query?
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:EL HP SQL O YO

Publicado por Mario (49 intervenciones) el 19/09/2008 19:26:15
Hola,

En todas las consultas y vistas incluyo tras WHERE las condiciones de filtrado y ... AND !DELETED() , y hasta ahora no he tenido ese problema.

'SELECT tipo,swiche,documento,recno() as registro FROM movim WHERE (tipo+swiche+str(documento))==buscadoc AND !DELETED() into cursor curdoc'

Saludos,

Mario
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:EL HP SQL O YO

Publicado por alexcoinc (450 intervenciones) el 19/09/2008 23:21:46
MARIO

Esta es una buena idea, la voy a ensayar.

AHORA MARIO: Eso de colocar el ! DELETED() qué lo ocasionó? es que en algún momento te presento el mismo error que comento yo de la instrucción SQL ?

Para serte sincero yo creo que si y buscaste esa salida... o me equiovoco ??

De todas maneras es bueno saber que a alguien le paso lo mismo: Uno para ratificar que no soy el de la falla y Dos para saber que no estamos solos y que a todos nos pasan cosas raras con estos lenguajes, es decir que nos perfectos.

Gracias otra vez por contestar Mario y te estare comentando como me fue !!

alexcoinc.
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:EL HP SQL O YO

Publicado por alexcoinc (450 intervenciones) el 20/09/2008 00:19:17
MARIO

En el anterior registro del foro te dije que iba a ensayar tú idea de colocar el !deleted() en la instrucción SQL.

Lo ensaye y A MI NO ME FUNCIONA !!... sigue apareciendo el registro que supuestamente acabo de borrar.

Como te comente si salgo de esa opción y vuelvo a entrar ahí si ya no me lo muestra.

Bueno, será que cuando uno borra con el delete en la tabla principal, hay que darle alguna otra instrucción para que haga efectiva la marcación del registro o libere la memoria y haga fisicamente la marcación en la tabla.

En ocasiones pasadas utilice alguna instrucción como COMMIT O FLUSH, que me la sugirieron pero no da buen resultado.

QUE OPINAN AMIGOS DEL FORO ??

SIGO ESPERANDO SUGERENCIAS !! De verdad las necesito !!

alexcoinc.
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: 4
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

RE:EL HP SQL O YO

Publicado por kong (682 intervenciones) el 20/09/2008 04:48:41
yo pondria el .RecordSource="curDoc"

y crearia un metodo que contenga el (select ....into cursor curDoc readwrite)

cada vez que haga algo nuevo en el contenido de la Grid (pj. Delete), mando a llamar el metodo que contiene el select. Y luego asigno al contenido del .RecordSource. y un .Refresh

pero no hay que olvidar que antes de volver a asignar algo nuevo en el Grid, primero debes borrarlo.... asi. . RecordSource="" y luego .RecordSource="curDoc"
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:EL HP SQL O YO

Publicado por Mario (49 intervenciones) el 20/09/2008 08:42:59
Buenos días,

Tu suposición es cierta, hace meses al realizar SELECT SUM o SELECT COUNT aparecían resultados incorrectos por registros borrados (VFP 6). Plinio me recomendó usar CALCULATE y se solucionó, pero realicé pruebas con !DELETED() y los problemas se resolvieron. Desde entonces incluyo !DELETED() en todos los comandos con alcance, como SCAN, CALCULATE, SELECT, etc, aunque sea recurrente porque no cuesta y me da más confianza.

En cuanto a tu problema actual te iba a proponer justo lo mismo que ya te ha descrito Kong, que también utilizo con frecuencia:

- Si el recálculo del grid debe realizarse desde más de un lugar de la aplicación, creo un método en el formulario, por ejemplo CargaGrid, y este método lo ejecuto con ThisForm.CargaGrid

- En CargaGrid comienzo eliminando el origen de datos del grid: ThisForm<...objeto_grid>.RecordSource = ''

- Creo un cursor basado en la consulta con SELECT ... INTO CURSOR cur23

- Asigno ese cursor como origen de datos del grid: ThisForm<...objeto_grid>.RecordSource = 'cur01'

ThisForm.Refresh

Como la V6 no permite de edición de las consultas, en caso de un grid en el que haya que modificar datos utilizo una consulta programada basada en un SELECT, pero su configuración por programa resulta compleja.

Saludos,

Mario
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:EL HP SQL O YO

Publicado por alexcoinc (450 intervenciones) el 20/09/2008 16:00:07
MUCHACHOS

Que pasaría si despues del DELETE que hago en la tabla que quiero borrar el registro INMEDIATAMENTE coloco un TABLEUPDATE .

ESO ES CORRECTO A SABIENDAS QUE MANEJO EN ESTE CASO TABLAS LIBRES . CUAL SERIA SU COMPORTAMIENTO ??

Gracias


alexcoinc
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