FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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:
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. |
#2
|
||||
|
||||
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.-
__________________
Si no lo sabes, necesitas leerlo |
#3
|
|||
|
|||
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
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 |
#4
|
||||
|
||||
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.-
__________________
Si no lo sabes, necesitas leerlo |
#5
|
|||
|
|||
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:
Me hago entender? |
#6
|
||||
|
||||
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 Código:
TBlob(tabla.fieldByName('documento')).BlobSize Cita:
|
|
|
|