Page 1 of 2

Me estoy volviendo Loco

Posted: Tue Jul 29, 2014 12:04 pm
by gabrieloq
Hola amigos necesito por favor una ayuda con una aplicacion sencilla, el manejo del "DEFINE GRID" me esta causando problemas, anexo dbf, fuentes y un documento de Word que explica mis dolores de cabeza.

Utilizo Win 7 a 32 bits

Ya he consultado los ejemplos que anexa HMG y no logro encontrar la solucion.

Les agradezco su colaboracion.

Me estoy volviendo Loco

Posted: Tue Jul 29, 2014 12:07 pm
by gabrieloq
Anexo el Documento de Word

Re: Me estoy volviendo Loco

Posted: Tue Jul 29, 2014 1:56 pm
by EduardoLuis
Hola Gabriel:

Estuve viendo tu problema.-
No me quedó muy claro tu rutina de filtrado, pero creo que ahí radica tu problema con el Grid.-
Intenta lo siguiente: (lo utilizo en una aplicación de agenda y funciona)

TU_TABLA->(DbClearFilter())
SET FILTER TO SUBSTR(TU_TABLA->TU_CAMPO_DONDE_CLASIFICARALABUSQUEDA, 1, 1) == TU_PALABRA_QUE_ESTABLECE_EL_PATRON_DE FILTRADO
TU_VENTANA_MODAL.GRID_TUGRID.REFRESH

En teoría esto solucionaría la falta de exhibición de tu GRID.-
Espero de momento te sirva.-
Abrazo. Eduardo

Re: Me estoy volviendo Loco

Posted: Tue Jul 29, 2014 5:06 pm
by danielmaximiliano
Estoy revisando tú codígo y resolviendo las rutas de las tablas.

Re: Me estoy volviendo Loco

Posted: Tue Jul 29, 2014 5:31 pm
by Javier Tovar
Hola GabrielLoq,

Con el siguiente código, que es el mismo que tu utilizas, si se ve lo que contiene TEMPLANT.DBF. Y en mi opinión deber de checar en que momento se borra lo que tienes en TemPlant.DBF o para asegurarte lo que estas haciendo siempre llama a la base de datos que quieres mostrar antes de la Grid, pon: dbSelectArea( "TemPlant" ).

Code: Select all

/*
* HMG Hello World Demo
* (c) 2002 Andrea M.
*/

#include "hmg.ch"

Function Main

use TemPlant  EXCLUSIVE NEW 

DEFINE WINDOW Form_1    ;
   AT 10,10              ;
   WIDTH 1100 HEIGHT 650 ;
   TITLE " PLANTILLAS  " ;
   MAIN     

   
   
    @ 50,10 GRID Grid_P1  ;
	    WIDTH 1050  ;
	    HEIGHT 400  ;
	    HEADERS { 'Selecciona', 'Descripcion', 'Prescripcion', 'Via', 'Cant'}  ;
	    WIDTHS { 50, 400, 300, 120, 80} ;
		ROWSOURCE "TemPlant" ;
		COLUMNFIELDS { 'Si', 'Nombre', 'Prescribe', 'Via', 'Cantidad' } ;
		EDIT ;
		VALUE { 1 , 1 } ;
		COLUMNCONTROLS { {'TEXTBOX','CHARACTER'}, {'TEXTBOX','CHARACTER'}, {'TEXTBOX','CHARACTER'}, {'TEXTBOX','CHARACTER'}, {'TEXTBOX','NUMERIC','999'} } ;
		ALLOWAPPEND 
		
 
END WINDOW

	CENTER WINDOW Form_1

	ACTIVATE WINDOW Form_1

Return
ProbGrid.jpg
ProbGrid.jpg (128.19 KiB) Viewed 4287 times
Y una segunda opinión, si me permites, se que cada quien tiene su forma de programar pero veo que tienes por ahí varios, muchos, dbUnlock(), que no se cuando bloqueas tu DBF, creo que una buena costumbre es bloquearlo y desbloquearlo en un mismo procedimiento y función para que sea más claro.

También observo que cuando haces una búsqueda con DbSeek() no sabes si lo encontró o no, por qué no poner un IF con cada DbSeek(), por ejemplo:

