Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-12-2005
dtomeysoto dtomeysoto is offline
Miembro
 
Registrado: dic 2005
Posts: 173
Poder: 19
dtomeysoto Va por buen camino
Que me aconsejan?

Amigos, debo de hacer una aplicación en Delphi 7 y usar SQL Server 2000. Los usuarios que van a trabajar con esta aplicación (Sistema Informativo) tienen derecho a poner información de un area o tema determinado con una frecuencia determinada (diaria, semanal, quincenal, mensual, etc), la información puede ser un archivo de word, excell, etc.
Estaba pensando en como guardar la información que va a poner cada usuario del sistema y se me han ocurrido 2 formas:
  1. en la tabla donde voy a guardar las informaciones de los usuarios tener un campo (no se todavía de que tipo) donde pueda yo almacenar el fichero que el usario quiere subir al sistema informativo, yo me aseguraría que estubiera compactado para que fuera mas pequeño.
  2. en la misma tabla en vez de guardar el archivo en un campo guardar la referencia al archivo, para esto me aseguraría de tener una estructura de directorios capaz de tener organizada la información por temas.
si escojo la primera variante no sabría que tipo de datos usar para el campo donde necesito guardar la información compactada y debería saber además como llenar el campo con la información.
si escojo la segunda variante debería la aplicación ser capaz de tener permiso de escritura en el momento de copiar el archivo en cuestión, me resultaría mas práctico desde Delphi poder ejecutar esta acción a como lo hacen algunos sistemas, que un usuario puede ejecutar algo con otras credenciales o permisos, no se si me hago entender.

bueno ya le hes he dado una breve explicación de lo que quiero hacer, tal vez alguien me pueda ayudar y darme una buena idea.

Damián.
Responder Con Cita
  #2  
Antiguo 09-12-2005
Avatar de DarKraZY
DarKraZY DarKraZY is offline
Miembro
 
Registrado: ago 2003
Posts: 460
Poder: 21
DarKraZY Va por buen camino
Hola Damián,

en el caso de tú primera opción deberías usar los campos BLOB. Estos son binarios y te permiten introducir cualquier dato de forma binaria (por ejemplo ficheros comprimidos).

Para tú segunda opción no entiendo muy bien lo que planteas. Pero a lo mejor te puede salir un problema y es el siguiente. Si el usuario A sube un fichero (C:\Mis Doc\Fichero.doc) y el usuario B quiere modificarlo o algo así... pues no va a poder, ya que no puede acceder a esa ruta.

Espero haberte ayudado

Un saludo.-
Responder Con Cita
  #3  
Antiguo 09-12-2005
dtomeysoto dtomeysoto is offline
Miembro
 
Registrado: dic 2005
Posts: 173
Poder: 19
dtomeysoto Va por buen camino
Hola, si usara para el primer caso los campos BLOB como me sugieres me haría falta saber como puedo entonces almacenar un archivo binario en ese campo, además dime si ese tipo de campo es el "binary" en SQL Server, me surge la duda ahora de que cantidad en Bytes podría almacenar en un campo de ese tipo.

Para la segunda variante voy hacer un poco mas explícito, cuando un usaurio de mi aplicación sube un archivo nadie podrá modificar su contenido, los restantes usuarios solo podrán bajarlo y ver su contenido, si alguno lo baja y lo modifica no podría porque no se lo voy a permitir volver a ponerlo donde estaba. Se entiende que la persona que pone una información ya la redactó, la revisó y la está haciendo pública para los demás.

Ahora, como es lógico el que pone informació pude equivocarse, solo él podrá quitar el archivo que subió y reemplazarlo por otro.

Mira este ejemplo para que me entiendas la segunda variante: en algún lugar de mi red tengo una carpeta compartida con el nombre Sistema Informativo, esta tiene dentro varias subcarpetas (una por cada área de mi empresa que va a subir información)

Sistema Informativo
  • Asesor Jurídico
  • ATM Economía Almacenes
  • Control de la Producción
  • Control Interno
  • Cuadros
  • Dirección Contable Financiera
  • Dirección Técnica Productiva
Le he dado permiso a todos los usuarios de lectura en todas las carpetas, al abogado permisos de escritura en la carpeta Asesor Juridico, al económico permisos de escritura en la carpeta Direccion Contable financiera y así a otros usuarios de mi red a las demás carpetas.

Ahora si yo creo en el servidor un usuario y le doy acceso total a la carpeta Sistema Informativo y a las demás subcarpetas, mantengo que todos los usuarios tengan permisos de lectura solamente cómo puedo lograr desde Delphi que el abogado al tratar de subir un archivo a su carpeta lo pueda hacer con las credenciales del usuario que tiene acceso total al Sistema Informativo, algo así como lo que brinda windows 2000 que te da la posibilidad de ejecutar un programa con otro nombre de usuario y contraseña, espero que sepan de que estoy hablando. Esto se ve también en algunos instaladores y los servicios de windows también se ejecutan con otra cuenta independientemente del usuario que inicie sesión.

Bueno creo que me he extendido un poco pero creo que ha sido necesario para poder explicar mejor la segunda variante porque la primera podría hacerse ineficiente con el tiempo.

Si alguno de ustedes conoce el WSUS (Windows Server Update Services) podrá llevarse una idea de lo que quiero hacer.

Sin más, Damián
Responder Con Cita
  #4  
Antiguo 09-12-2005
Avatar de DarKraZY
DarKraZY DarKraZY is offline
Miembro
 
Registrado: ago 2003
Posts: 460
Poder: 21
DarKraZY Va por buen camino
Acerca de los BLOB siento no poder ayudarte con el nombre específico que tiene en SQL Server (puedes revisar la ayuda para esta tarea). Cómo standard SQL el campo BLOB no suele tener límite, es un campo abierto al tamaño que tú quieres introducir.
Para encontrar la manera de grabar y leer un campo binario te sugiere que busques por estos foros

En el caso de tener los ficheros en carpetas y la posibilidad de trabajar con cuentas del sistema operativo te diré que es posible. Te recomiendo que busques por "servicios" o por "services" o "Application Services", ya que Delphi lo permite.

Espero serte de ayuda.
Un saludo.-
Responder Con Cita
  #5  
Antiguo 09-12-2005
Migpal Migpal is offline
Miembro
 
Registrado: jul 2005
Ubicación: Colombia
Posts: 91
Poder: 19
Migpal Va por buen camino
Los dos escenarios son diametralmente opuestos, en uno le dejas toda la carga administrativa al sistema operativo y en el otro al gestor de la BD, cuando dices:
Cita:
Empezado por dtomeysoto
Le he dado permiso a todos los usuarios de lectura en todas las carpetas,
quieres decir que es el sistema operativo quien controla el acceso a los archivos y en la BD lo unico que tendrias seria el path relativo al archivo, si lo pasas a blob tendrias que copiar los archivos a una tabla y administrarlos por roles sin depender de ninguna direccion a archivos en el sistema operativo.

Me hago entender?
Responder Con Cita
  #6  
Antiguo 12-12-2005
Avatar de User_baja1
User_baja1 User_baja1 is offline
Miembro
 
Registrado: feb 2005
Posts: 99
Poder: 20
User_baja1 Va por buen camino
Hola dtomeysoto,
respecto a la opcion 1, yo no le veo ningun problema, es más, sql server permite almacenar:

1. una base de datos de hasta 1,048,516 TB3
2. cada columna de una tabla se puede almacenar hasta 2 GB.


por lo que tienes espacio de sobra, ademas de esta forma te olvidas de la concurrencia y de los permisos ya que lo gestionas todo desde la DB.


Supongo que deberias de hacer un calculo de los limites de tu sistema, es decir, cuantos documentos se van a subir, de que tamaño medio y conseguir una prevision de tamaño para 10, 20 o 25 años. De esta forma puedes ver el tamaño teorico que tomaria. Llegado el limite, pues o bien creas mas columnas en la tabla o bien creas nuevas tablas o nuevas db's, pero de aqui 10,20 o 30 años habran pasado muchas cosas (hasta igual has pagado la hipoteca) ... y ya habrá alguien mas joven que tu que haga estos cambios.



El tipo de datos debe ser image y lo de guardarlo comprimido podrias usar un componente zip para enviar los datos mas pequeños a la db. O bien no usar nada y almacenarlo tal y como esté (depende del tamaño y graficos de los documentos).


Para gestionarlo desde delphi:

Código:
   
 TBlob(tabla.fieldByName('documento')).LoadFromFile
 TBlob(tabla.fieldByName('documento')).LoadFromStream
 
 TBlob(tabla.fieldByName('documento')).SaveToFile
 TBlob(tabla.fieldByName('documento')).SaveToStream
para ver el tamaño real de lo que almacenas:

Código:
  TBlob(tabla.fieldByName('documento')).BlobSize






Cita:
Empezado por dtomeysoto
Amigos, debo de hacer una aplicación en Delphi 7 y usar SQL Server 2000. Los usuarios que van a trabajar con esta aplicación (Sistema Informativo) tienen derecho a poner información de un area o tema determinado con una frecuencia determinada (diaria, semanal, quincenal, mensual, etc), la información puede ser un archivo de word, excell, etc.
Estaba pensando en como guardar la información que va a poner cada usuario del sistema y se me han ocurrido 2 formas:
  1. en la tabla donde voy a guardar las informaciones de los usuarios tener un campo (no se todavía de que tipo) donde pueda yo almacenar el fichero que el usario quiere subir al sistema informativo, yo me aseguraría que estubiera compactado para que fuera mas pequeño.
  2. en la misma tabla en vez de guardar el archivo en un campo guardar la referencia al archivo, para esto me aseguraría de tener una estructura de directorios capaz de tener organizada la información por temas.
si escojo la primera variante no sabría que tipo de datos usar para el campo donde necesito guardar la información compactada y debería saber además como llenar el campo con la información.
si escojo la segunda variante debería la aplicación ser capaz de tener permiso de escritura en el momento de copiar el archivo en cuestión, me resultaría mas práctico desde Delphi poder ejecutar esta acción a como lo hacen algunos sistemas, que un usuario puede ejecutar algo con otras credenciales o permisos, no se si me hago entender.

bueno ya le hes he dado una breve explicación de lo que quiero hacer, tal vez alguien me pueda ayudar y darme una buena idea.

Damián.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 02:14:47.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi