Access - Distribuir actualizaciones de un programa en access

   
Vista:

Distribuir actualizaciones de un programa en access

Publicado por oscar info@webandgrafics.com (3 intervenciones) el 09/04/2013 13:59:59
Buenos dias:

Empiezo en esto, y este foro es el mejor que he encontrado, por lo que pretendo participar activamente en todo lo que pueda... aunque soy junior en esto...

Mi problema:
Tengo access 2007 con las Developer Tools para compilar en exe. Tengo un programa que hice a un cliente hace poco y ahora me ha pedido una ampliacion y modificacion de algunos controles... pero no se como hacer/compilar la base nueva para que no pierda los registros que tiene el cliente.
Las tablas no se modificaran, ni las consultas... solo informes, formularios y añadir un par de tablas mas.
El problema es que al grabar la nueva machaca la vieja. Deduzco que cuando compilas con las tools en exe hay un apartado que dice "version" y ahi creo que esta la solucion, pero he probado de mil maneras y siempre me borra la anterior.
Tambien he leido que hay que configurar un Script para antes de grabar los datos... pero no pone ni que script es, ni donde bajarlo, ni el codigo para hacerlo... se quedo muy ancho el tio con su respuesta.

Como lo hago????
Es muy dificil encontrar informacion porque si pones actualizar y access en la misma frase te salen tropecientosmil registros de como actualizar access y no de como actualizar un programa hecho con access.

Gracias de antemano (y seguramente tambien de postmano)
Un saludo
Oscar
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

Distribuir actualizaciones de un programa en access

Publicado por 2PL (461 intervenciones) el 09/04/2013 14:57:01
Tienes que tener dos BD una con las tablas y otra con los demás objetos. A la BD de objetos le tienes que vincular las tablas y cuando hagas alguna modificacion (sobre la MDB) solo tendrás que pasarle al usuario la BD de objetos una vez compilada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar

Distribuir actualizaciones de un programa en access

Publicado por oscar (3 intervenciones) el 09/04/2013 15:15:07
Justo ahora estaba leyendo en la documentacion de access:

http://office.microsoft.com/es-es/access-help/importar-o-vincular-a-los-datos-de-otra-base-de-datos-de-access-HA001227658.aspx

y he hecho unas pruebas, pero me da dos problemas mas:
1) Al crear el exe (paquete de soluciones) me importa los datos de la tabla vinculada y deja solo un archivo, lo he probado en una maquina virtual para asegurarme de que no la cogia de mi pc, pero no, la base funciona, por lo que al crear el exe se Importan los datos de la tabla vinculada.

2)Al instalar la actualizacion me obliga a desinstalar la anterior, lo que implica que borra la base principal, almenos de la primera instalacion,supongo que la solucion seria por cambiar el exe por un .bat para que instale solo los formularios y copie la base de las tablas... o hacer un unico exe que ejecute otros dos (el de las tablas y el de los formularios)...

.... Pero vamos bien creo!!!!!..... otra cosa que he pensado es crear una macro/Codigo para que ejecute la vinculacion automaticamente despues de instalarlas la actualización, asi el archivo de actualizacion solo tendra los formularios.

Lo ves factible?
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

Distribuir actualizaciones de un programa en access

Publicado por oscar info@webandgrafics.com (3 intervenciones) el 10/04/2013 00:47:20


Bueno... Lo he solucionado creo, y la solucion esta bastante bien... aunque no se si afecta a la estabilidad de la base.
(Al final menciono la fuente)

Pasos que he seguido:
1/ He añadido esta linea en el inicio del formulario de presentacion (una caratura de busqueda en mi caso)

Private Sub Form_Current()
RefreshLinksToPath Application.CurrentProject.Path
End Sub

2 - Crear un Modulo en VB con el codigo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Public Function RefreshLinksToPath(strNewPath As String, _
    Optional OnlyForTablesMatching As String = "*") As Boolean
 
    Dim collTbls As New Collection
    Dim i As Integer
    Dim strDBPath As String
    Dim strTbl As String
    Dim strMsg As String
    Dim strDBName As String
    Dim strcon As String
    Dim dbCurr As DAO.Database
    Dim dbLink As DAO.Database
    Dim tdf As TableDef
 
    Set dbCurr = CurrentDb
 
    On Local Error GoTo fRefreshLinks_Err
 
    'First get all linked tables in a collection'
    dbCurr.TableDefs.Refresh
    For Each tdf In dbCurr.TableDefs
        With tdf
            If ((.Attributes And TableDefAttributeEnum.dbAttachedTable) = TableDefAttributeEnum.dbAttachedTable) _
               And (.Name Like OnlyForTablesMatching) Then
                collTbls.Add Item:=.Name & .Connect, Key:=.Name
            End If
        End With
    Next
    Set tdf = Nothing
 
    ' Now link all of them'
    For i = collTbls.Count To 1 Step -1
        strcon = collTbls(i)
        ' Get the original name of the linked table '
        strDBPath = Right(strcon, Len(strcon) - (InStr(1, strcon, "DATABASE=") + 8))
        ' Get table name from connection string '
        strTbl = Left$(strcon, InStr(1, strcon, ";") - 1)
        ' Get the name of the linked database '
        strDBName = Right(strDBPath, Len(strDBPath) - InStrRev(strDBPath, "\"))
 
        ' Reconstruct the full database path with the given path '
        strDBPath = strNewPath & "\" & strDBName
 
        ' Reconnect '
        Set tdf = dbCurr.TableDefs(strTbl)
        With tdf
            .Connect = ";Database=" & strDBPath
            .RefreshLink
            collTbls.Remove (.Name)
        End With
    Next
    RefreshLinksToPath = True
 
fRefreshLinks_End:
    Set collTbls = Nothing
    Set tdf = Nothing
    Set dbLink = Nothing
    Set dbCurr = Nothing
    Exit Function
 
fRefreshLinks_Err:
    RefreshLinksToPath = False
    Select Case Err
        Case 3059:
 
        Case Else:
            strMsg = "Error Information..." & vbCrLf & vbCrLf
            strMsg = strMsg & "Function: fRefreshLinks" & vbCrLf
            strMsg = strMsg & "Description: " & Err.Description & vbCrLf
            strMsg = strMsg & "Error #: " & Format$(Err.Number) & vbCrLf
            MsgBox strMsg
            Resume fRefreshLinks_End
    End Select
End Function


--------------
Hasta aqui lo he seguido de http://es.softuses.com/70806

Y para distribuirlo:
He creado un ejecutable de la base front-end (la de los formularios) con las herramientas developer, y lo he recompilado con INNO, donde se ejecuta el instalador creado antes y le añade el archivo de la base de datos back-end (las tablas).

Al arrancar el programa este verifica que las tablas vinculadas esten disponibles y si no estan, busca en el directorio de instalacion.

Lo he compilado asi porque INNO genera mejores accesos (incluso icono de desinstalación) que el compilador de access.

La unica pega es que antes de actualizar has de desinstalar la version anterior... supongo que debo añadir algun tipo de macro ... pero esto ya empieza a coger forma...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve

Distribuir actualizaciones de un programa en access

Publicado por xve (114 intervenciones) el 10/04/2013 08:01:54
Hola Oscar, muchas gracias por comentarlo!!!
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

Distribuir actualizaciones de un programa en access

Publicado por Cecilia (8 intervenciones) el 04/02/2014 20:51:36
Hola!
Acabo de terminar un sistema para un cliente y lo que le instalé en su máquina es el ejecutable que es un .accde (access 2010) y yo como administradora tengo el .accdb. Cada vez que hago alguna actualización a nivel de objetos y genero el .accde reemplaza la data que tenía el cliente.
Hay alguna manera de que respete el contenido de las tablas? si es como ud. dice de generar dos BD, cuál es la que accesa el cliente? cómo hago en visual para referenciar las tablas de otra BD? me podría ampliar un poco esta info?¨
Muchas gracias de antemano
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

Distribuir actualizaciones de un programa en access

Publicado por angel (1 intervención) el 21/07/2014 20:45:48
Una manita

Tengo 60 y picos pero llevo desde los 80 con access

Si te entendi tiene una base de datos gestion.accdb en ella tines los formularios informes codigo etc

Puede ser los datos esten en esa misma base (gestion.accdb) NO DEBES HACERLO, ARRIBA hay unos botones y uno de ellos separa quedando la base de datos Gestion.accdb sin tablas , y genera una nueva con mismo nombre con una extension mas que tu lediste

asi que ahora tenemos dos base la original gestion.accdb y la nueba gestion.datos

Si compilas la gestion.accdb genera , si esta todo bien gestion.accde que estara conectada a gestion.datos

asi si modificas codigo o form o report en gestion.accdb simplemente compila , verifica y se la mandas al cliente o bien si sabes le colocas un form de descarga automatico o tu mismo automaticamente mandas mail con adjunto empaquetado zip


aunque esto funciona generalmente en la gestion.accdb habria tablas generales como user , acesos a tblas form o repot pero ya es mas complicado aunque relativamente facil

Mi mail lo tienes
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