IF TemPlant->(DbSeek(cBusca))
MsgBox("Lo Encontro")
ELSE
MsgBox("NOOOOOOO lo Encontro")
ENDIF

Eso me ayuda a que me asegure que lo encontró.

Y por ultimo, por tiempo no puedo revisar más tu programa pero, también hay funciones que facilitan el trabajo, por ejemplo al inicio de tu programa pones para saber el tamaño de tu pantalla, para eso están las funciones:

Code: Select all

#define nWIDTH      GetDeskTopWidth()
#define nHEIGHT     GetDeskTopHeight()
y no tienes que llamarlas en código C.

Creo que es solo de rastrear donde se pierde el programa.

Saludos y espero que te sirva.

Re: Me estoy volviendo Loco

Posted: Tue Jul 29, 2014 6:44 pm
by Javier Tovar
Hola GabrielLoq,

También veo que confundes tus funciones, por ejemplo:

Code: Select all

function Amplia(nSegundos,cNombre)
local nSiempre := nTiempo := 0
do while .t.
  nTiempo  := nSegundos
  nSiempre := (nTiempo==0)
  do while (nSiempre .or. nTiempo > 0)
    dbappend()
    if !neterr()
      return (.t.)
    endif
    inkey(.5)
    nTiempo-=.5
  enddo
  Mueveiz("..Archivo: "+cNombre+" ocupado, espere por favor..")
enddo
Y en tus programas pones

Code: Select all

Amplia( 5, "TemPlant", cQuien )
Saludos

Re: Me estoy volviendo Loco

Posted: Tue Jul 29, 2014 8:53 pm
by danielmaximiliano
Javier Tovar wrote:Hola GabrielLoq,

También veo que confundes tus funciones, por ejemplo:

Code: Select all

function Amplia(nSegundos,cNombre)
local nSiempre := nTiempo := 0
do while .t.
  nTiempo  := nSegundos
  nSiempre := (nTiempo==0)
  do while (nSiempre .or. nTiempo > 0)
    dbappend()
    if !neterr()
      return (.t.)
    endif
    inkey(.5)
    nTiempo-=.5
  enddo
  Mueveiz("..Archivo: "+cNombre+" ocupado, espere por favor..")
enddo
Y en tus programas pones

Code: Select all

Amplia( 5, "TemPlant", cQuien )
Saludos
No importa el 3° parametro. ya que recibe "TemPlant" o cQuien....

Code: Select all

Amplia( nSegundos , cNombre )

Me estoy volviendo Loco

Posted: Tue Jul 29, 2014 9:09 pm
by Pablo César
danielmaximiliano wrote: No importa el 3° parametro. ya que recibe "TemPlant" o cQuien....

Code: Select all

Amplia( nSegundos , cNombre )
Pero irá dar error por falta de definicion de la variable cNombre en:

Mueveiz("..Archivo: "+cNombre+" ocupado, espere por favor..")

Re: Me estoy volviendo Loco

Posted: Tue Jul 29, 2014 9:40 pm
by danielmaximiliano
Pablo César wrote:
danielmaximiliano wrote: No importa el 3° parametro. ya que recibe "TemPlant" o cQuien....

Code: Select all

Amplia( nSegundos , cNombre )
Pero irá dar error por falta de definicion de la variable cNombre en:

Mueveiz("..Archivo: "+cNombre+" ocupado, espere por favor..")
no,para nada..

aqui esta la funcion completa. cNombre puede recibir "Tempxxx" o cQuien

Code: Select all

function Amplia( nSegundos , cNombre )
local nSiempre := nTiempo := 0
    do while .t.
       nTiempo  := nSegundos
       nSiempre := (nTiempo==0)
       do while (nSiempre .or. nTiempo > 0)
          dbappend()
       if !neterr()
          return (.T.)
       endif
    inkey(.5)
    nTiempo-=.5
    enddo
  Mueveiz("..Archivo: " + cNombre + " ocupado, espere por favor..")
enddo

Re: Me estoy volviendo Loco

Posted: Wed Jul 30, 2014 12:15 am
by Pablo César
Tenés razón, Daniel. Me equivoqué. Perdon.