![]() |
Dbgrid & Memo
1 Archivos Adjunto(s)
Buenas tardes a todos los foreros.
Vamos a ver, antes de nada decir que he estado buscando lo habido y por haber sobre mi problema en los foros y efectivamente, tengo casi todo solucionado pero ahora he llegado a un punto muerto y necesito vuestra ayuda: Tengo un dbgrid que apunta a una tabla con un campo memo que quiero visualizar sin que salga el típico [MEMO]. Eso lo tengo solucionado, y el botón de cbsEllipsis puesto para que me sace los tres puntitos y habilitar entonces el evento onEditButtonClick. ... Los tres puntitos esos no abren ningún componente propio del Dbgrid con lo cual, la única opción es poner un dbMemo apuntando al campo (supongo) y visualizarlo o no dependiendo. Pues bien, a mi todo esto me da un error al editar el campo, cuando grabo, de ROWID no válido y no tengo ni idea de por qué es. Os adjunto el ejemplito tonto (básico) que tengo montado para que le puedan echar un vistazo y así decirme. Además, he estado trasteando algo con la propiedad PickList del campo en el dbgrid, me puede alguien decir para qué sirve y su funcionamiento? Gracias de antemano a todos. |
Hola Jymy!
Revisé el código que adjuntaste, sin embargo no he puedo ayudare a resolver el error que comentas porque en el form tienes una tabla que hace referencia a un Alias y obviamente no adjuntaste las bases de datos. Espero que no te moleste si publicó parte de tu código de ejemplo, es tan sólo para hacer algunas recomendaciones.
En primer lugar, es correcto utilizar el evento OnGetText para mostrar el contenido del campo y evitar que aparezca el texto [Memo] en el DBGrid, pero no considero necesario utilizar el evento OnSetText. Otra recomendación es que para editar el campo memo, utilices otra ventana que se mostrará cuando el usuario pulse sobre botón de edición en la celda del DBGrid. Por ejemplo en el evento OnEditButtonClick puedes hacer algo como esto:
De esta forma si la columna seleccionada está ligada con el campo que se llama 'LARGO', entonces abres otra ventana (Form2) con el campo memo que quieres editar. ********************************************************* Por otra parte la propiedad PickList sirve para mostrar una lista desplegable dentro de una celda del DBGrid, es como un ListBox en donde puedes agregar elementos para que el usuario los seleccione al momento de editar la celda. Un ejemplo:
Esto mostrará una lista desplegable en la primera columna del DBGrid. Espero que se haya aclarado algo, un saludo. |
Gracias pero no me ha ayudado
Te comento.... No adjunté la tabla de la base de datos porque supuse que se la podrían replicar, o crear una nueva, se trata de una tabla de oracle con dos campos, 'corto' (varchar2(80)) y 'largo' (Varchar2(500)).
Mira a ver si ahora puedes replicar el error, haciendo correr el programa please, porque vale, muchas visitas al hilo, pero nadie me ha dado una solución o consejo. En cuanto a tus anotaciones de tu respuesta, tienes razón en todo. El SetText lo utilizo para hacer pruebas tontas, y lo de sacar una ventanita a parte..... ya sé que es la mejor solución pero si eso se lo explicas tu a mi jefe ok? jejeje. El tiene razón, la verdad y coñas a parte, en este caso nos convendría no tener que sacar una ventanita a parte. Un saludo. |
Hola jymy!
Te comentó que efectivamente habia creado una tabla con dos campos para tratar de replicar el error, pero con mi tabla funciona correctamente. Lo único que me brinca un poco es que en las propiedades del campo "LARGO" en la tabla que colocaste en el Form, aparece la clase de campo como [fkInternalCalc] y debería aparecer [fkData]. Bueno ahora que has dado más información trataré de ayudarte a resolverlo, Con respecto al asunto de editar el memo sin abrir otra ventana, en un principio me confundí porque creí que el propósito de colocar el botón de edición en la celda era para abrir el campo por separado. Entonces creo que debo retractarme, este caso si tiene sentido usar OnSetText como lo habias puesto para editar el campo directamente en el DBGrid (una dispulpa por sugerir cambiar algo que era correcto). Entiendo perfectamente el asunto de los caprichos de los jefes, a mi me ocurre todo el tiempo. :D Un saludo y seguimos en contacto. |
Gracias pero sigo colgado
Buenas de nuevo Héctor.
Gracías por tu respuesta... este componente es una "mierda" para estos casos, después de romperte la cabeza para que no aparezca el horrible [MEMO], y conseguirlo, cuando quieres grabar te da ese error asqueroso e inexplicable.... Además, para terminar de quemarme, aunque da el error de "invalid rowid" el muy capullo del BDE (creo que es el culpable) graba los cambios !!!!!! En fin, inexplicable, a ver si se te ocurre algo más. Pd.- Voy a probar con el RXDBGrid (de las rusas) que creo haber leído que solucionan varios problemas con Memos, mientras tanto, lo dicho, cualquier cosa que se te ocurra.... Gracias !!! |
Casi Conseguido!!!!!!!!!!!!!
CASI CONSEGUIDO!!!!!!!!!!!!!
Buenas a todos los que les interese el problema del mítico 'INVALID COLUMN ROWID' En esta página http://www.scalabium.com/smdbgrid.htm hay un componente muy chulo que intergra el RXDBGrid y que tiene bastantes mejoras. Pues bien, con este componente sigue dando el error de marras pero si en la tabla, en el evento AfterPost ponemos table1.Close; table1.Open; table1.Refresh; El índice del rowid vuelve a ser estable !!!!! Problema solucionado casi porque no sé que tal irá esto con tablas inmensas, si os sirve de referencia con 20000 registros es inmediato. Un saludo y espero que os sirva todo esto. |
La franja horaria es GMT +2. Ahora son las 07:56:37. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi