Access - Réplicas

 
Vista:
sin imagen de perfil

Réplicas

Publicado por Vicente (30 intervenciones) el 10/04/2009 11:43:38
Buenos días a todos:
Tengo que abordar el diseño de una aplicación, pero el planteamiento de su distribución y posterior actualización de datos es el que me está dando cierto problema. Os cuento: Tengo que diseñar una aplicación que controle un cierto número de alumnos, divididos por poblaciones y tutorizados por distintos profesores. La aplicación que tendrá cada profesor servirá para controlar la evolución de los alumnos que tenga asignados en su población y yo tendré la "aplicación central" que recopilará toda la información de todos los profesores y de todos los alumnos. Había pensado distribuír la aplicación replicada a cada uno de los profesores, pero no me gusta, pues no quiero que vean la información de alumnos de otras poblaciones o los escritos y comentarios que hagan el resto de profesores, al actualizar la réplica suya con la aplicación central que yo tengo. Entonces es ahí donde tengo la duda, es decir, cómo hacer para que ellos creen un fichero para que yo luego lo pueda importar a mi aplicación y que cada uno de ellos sólo tenga sus alumnos y seguiemientos y sólo yo tenga los de todos. Cabe decir que vía online no es viable, pues los hay que en dichas poblaciones tienen un acceso restringido a internet, por lo que en esos casos, la actualización se haría desde el medio extraíble que trajera el profesor. No sé, quizá me estoy complicando mucho y hay una forma más sencilla de hacerlo.
Si estoy ya se ha comentado en algún hilo, por favor, indicádmelo.
Cualquier ayuda será bienvenida.

Gracias.
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:Réplicas

Publicado por Chea (1015 intervenciones) el 10/04/2009 12:26:28
Yo no usaría réplicas.

Teniendo en cuenta que cada profesor tiene sus alumnos, es prácticamente imposible que se produzca un conflicto de concurrencia, pues nunca van a intentar acceder al mismo alumno dos profesores distintos.

Si creamos ID para alumnos que sean una combinación del ID del centro y un autonumérico, bastaría con una serie de consultas de actualización u datos anexados, en vez de andar sincronizando réplicas. Cada centro tendría únicamente sus propios datos y no tendría que actualizar nada de otros, simplemente proporcionar información al sistema central.

Una alternativa al ID combinado es usar un GUID propio para cada alumno; de esa, manera, si un alumno cambia de centro, no habría que crearlo de nuevo. El GUID es una clave numérica (hay que guardarla como texto) tan larga que no hay probabilidad de que se repita, de manera que es única, se genere donde se genere. Cuando replicamos una BD, lo primero que hace Access es cambiar los ID por GUID, de manera que estaríamos siguiendo la misma estrategia que las réplicas.

Por si te interesa, te copia una función para generar GUIDs escrita pro Jesús López:

Option Explicit
Option Base 0

Public Const S_OK = &H0

Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type

Declare Function CoCreateGuid Lib "OLE32.DLL" (id As GUID) As Long
Declare Function StringFromGUID2 Lib "OLE32.DLL" (id As GUID, ByVal str As String, ByVal cars As Long) As Long
Public Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As String, ByVal cchWideChar As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long

Function GetGUID() As String
Dim str As String * 80
Dim str2 As String * 40
Dim id As GUID
If CoCreateGuid(id) <> S_OK Then GoTo Errores
If StringFromGUID2(id, str, 39) = 0 Then GoTo Errores
If WideCharToMultiByte(0, 0, str, 38, str2, 40, 0, 0) = 0 Then GoTo Errores
GetGUID = Mid$(str2, 2, 36)
Exit Function
Errores:
GetGUID = "00000000-0000-0000-0000-000000000000"
End Function

Saludos
José Bengoechea Ibaceta
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
sin imagen de perfil

RE:Réplicas

Publicado por Vicente (30 intervenciones) el 14/04/2009 00:32:00
Gracias Chea. Hasta aquí te he seguido. El problema es la segunda parte, es decir, cómo actualizar la base de datos "central", que es la que yo manejo, teniendo en cuenta que no va a ser viable lo de servidor-cliente y es en la que se van a guardar todos los datos de todos los alumnos. Esta es la parte que se me complica, ya que los datos van a ser básicamente formato texto, memo e incluso imágenes.
Gracias nuevamente.
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:Réplicas

Publicado por Chea (1015 intervenciones) el 14/04/2009 22:09:03
Sería una combinación de consultas de Actualización y de Datos Anexados.

A las tablas que hay que mantener yo les añadiría un campo fecha/hora cuyo valor predeterminado fuera Now(), de manera que se guarda la fecha y hora en que se crea el registro. En las consultas de datos anexados sería cuestión de añadir los registros cuya fecha/hora sea superior a la última guardada para ese colegio.

Después de añadidos los registros haría consultas de actualización para reflejar los cambios en datos antiguos.

Saludos
José Bengoechea Ibaceta
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