Ejecutar aplicación con un trigger

Buenos días mi estimado, y de antemano te estoy muy agradecido porque estas y sigues estando a mi lado, en estos momentos, en los cuales aparte de frustración, es impotencia, por no descubrir realmente que es lo que esta pasando aquí, dejame explicarte un poco como esta el asunto.
Yo hice en VFoxPro 9 una aplicación que lee la información de varias tablas y genera un archivo texto con esa información que se obtuvo, ¿hasta ahí estamos bien?. El programa por si solo funciona bien y da la información que se requiere. (Es un PRG) en si se llama EjeFact.Prg
Ahora lo que me pidieron es que cree un Trigger para que cuando inserten un registro en una tabla, se ejecute el programa que te menciono arriba.
El trigger ya lo he creado de diferentes maneras:
1.- Desde la linea de commando con la intruccion Create Trigger NomTabla For Insert As Condicion.
2.- Ingresando a la tabla y seleccionando la pestaña tabla y definir ahí el disparador.
Nota: En estos dos pasos anteriores, si funciona el trigger pero no me hace nada, porque no se en que parte debo de decirle "SI SE CUMPLE ESTO EJECUTA ESTA APLICACIÓN"
3.- Crear un procedimiento (más no se como mandarlo llamar desde el trigger).
4.- Exporte la información a SQL porque la sintaxis del trigger si me permite ejecutar un Begin End de datos (en otras palabras me permite decirle que si se cumple la condición haga esto). (Ahorita estoy atorado en ello porque me marca error en el formato de fechas.
5.- En la parte de procedimientos le agregue todo el código de mi programa y ni así funciona.
6.- Busque la manera de que se pudieran enlazar (relación de tablas) dos tablas por medio de un campo y no tengo habilitada la opción.
No se que más hacer por favor ayudame.
Gracias.
Respuesta
1
Bueno espero que ya ayas solucionado tu problema, aunque me quedan las dudas ya que he encontrado dos veces la pregunta
Espero que si de lo contrario comenta y te sigo ayudando !
Buenos días:
Ya vi cual es el problema que te platicaba con la aplicación, pero no se como arreglarlo, y es por el grid, lo único que necesito es que me despliegue los datos de la tabla de conse2 campos (num_fac, fecha e importe) y resulta que me esta marcando una serie de errores, en el grid (al cual no lo tengo veinculado en el objeto, pero si por medio de código:
&& propiedades del grid
thisform.gridEnvia.allowheadersizing = .f.
thisform.gridEnvia.allowrowsizing = .f.
thisform.gridEnvia.columncount = 3 && cantidad de columnas
thisform.gridEnvia.deletemark = .f.
thisform.gridEnvia.fontname = "ms sans serif"
thisform.gridEnvia.headerheight = 22
thisform.gridEnvia.recordmark = .t.
thisform.gridEnvia.scrollbars = 2
**thisform.gridEnvia.recordsourcetype = 1 && tipo de datos para llenar el grid
**thisform.gridEnvia.recordsource = "conse2" && nombre de la tabla a abrir en el grid
&& propiedades de la primer columna
thisform.gridEnvia.column1.width = 70
thisform.gridEnvia.column1.movable = .f.
thisform.gridEnvia.column1.readonly = .t.
thisform.gridEnvia.column1.resizable = .f.
thisform.gridEnvia.column1.header1.alignment = 2
thisform.gridEnvia.column1.header1.backcolor = rgb(192,192,192)
thisform.gridEnvia.column1.header1.caption = "No.Factura"
thisform.gridEnvia.column1.header1.fontbold = .t.
thisform.gridEnvia.column1.text1.readonly = .t.
thisform.gridEnvia.column1.text1.enabled = .f.
thisform.gridEnvia.column1.text1.alignment = 2
&& propiedades de la segunda columna
thisform.gridEnvia.column2.width = 70
thisform.gridEnvia.column2.movable = .f.
thisform.gridEnvia.column2.readonly = .t.
thisform.gridEnvia.column2.resizable = .f.
*thisform.gridEnvia.column2.alignment = 2
thisform.gridEnvia.column2.header1.alignment = 2
thisform.gridEnvia.column2.header1.backcolor = rgb(192,192,192)
thisform.gridEnvia.column2.header1.caption = "Fecha"
thisform.gridEnvia.column2.header1.fontbold = .t.
thisform.gridEnvia.column2.text1.readonly = .t.
thisform.gridEnvia.column2.text1.enabled = .f.
thisform.gridEnvia.column2.text1.alignment = 2
&& propiedades de la tercer columna
thisform.gridEnvia.column3.width = 70
thisform.gridEnvia.column3.movable = .f.
thisform.gridEnvia.column3.readonly = .t.
thisform.gridEnvia.column3.resizable = .f.
*thisform.gridEnvia.column3.alignment = 2
thisform.gridEnvia.column3.header1.alignment = 2
thisform.gridEnvia.column3.header1.backcolor = rgb(192,192,192)
thisform.gridEnvia.column3.header1.caption = "Importe"
thisform.gridEnvia.column3.header1.fontbold = .t.
thisform.gridEnvia.column3.text1.readonly = .t.
thisform.gridEnvia.column3.text1.enabled = .f.
thisform.gridEnvia.column3.text1.alignment = 2
&& refresco el grid y le doy el foco
*thisform.gridEnvia.refresh
*thisform.gridEnvia.setfocus
thisform.txtcan.Value =""
MESSAGEBOX("Estoy Aqui")
*thisform.gridEnvia.recordsource = null
Este código se encuentra en el formulario FrmEnvia en el evento Activate, (es la ultima parte del código de ese evento.
Una vez terminado de ejecutarse se cierra la aplicación. ¿POR QUÉ?
Ademas de que me saca de onda, porque si observas, las únicas lineas que hacen referencia a una tabla, están como comentario, y aun así, me muestra el contenido de una tabla, así que no se sinceramente que es lo que esta pasando, ya me tiene loco esta aplicación y es por el hecho de que no se como realmente se debe de manejar el GRID, para mi solución seria un BROWSE pero se vería bien super chafa.
Por favor ayudame, plis que ya lo tengo que entregar.
PD. Como le quito el fondo de VISUAL FOXPRO a la aplicación, ¿para qué solo se vea el formulario?.
De antemano muchas gracias.
Doble PD, en mi desesperacion subi publicamente la pregunta. perdon
Creo que ya te lo respondí, sino entiendes me avisas
Tuve que poner como comentario todo lo que hacia referencia al grid (propiedades) en el evento load del formulario, ya que me marcaba que no existía el gridenvia), solo en las propiedades del grid, le especifique la cantidad de columnas fueran 3 ya que son esta cantidad la que requieron en mi aplicación, al ejecutar se ve la cuadricula, vacía pero con los letreros del Head1, Head2, Head3 y con los cuadritos de ab en cada uno de ellos y ya no me muestra datos y a que le puse en el evento INI del grid, como me lo comentaste Nestor el recordsource = "" (vacío). Al pulsar el botón actualiza, si me muestra los datos tal cual como se los estoy poniendo (No habrá una forma de decirle a la aplicación que los importes me los ponga en ves de 1890. 20 como 1,890. ¿20?).
Pero el detalle es el siguiente:
Creo en el generador de proyectos el archivo ejecutable lo compila y genera el. EXE ok
Pero al pretenderlo ejecutar desde el explorador de windows abre la aplicación (dos ventanas totalmente en blanco) he inmediatamente las cierra, sin mostrarme nada.
¿Podrían decirme como solucionar esto? Estoy confundido, ya que dentro de VFP9 si me muestra los datos así como se los comentaba, pero afuera no me muestra nada que hago.
PD. Cuando estoy revisando la codificación y realizo cualquier tipo de cambios si los acepta y los graba, y al momento de ejecutar la aplicación y si me llegase a marcar error, me manda la ventana de cancelar o suspender y al cancelarla, a veces me regresa al programa y en otras me saca del visual foxpro 9, y cuando no me saca, o me dice que la aplicación esta en uso o me manda un mensaje de Error _Foxcode ¿Cómo soluciono este problema? ¿Otro más, ya se, que bárbaro verdad, perdóneme las molestias y muchas gracias.
Jajaja no te preocupes, lo que tienes que hacer es hacer un archivo txt, que diga
SCREEN = OFF
pero despues de guardarlo lo que tienes que hacer es, cambiar a nombre.txt a un archivo que se llame exactamente de esta forma config.fpw
esto le indica a windows, que es la configuracion que debe de tomar para la ejecucion de la aplicacion, y recuerda que este archivo debe de estar dentro del proyecto !
Bueno y para que tu grid, te aparezca bien lo que debes de hacer es poner en el evento init, el refresh
lo que me indicaste que te sale bien es al actualizar, entonces desde el evento init del formulario tienes que actualizar y esto lo puedes hacer desde el evento init.
Saludos cualquier duda comenta nuevamente, no te preocupes estamos para ayudarte !
Excelentes comentarios TODO FUNCIONO. Muchísimas gracias a todos.
Solo un pequeño detalle que no me gusta.
Lo de estar sacando copias de las DBF's por no poder manipular las tablas al estar ocupadas con una aplicación comercial. (Es un programa que le empresa compro y llevan ahí el manejo administrativo) cuando ellos tienen abierta la aplicación, yo no puedo abrir ninguna tabla y cuando yo la tengo abierta ellos no pueden utilizar el programa comercial porque les marca error.
Es por eso que tengo que sacarle copias a las tablas para poder utilizarlas, funciona, pero no me convence del todo, ya que hay tablas que son muy pesadas y que se tardan mucho en copiarse. (Cuando termino el proceso, borro las copias que hice)
Para colmo de todo esto, necesito accesar a un web service (IIS) enviar la información que genero al web service y recibir resultados y estos resultados los tengo que vaciar en las tablas (como osea no entendí, cuando reciba la información necesito afectar tablas que están siendo utilizadas por una aplicación, ¿eso no se puede osi?)
Por un momento pensé que de ser así, debería de preparar mi aplicación como un proceso que se corra en la noche (que nadie este utilizando la aplicación), pero de ser así, pues para que quiero las copias, si tendré acceso directo a las tablas.
Espero sus comentarios.
Amigo muchas gracias por tus observaciones, ¿no tendrás por ahí algún "truco" para poder darle formato de dinero a la columna de importe?
MUCHAS GRACIAS POR TODO, quisiera saber sus comentarios.
Para poder cerrar este debate, que del cual sinceramente aprendí mucho y se me quito lo tonto, pero creeanme que ya tenia muchísimo tiempo con esto y no daba pie con bola.
La verdad es que tu problema es que fox no es un buen administrador de base de datos, y bueno lo que deberías de usar es usar MySql o algo así, y es también por la programación que usas, por eso no puedes acceder
¿Gola jefazo, como estas?
Créeme que yo siempre pensé que VFP era lo más completo que había en cuestión de administración de base de datos, pero bueno es mi opinión.
Estoy de acuerdo contigo que mejor seria Mysql o SQL server, pero la aplicación (el programa comercial) así esta, y como te comente no cuento con programas fuentes, esa aplicación es la que me ha estado dando lata desde el dichoso trigger, que emocionadamente y con tu ayuda, lo pude hacer funcionar, pero ya cuando lo instale, no sirvió, porque foxpro no genera trigger en una tabla sino en una DBC, cosa con la que no contaba el paquete comercial, así que al ponerlo no lo tomo en cuenta.
Pero quisiera por tu conducto, conocer realmeten tu opinión al respecto y ver si es posible hacer algo al respecto, porque ya me pidieron que instalara mañana la aplicación y que los resultados que se den, los guarde en una tabla, para luego en un proceso nocturno almacenar los datos en las tablas originales que utiliza la aplicación comercial.
Saludos y espero respuesta que estés bien.
La verdad creo que no vas a poder hacer mayor cosa, ya que si la aplicación viene así, todo viene así, y no hay forma que lo puedas cambiar, ya que necesitas las fuentes, y por cierto no has intentado usar refox, en el podes descompilar ejecutables que no estén protegidos, posiblemente el tuyo no lo esta.
Oye jefazo que buena idea, ¿me podrías dar santo y seña de donde encontrarlo?
Saludos.
Pues la verdad es que hay unos que son de prueba, pero los reales estos si solo consegidos con crack o algo así, la verdad es que no te podría dar una dirección exacta, pero creo que eso te podría solucionar tu proyecto, yo no lo tengo pero si buscalo y veras es excelente

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas