Duda con un GRID

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.

1 Respuesta

Respuesta
1
Veo la pregunta sin responder ya hace algunos días.
Qué versión de FoxPro tienes actualmente. ¿Services Pack?
La ventana principal de Fox, se oculta con _screen.visible=.F., pero sería necesario darle algunas propiedades a tu form principal y usar el comando Read Events.
Quiero ayudarte con esto.
Gracias, por todo, solo una pequeña DUDA, ¿cómo puedo leer y grabar en una campo MEMO (Esto porque tengo que recibir cadenas de caracteres de alrededor de 8,000 caracteres) se usan igual que un campo texto? Podrías ayudarme con eso.
Gracias por todo.
Es lo mismo, pero en este caso usa:
APPEND MEMO MemoFieldName FROM FileName[OVERWRITE] [AS nCodePage]
Perdón creo que esa partecita no la entendimos los dos
El campo es de tipo MEMO pero es un campo no una tabla.
Correcto, lo entendimos bien.
El código append memo lleva el contenido de un archivo de texto al CAMPO MEMO del registro actual, en un tabla.
Mira el ejemplo de fox, el cual puedes probar:
Close databases
OPEN DATABASE (HOME(2) + 'Data\testdata')
USE employee  && Open Employee table
WAIT WINDOW 'Employee notes memo field - press ESC' NOWAIT
MODIFY MEMO notes NOEDIT  && Open the notes memo field
COPY MEMO notes TO test.txt  && Create test file from memo field
WAIT WINDOW 'TEST.TXT text file - press ESC' NOWAIT
MODIFY FILE test.txt NOEDIT && Open the text file
WAIT WINDOW 'Employee notes now appended - press ESC' NOWAIT
APPEND MEMO notes FROM test.txt  && Add contents of text file
MODIFY MEMO notes NOEDIT  && Display memo field again
WAIT WINDOW 'Overwrite Employee notes- press ESC' NOWAIT
APPEND MEMO notes FROM test.txt OVERWRITE  && Replace notes
MODIFY MEMO notes NOEDIT NOWAIT
DELETE FILE test.txt
Muchas gracias, de antemano, dejme te platico toda la historia de esto:
Existe una aplicación comercial (Del cul no contamos con los fuentes por lo mismo que es comercial), que esta hecho en vfp y que maneja tablas independientes DBF, y me pidieron extraer información de ellas. Ya lo hice
Luego me pidieron que creara un trigger para que pudiera ejecutarse tal tarea desde el momento en que capturaran facturas (osea cada que se capture una que se ejecute el trigger) lo hice (batalle un chorro y aprendí mucho del trigger) y si me funciono en VFP9 pero cuando lo instale en la aplicación para hacer pruebas con la aplicación di de alta una factura y no paso nada, repetí la operación y nada, y resulta ser el detalle de que para poder crear un trigger se requiere de una DBC la cree y no la reconoce el programa principal, porque cuando no lo desarrolloraron nunca tomaron en cuenta la construcción de un DBC, así que la solución del trigger fallo.
Luego por medio de la programación se mostraría en un grid los datos y el usuario ejecutaría la aplicación (y que vuelvo a tener problemas ahora con el grid porque nunca lo había utilizado hasta me sacaba del vfp, pero bueno ya lo solucione también),
hasta ahí funciona bien todo, y una de las cosas que no me gustaron es que como en la aplicación comercial si la usan los usuarios yo no puedo utilizar la aplicación porque me marca error, y en cambio si yo utilizo mi programa ellos no pueden utilizar su aplicación comercial, lo solucione el problema sacando copias a las DBF que necesito, corro el proceso y al final antes de salir borro las tablas que copie (se me hace mucha perdida de tiempo, pero bueno no encontré otra solución mejor) (aunque otra opción seria decirles que se salieran, para correr la aplicación, pero se supone que esta es transparente o se supone que debería de serlo).
Bueno ahora el detalle que me comentan es que mi aplicación se enlaza con otra, (Yo mando la información que previamente genero y guardo en arreglos (ya esta hecho), y al enviarlos por medio del IIS (WebService) esta otra aplicación, la procesa y me la devuelve en un arreglo que recibo y almaceno en una tabla, solo que trae datos MUY GRANDES y como no encontré algún campo que compita con ese tamaño en VFP, pues declare un campo MEMO, para ello, pero NO LO SE MANEJAR, no se si es posible que lo pueda tratar como cualquier campo de texto o como se maneja, no lo se, por eso de mi preguntas sobre este punto:
1.- Cual es la cantidad de caracteres que puede permitir como máximo un campo MEMO
2.- Como puedo accesar a la información de un campo memo
3.- Como puedo almacenar unformacion en un campo memo
4.- Como puedo recorrer el contenido de un campo MEMO
5.- Un campo memo puede ser tratado como un campo texto
Gracias por todo y espero no haber omitido algo, con esto tengo más o menos como un mes (o más) y todavía no lo tengo terminado. (Soy un fracaso como programador)
No eres un fracaso como programador, tienes alma de ingeniero programador y leyendo la historia es de admirar tu pasión por resolver el problema.
1. La cantidad de "información" que puedes guardar en un memo es igual al límite del tamaño del archivo .fpt que se genera cuando crea campos de este tipo: 2Gigabytes. Por lo que imagino no será problema para tu solución.
2. La información de un memo se puede acceder igual que como lo haces con cualquier campo de tablas de vfp. La limitación más evidente es cuando la información almacenada sobrepasa los 256 caracteres, pues, ninguna variable podría soportar toda la información y ésta es cortada. Por tanto para comandos que se usan para extraer información, usa como origen de estas funciones el mismo nombre del campo memo y no una variable (ver punto 4).
3. Puedes almacenar información en un memo con el comando replace, igual que cualquier campo de una tabla vfp. El ejemplo que te di arriba (Segunda respuesta) es otra forma de almacenar información en un campo memo: "APPEND MEMO MemoFieldName FROM FileName", pues aquí necesitamos (según me comentas) llevar +- 8000 caracteres a ese campo. La idea sería llevar primero esos miles de caracteres a un txt o xml (si fuera el caso) y luego invocar ese comando para almacenar esa información.
4. Esta es un poco más elaborada y va a depender de la estructura del contenido que tiene actualmente tu campo memo y de lo que necesites extraer o acceder. Por mencionarte un ejemplo, un amigo requería extraer cierta información de un memo que tenía como datos la descripción de un xml y lo hicimos usando strextract así:
      lcTextoExtraido=STREXTRACT(MiCampoMemo,"<Conceptos>","</Conceptos")
     Así pudimos traer sólo esa sección del campo memo. La programación dependerá entonces de qué cosas requieras acceder o extraer del campo memo.
5. Si
Muchísimas gracias por tus observaciones y palabras de aliento, solo una ultima pregunta, no abra una manera de poder evitar el sacar copia de las tablas, para no hacer lento el proceso, porque como te comentaba son demasiado grandes las tablas y si se tarda en copiarse, con decirte que la carpeta donde están almacenadas tiene una capacidad de 45 gigas (lo bueno es que yo solo ocupo unas tablas y no todas) y eso que tienen almacenada información desde el 2006, se van a echar el servidor
Gracias y espero respuesta
¿Qué error te aparece cuando tratas de acceder las tablas de la aplicación comercial en el momento que algún usuario la utiliza? ¿Y Viceversa?.
Ninguno, solo comentaba por el detalle de que se me hace muy pesada la aplicación con el hecho de copiar procesar y borrar que estoy haciendo
Te hago la pregunta porque si entendí bien, ESE fue el motivo que te llevó a copiar las tablas.
Quieres evitar copiar las tablas, pero entonces, ¿por qué lo tienes que hacer?
Porque mientras que el usuario esta utilizando el programa comercial, yo no puedo accesar de ninguna forma a las tablas (ni siquiera un USE me deja) y si yo esto utilizando las tablas ellos no pueden utilizar la aplicación.
Es por eso que opte por copiarlas, pero son muy pesadas.
Je je
¿Entonces amigo, qué error te arroja al intentar usar el "use"?
Que la tabla tal (la que intentto accecesar en ese momento) no puede abrirse o utilizarse porque esta siendo utilizada por otro usuario. Lo mismo sucede con ellos si yo la estoy utilizando ellos no pueden trabajar con sus sistema.
Uff que malo: han diseñado la aplicación comercial para abrir las tablas de forma exclusiva. Y si no tienes las fuentes del programa no se puede hacer nada.
¿Cómo te puedo ayudar entonces?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas