Power Builder - Documentos... (para Oscar)

 
Vista:

Documentos... (para Oscar)

Publicado por The Bug (13 intervenciones) el 31/05/2003 07:38:49
Gracias amigo Oscar por acordarte de mi.
La verdad ya estaba a punto de escribir otro post. La verdad no se muy bien que hacer. La idea general del asunto es tener los siguientes documentos registrados:
-memorandums (para personal)
-cartas(de/para clientes/proveedores)
-contratos (de/para clientes/proveedores)
-contratos (para personal)
-contenido de mails (de clientes/proveedores)
El asunto es que al hacer una busqueda por personal, cliente o proveedor pueda encontrar el documento solicitado o incluso hacer busqueda dentro de su contenido.
Como estamos desarrollando un sistema a medida la gerencia (bueno en realidad el jefe de sistemas) desea que todo lo maneje el sistema incluso generar los documentos en el sistema mismo. Para mi es una idea demasiada trillada pero si es posible habra que darles el gusto. con un amigo estamos viendo la forma de fragmentar la informacion de cada documento y dividirlo por columnas (fecha,de,al,contenido,etc) y luego armar el documento en un datawindows pero estamos temerosos de las bondades que pueda tener el power para editar texto. una de esas consultas era la de guardar el formato del texto (tabulaciones,tipo de letra,color,tamaño) en la base de datos pero vemos que no hay forma de hacerlo efectivamente. Quisieramos saber si hay una forma de que lo que escribimos en un control richtext podamos grabarlo en la base de datos para luego recuperarlo de la misma forma en que lo editamos, pero creo que no hay un tipo de dato que soporte esto. La verdad estamos mas perdidos que Atahualpa en la guerra de las galaxias y el jefe de sistemas que tenemos (que es un clippero puro) nos presiona demasiado con el asunto.
Espero que nos den alguna idea
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Documentos... (para Oscar)

Publicado por The Bug (13 intervenciones) el 31/05/2003 07:39:51
Para Oscar:
De todas maneras me interesaria saber cual es el procedimiento para grabar un documento word o excel en un tipo de dato binary.
¿como lo grabo en la base de datos?
¿como lo recupero?
¿necesito algun ocx o dll especial?
Quiza sea bueno tener esta idea presente para debatirlo en una reunion con el jefe de sistemas. Te agradeceria mucho tu ayuda.
Gracias

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Documentos y PB (Parte 1)

Publicado por Oscar (1178 intervenciones) el 31/05/2003 17:13:21
Acá van los pasos para guardar y recuperar objetos OLE (archivos) en tu BD. Te sugiero que crees un ejemplo con los mismos nombres y tipos de datos que te propongo.

1. Creas una tabla, donde un campo debe ser tener un tipo de dato BINARY o VARBINARY (supongo que la diferencia entre ellos es lo mismo que CHAR y VARCHAR. Es decir, cuando se define un campo con un tipo de dato Char de 30 caracteres y sólo utiliza 20 caracteres, PowerBuilder ocupará los 30 caracteres definidos; mientras que si define un campo con VarChar de 30 caracteres y el nombre que escribe sólo ocupa 20 caracteres, PowerBuilder ocupará solo los 20 caracteres ocupados).

Ejemplo de campos de mitabla:

num_cod (char) //puede ser la clave.
nombre (varchar)
......
......
archivo(binary)// Máximo de 8000 en SQL Server y 32767 en ASA. Que acepte Null

2. Creas un objeto DataWindow e incluyes todos los campos de tu tabla (no podras hacerlo del campo archivo (binary), ya que aparece un mensaje indicando que debes usar instrucciones SQL. No te preocupes.

3. En una ventana incluyes los siguientes elementos:
* Un control DataWindow (que está relacionado con tu objeto DataWindow).
* Fuera de los botones clásicos (Anterior, Siguiente y Nuevo registro). Incluyes los botones: ABRIR y GUARDAR.
* Insertas un OLE Control que inserte: "Documento de Microsoft Word" (que se llamará: ole_archivo y en su propiedad DisplayType, es mejor que cambies, displascontent! por displayasicon!)

(CONTINUA...)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Documentos y PB (Parte 2)

Publicado por Oscar (1178 intervenciones) el 31/05/2003 17:18:30
(CONTINUACION...)
4. En la ventana, declaras las siguientes variables de instancia:

string is_path
string is_ci

5. Los scripts de los botones son:

* Script del Botón ABRIR:
------------------------------
//con este script se abre y muestra en el OLE el archivo seleccionado
string ls_pathname, ls_filename, ls_filtro

//asignas el filtro de extension para los archivos
ls_filtro = "DOC Files (*.doc),*.doc," + "Excel Files (*.xls),*.xls,"

GetFileOpenName ( "Archivos", ls_pathname, ls_filename , "doc", ls_filtro)

//insertas en el objeto OLE el archivo seleccionado si todo ha sido exitoso
IF ole_archivo.insertfile(ls_pathname)=-1 THEN
MessageBox("Error", "Error al procesar la tarea de apertura de archivo, verifique")
ELSE
//esta variable de instancia guarda el valor del path absoluto de archivo de donde debe rescatarse
is_path=ls_pathname
END IF
---------------------------------
(CONTINUACIÓN...)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Documentos y PB (Parte 3)

Publicado por Oscar (1178 intervenciones) el 31/05/2003 17:20:15
(CONTINUACION...)
* Script del botón GUARDAR
---------------------------------
//declaracion de la variable local tipo blob
blob lblb_archivo
integer N

//Lees el número de la fila actual
N=dw_1.GetRow()

//obtienes desde el control los datos del archivo
lblb_archivo=ole_archivo.objectdata

//ingresas el blob a la base de datos
UPDATEBLOB mitabla SET archivo = :lblb_archivo
WHERE num_cod=:N;

IF sqlca.sqlcode=0 THEN
messagebox('','Ingreso existoso.')
ELSE
messagebox('','Error en el ingreso')
END IF

//Guardas el control DataWindow
Dw_1.Update()
------------------------------------
6. Cuando estés en un determinado registro, para recuperar tu objeto OLE (dando doble clic en ese icono). Debes incluir el siguiente script en el evento RowFocusChanged del Control dataWindow.
-------------------------------------
//asignacion de la variable local blob
blob lblb_archivo
Integer N

//Lees el número de fila actual
N=dw_1.GetRow()

SELECTBLOB archivo
INTO :lblb_archivo
FROM mitabla
WHERE num_cod =:N;
//Donde num_cod es el argumento o criterio para rescatar desde la base de datos.

ole_archivo.objectdata=lblb_archivo
------------------------------------
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Documentos y PB (Aclaraciones)

Publicado por Oscar (1178 intervenciones) el 31/05/2003 17:22:10
ACLARACIONES:
* La prueba de esta aplicación, la realicé con los tipos de datos del ASA (no con SQL Server).
* Con ASA, se podian abrir archivos hasta de 32 KB, no sé lo que sucederá con SQL Server; pero si deseas, tengo un pequeño truco que obliga a leer archivos de cualquier tamaño. (puedes pedir más adelante).
* Cuando abras tu tabla, no te sorprendas si en el campo archivo del tipo binary no hay nada.
* Todos los archivos que abres (por ejemplo de una carpeta); si deseas puedes borrarlos. Total ellos ya están el base de datos. Y cuando quieras convertir un archivo de la base de datos a un archivo normal, sólo debes ejecutarlo con tu aplicación de PB, y luego en el Word, debes ir a Archivo/Guardar copia como...
* Cada vez que hagas cambios en uno de tus archivos, por ejemplo en Word, no te sirve de nada guardarlo en Word, debes volver a la ventana de tu aplicación PB y pulsar el botón GUARDAR.
* La búsqueda tendrás que hacerlo por código del documento, nombre, etc. Creo (no estoy seguro) hay una función para buscar el contenido dentro de un OLE.

Me dices, si funcionó la cosa ya que no hice la prueba con SQL Server.
Finalmente, la sugerencias de los otros foristas son bienvenidas; ya que no tengo experiencia con esto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Documentos y PB (Ultima consideración)

Publicado por Oscar (1178 intervenciones) el 31/05/2003 18:20:12
El problema mayor que vas a tener y quizá no corra tu aplicación es en el tamaño de los archivos a recuperar. Para hacer la prueba, corregí los siguientes puntos:

* En el punto 1, el campo archivo de tipo binary, asigná por seguridad la mayor capacidad (8000)
* En el punto 3, debes insertar un OLE control del tipo "Documento de WordPad", no del tipo "Documento de Microsoft Word". Ya que un documento de Word, ocupa aunque esté casi vacío, más de 20K; mientras que uno de WordPad (rtf), dos páginas ocupan menos de 10 KB; por ende, también debes corregir el punto 5, por:
//asignas el filtro de extension para los archivos
ls_filtro = "RTF Files (*.rtf),*.rtf," + "Excel Files (*.xls),*.xls,"

Nota: Sin estas correcciones no correrá tu aplicación; ya que en ASA puedes trabajar tranquilamente con archivos de una tamaño aceptable de 32 KB; mientras que en SQL Server apenas creo serán de 8 KB. Salvo que exista un tipo de dato, que yo desconozco.

...Y por favor, crea de una vez tu correo. Podía haberte enviado el ejemplo a tu e-mail y tambien decirte estas cosas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

La mejor solución con SQL Server

Publicado por Oscar (1178 intervenciones) el 01/06/2003 18:32:03
Hola "The Bug"
Los posts anteriores funcionan perfectamente con ASA; (cuando se usa Long binary), que manipula archivos sin límite de tamaño. No funciona con SQL Server. ¡Olvídate de todo lo anterior!
La solución es:
1. En tu tabla, usas el tipo de dato IMAGE:
cod_univers (char)
nombre (varchar)
......
miarchivo(image)
2. Creas tu objeto datawindow; pero no incluyes el campo miarchivo(además no podrás).
3. En tu Objeto DataWindow, insertes el control: Create Large Binary/Text Database OLE Object (aquí estaba el detalle).
4. En la caja de dialogo que aparece, llenas asi:
* Table:
mitabla
* Large Binary/TextColumn:
Eliges el campo que tiene el campo IMAGE; pero aparece BLOB. Es decir:
miarchivo (blob)
* Key Clause
Se refiere más o menos al argumento de recuperación. Escribes:
cod_univers = : cod_univers
* OLE Class
Tipo de archivo que deseas recuperar:
Word.Document 8. Documento de Microsoft Word
* Client name Expresión
Es el mensaje que aparece en la barra de título del documento. Usá comillas:
"Documento de "
Nota: Para más detalles, ve la ayuda. Los datos que has llenado en la caja de diálogo aparecen en las propiedades del OLE.

Cuando quieras escribir o visualizar algo en ese objeto OLE. Sólo tienes que dar doble clic y listo. Y cuando edites y quieras guardar los cambios de ese documento, debes hacerlo con el botón Guardar de tu ventana que contiene el DataWindow.
PD: Existe otro método para manipular archivos sin guadar en tu BD; pero eso ya es otra historia...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:La mejor solución con SQL Server

Publicado por The Bug (13 intervenciones) el 01/06/2003 21:44:58
Hola y gracias Oscar.
Voy a probar lo que escribiste. Y disculpame si no incluyo mi correo pero es que en esta empresa tenemos restringido el ingreso a portales como hotmail, yahoo,msn,etc. y es aqui donde puedo tener acceso a internet libremente. Tenemos un correo pero es exclusivamente para uso del jefe de sistemas. Como te dije voy a hacer las pruebas y si tengo alguna duda te aviso.
Nuevamente Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar