Generador de archivo foxpro

hola, ravenn, saludos, espero estés bien... Bueno, man, paso para que me ayudes a resolver parte de las ultimas dudas que tengo, esta vez, menú...

bueno, tengo un botón guardar para guardar toda la información de las tablas en un nuevo archivo, pienso en una tabla inmensa, sencillo hasta acá, pero me gustaría que el soft fuese mas personalizado, ponte tu, que genere un archivo especifico, tipo el block de notas que genera un .txt... Como puedo hacer eso, obvio, no siendo un txt, sino algo así como un .SOM (archivo personal)? Si es una tabla, no quisiera colocarle un nombre a la tabla con create tabla NOMBRE, sino que se genere un nombre con el campo de una de las tablas, solo que cuando guarden la primera vez y si pulsan guardar nuevamente, no me genere el error ese de que ya existe la tabla...

quizás esto seria por esta parte, otra cosa seria como: como cerrar cualquier form abierto sin salir del soft? Solo cerrar los forms que estén abiertos y también, evitar que se abran dos forms al mismo tiempo, me dicen que colocarle a los soft modal, pero a todos?

te agradecería mucho que me ayudaras en esto, full gracias de verdad por toda la ayuda ofrecida, mil disculpas por no responder o tardar en agradecer, pero estudio y esto es mi tesis de grado, saludos y muchos éxitos....

1 Respuesta

Respuesta
1

Es un place saludarte. Espero andes bien! ¿Has estado en tu tesis? Wuauuu imagino el stress! XD

Bien... respecto al punto de las tablas y de la información de las tablas.. podrías explicar un poco mejor... no comprendí bien que es exactamente lo que necesitas. ¿OO?

Respecto a tu segunda duda: ¿Cómo cerrar cualquier form que este abierto sin salir del soft? Eso es fácil. Hay muchas formas de hacerlo... yo utilizo una muy sencilla que me ha funcionado de maravilla. Imagina que tenes un botón en tu form principal y es para cerrar todas las ventanas abiertas (excepto la principal claro)! En ese botón, coloca un código como éste:

**--Cerramos
FOR EACH oForm IN _Screen.Forms
IF oForm.Comment = "CLOSABLE"
oForm.Release()
EXIT
ENDIF
ENDFOR

Ahora... en cada form que quieras que sea tomado en cuenta para ser cerrado, debes configurar:no debe ser modal

WindowType = 0 - Modeles

ShowWindow = 1

Comment = CLOSABLE

En la propiedad comment del formulario escribí tal cual CLOSABLE así el código del botón del form principal lo que hace es desencadenar un bucle que considera las ventanas abiertas que tengan la palabra CLOSABLE en la propiedad comment y lo cierra. Vos podes cambiar CLOSABLE por algún * o un #... o lo que sea que identifique. Eso si... ésto funciona solo para formularios que no sean modales. Si es modal... la ventana principal se traba y no podes salir hasta cerrar.

Yo aconsejo que todo lo relacionado a consultas visuales de datos en las aplicaciones sea diseñado a nivel de NO MODAL y SHOWWINDOW = 1 para así poder recorrer entre ventanas cerrando una y abriendo otra.

Por ejemplo en una aplicación, yo tengo un menu como de ribbon y desde ahí abro un panel semi principal para cada modulo... abre un form de consulta visual y un subconjunto de botones que son para algunas tareas relacionas al modulo (altas, bajas, eliminaciones). Yo puedo intercambiar entre módulos.. así si estoy en inventario, paso a cuentas por cobrar y se cierra uno y se abre el otro. Esto ahorra memoria y recursos... no es bueno tener un montón de ventanas abiertas si no las usas. Pero si por ejemplo tengo el form de alta de inventario abierto (el SI ES MODAL) no puedo cerrar la consulta ni abrir otra. Debo terminar todo el proceso de alta o cancelar. Esto asegura estabilidad a tus datos.

Ahora... para evitar que un form se abra 2 veces... coloca un código como este para llamarlo:

**--
IF WEXIST('inv_nuevadistribucion')
ACTIVATE WINDOW inv_nuevadistribucion
ELSE
DO FORM "inv_nuevadistribucion.scx"
ENDIF
**--//

Donde inv_nuevadistribucion es el NOMBRE FÍSICO (. Scx) del formulario y también el nombre que coloco en la propiedad name del formulario. Esto segundo es importante... coloca el mismo nombre (sin la extensión SCX) del form en ambos casos. AAsi, si la ventana ya esta abierta, solo la trae al enfoque de la pantalla.. y si no esta abierta, la abre.

naaaaah! que ayuda mas brutal (maravillosa) je je me sirve lo que me expones, gracias, pero bueno, respecto a lo primero...

realmente no sabría como explicarte, es que tengo la información como de diez tablas, es un control de notas mi programa, pero quiero es que el programa se siga usando, suponte que al cabo de año ya se ha almacenado toda la información, entonces se comienza un nuevo año escolar, pero siguen qdando los mismos estudiantes y docentes, bueno, solo quiero extraer las viejas notas y almacenarlas en un archivo, de modo que si se desea volver a ver esa información, este ahí almacenada, obvio, esa información pasarla a las diez tablas que manipula el programa, suponiendo que haya nueva información, entonces sale una advertencia de que se borrara todos los datos, para eso esta el botón guardar, para almacenar esa información en ese dichoso archivo que necesito y que sea movible (que se almacene en un pendrive y que solo mi programa pueda leerlo), suponte que quiero que mi programa sea tipo word, que genera archivos de documentos, pero el mio seria de toda la información de las tablas y si se desea cargar todo o solo los datos, esa seria una advertencia de un botón abrir, algo así mas o menos...

otra cosa es, como hago para dirigirme a un botón del menu?

suponte que en un form, tu dices:

thisform.texto1.setfocus (algo así como: colocar el foco en el texto1 de este form...)

bueno, algo así pero para los botones del menu...

ejemplo

menuXX."botón abrir". enabled=.F. (deshabilitar el botón abrir del menuXX)

gracias de verdad, voy a ver que mas puedo adelantar, el estrés si, es increíble, pero ahí poco a poco voy, muchos saludos y espero tu pronta respuesta...

Un placer! :)

Bien.. respecto a lo de las tablas... leyendo tus comentarios deduzco que lo que necesitas hacer es un respaldo de tus 10 tablas. ¿Por qué deseas pasarla a WORD? ¿No seria mejor conservar la integridad en ficheros idénticos a las tablas .dbf? ¿O tal vez en excel? Yo te aconsejaria hacer un respaldo el excel o .dbf...! Asi, si algo pasa, solo dirigis la aplicacion a abrir la base de datos anteriores y listo...! O abrir un archivo xls que posteriormente... te permitiria importar a foxpro los datos...! ¿Me comprendes?

Si te parece la idea de realizar un respando en tablas .dbf, avisame. Si deseas un respaldo en excel... avisame. Si deseas un respaldo en los 2 tipos de ficheros... avisame par ayudarte y decirte como proceder! :) :) :)

Ahora,... para tu segunda duda... dirigir el enfoque a un boton es igual que a un text:

THISFORM.command1.SetFocus

El control de los enfoques se dirigie por medio de las propiedades TABINDEX y TABSTOP del cada control. Si tenes 10 controles... vos enumeras en tabindex el orden que deseas.. asi cuando apretas enter o tab... se sigue el orden. Yo enumero de 2 en 2... opr ejemplo: a un text le pongo 2, al siguiente 4, al siguiente boton 6... y asi. Todos deben tener TABSTOP = .T.

pues me gustaría aprender de las dos formas, así tengo mas para ver que hacer, quizás es una buena idea... en cuanto a lo segundo. me refiero a los sub menu del menu, como le doy ordenes a esos submenus desde algún form? gracias por responder, saludos...

No se que puta le pasa a esta pagina del carajo... siempre da el error de escritura y no deja enviar la respuesta. Te la enviare por partes!

Pues mira... un back up/respaldo es fácil de hacer! :) Se tienen que ir generando copias de las tablas y de la base de datos de tu aplicación en una carpeta especifica. Te aclaro... hay muchas formas de hacerlo... pero esta es la que yo recomiendo! Es fácil, ágil y eficiente! Aquí va:
1. Copia este código en un archivo .prg de tu proyecto y guardalo (físicamente) con el nombre de "respaldo".

Loco dame tu dirección de correo electrónico para enviarte la respuesta por ahí... me parece que me la habías dado pero no recuerdo bien cual era! Me lleva el demonio con esta pagina del diablo! Ademas que nos quitan arbitrariamente los puntos... están de locos que no dejan enviar las respuestas por mamadas de formatos.

viejo, mi correo es [email protected] y no se quizás ya te he explicado lo que quiero hacer... pasar la info de mis tablas a una tabla definitiva, para vaciar toda la info de las tablas y luego, si quiero volver a tener la info en mis tablas, abrir esa tabla definitiva y cargar esa info en mis tablas, eso es todo, es lo único que me falta... y por otra parte, me falta tres botones del menú, abrir (cargar los datos de la tabla definitiva en las tablas de mi soft); guardar (guardar la información de mis tablas en una tabla definitiva), imprimir (este botón quiero activarlo según un montón de condiciones desde un form) y listo, mi programa quedaría cerrado... ah y eso de que no se abran dos form al mismo tiempo, un solo form a la vez y ya... gracias de verdad, espero tu pronta respuesta, saludos...

Disculpa la tardanza pero estuve fuera estos días.

Mmmm te envíe hace poco como hacer un backup de tus tablas...! Avisame por fa si te llega la info al correo.

Bien... según leo... lo que debes hacer es el respaldo de las tablas. Lo que me llama la atención es que mencionas

"¿Pasar la info de mis tablas a una tabla definitiva"?

Si tenes varias tablas.. lo mas correcto es respetar la integridad de cada fichero! ¿Por qué vaciar todas las tablas en una sola tabla? En ese caso, no seria un respaldo meramente... si no que seria solo una inseccion de datos...! ¿Cuál es el problema? Radica en que al querer recuperar los datos... vas a ir de una sola instancia a varias instancias (tablas). ¿Me explico? Es mas fácil simplemente vaciar la tabla respaldo a tu tabla de trabajo actual usando

APPEND FROM

Y así volcar toda la información de una tabla a otra con esa sencilla linea... que tomar una tabla que tiene varios campos de otras tablas y tener que estar haciendo un SCAN o una validación de cada registro. Que tal si hay registros en blanco producto de la inserción de otras tablas y sus datos que no coincidan con "otras" tablas!

hola ravenn, como vas, viejo? aun sigo sufriendo con el respaldo de las tablas, ya todo el menu funciona y todo ha quedado como quiero, un poco mas de configuración y listo... enviame otra vez el correo, sin querer lo borre, saludos y gracias

Disculpa la tardanza pero estuve fuera de linea.

Ya te reenvíe el mail. Avisame cualquier cosa para ayudarte!

Un abrazo! :)

bueno, ravenn, si me llego el mail, gracias y voy a ver que hago, pero mira, enseñame un poco o dame un ejemplo a ver si respaldo en un excel pero bloqueado, gracias de verdad, espero me sea de utilidad, cualquier evento, te consulto, muchos saludos...

¿Excel pero bloqueado? ¿Cómo asi?

bueno, tu sabes que uno puede hacer una hoja en excel, cierto? bueno, quiero que fox almacene la información en una hoja de excel y que al mismo tiempo me bloquee el documento de trabajo para que se prohíban las modificaciones... gracias, bro...

Me disculpo por la tardanza en responderte. Cada día el trabajo aprieta mas! Ja ja!

Pues en tu caso... no sabría como bloquear desde fox el libro para otorgar privilegios! :O :O

Nunca lo he realizado...! :O

bueno, bueno, eso no importa.. gracias a lo que me enviaste al correo me ha ayudado demasiado, realmente gracias, estoy a punto de finalizar (siempre digo lo mismo) jaja necesito q me ayudes en lo siguiente, te explico como codigo a ver si me entiendes

select * (tabla)

si (nombre de la columna de esa tabla existe)

haga...

en caso contrario

haga...

fin si

es decir, quiero buscar en una tabla determinada el nombre de una columna pero si no existe, q no me salga el error de fox, como podria hacer eso? mil gracias siempre por la ayuda y las respuestas ofrecidas...

He estado algo ausente... siempre me disculpo.

Eso es fácil... debes verificar que si el nombre del campo ya existe, así:

SELECT tabla

IF FIELD('nombrecampo')#'NOMBRECAMPO'

**-El campo no existe

ELSE

**--El campo si existe

ENDIF

**--//

Asegurate que después del # va entre comillas siempre el nombre del campo que deseas verificar en mayúsculas. Eso es importante.

Un abrazo! :) Creo que ya el enlace de esta pregunta esta bastante grande haha! Si podes cerrarla y hacer nuevas consultas, te lo agradecería... así también.. me echas una mano con puntos hahaha que estoy algo bajo.

Siempre es un placer ayudarte.

Desde Managua, capital de Nicaragua!

Ravenn :D :D :D

muchas gracias, bro, tu siempre ayudándome, tus soluciones son lo mejor, ya creo tener listo mi programa, no creo que me falte mas nada, muchas gracias por todo, cualquier otra duda yo te la hago saber, gracias por la dedicación y constancia.. hasta pronto y mucho éxito en tus metas, siento que me despido jajajaja, saludos...

Loco estoy probando. ¿Esta consulta ya la habías cerrado y puntuado verdad? Mira.. ahora los cambios... la puedo abrir y otro experto también haha avisame hahaha

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas