Bbdd access

kanuto

En Practicas
Modelo
BMW 320DA
Registrado
14 Feb 2008
Mensajes
313
Reacciones
3
Buenas,

Necesito un poquito de ayuda con access, no sé si por aquí habrá alguien que pueda echarme una manita, de todas formas, gracias.

Resumo, tengo entre manos una base de datos a la cual le tengo que incorporar archivos adjuntos, el problema viene que la limitación actual de Office 2007 es de 2 gb, y al ritmo que voy me lo como en 4 meses.

Dudas, hay forma de eliminar esa limitación?, vincular un odbc a varias mdb?, puff, no sé, estoy atascado.

Ya he pensado en hipervínculos y disponer una carpeta en red, pero seria un caos.

Un cable, por favor.
 

SPTR

Forista Legendario
Moderador
Miembro del Club
Registrado
18 Ago 2005
Mensajes
9.209
Reacciones
860
Microsoft, para variar, siempre con límites absurdos para los tiempos que corren, como no...

Prueba la 2010 a ver.
 

i_minex

Forista Legendario
Modelo
E46-E85-987.2
Registrado
24 May 2005
Mensajes
8.078
Reacciones
4.075
Una base de datos access con mas de 2gb no es recomendable, no porque a microsoft se le haya entojado, sino porque una base de datos access no es lo mismo que una SQL Server o una MySql...

Yo te recomendaria hacer un cambio a otra plataforma, por ejemplo SQL Server. Si no puedes, compacta la base de datos muy regularmente...

Otra solucion seria guardar los datos adjuntos que comentas fuera de la base de datos.

Un saludo! ;-)
 

Kamala

Forista Legendario
Modelo
Z4 2.0i - 318tds
Registrado
11 Dic 2005
Mensajes
8.917
Reacciones
295
Access 2010 sigue limitando el tamaño de las bases de datos a 2Gb.

Si no quieres cambiar de plataforma podrías dividir esa base de datos en varias, hay un asistente para ello, écha un vistazo a la ayuda de Access buscando "Dividir una base de datos".
 

kanuto

En Practicas
Modelo
BMW 320DA
Registrado
14 Feb 2008
Mensajes
313
Reacciones
3
Gracias.

La bbdd en sí misma nunca vá a superar los 2 gb, son los ficheros adjuntos lo sí lo haran, he estado buscando código para hacerlo como gestión documental, explico, quiero vincular un pdf a un registro, en vez de hacerlo como adjunto en la tabla, crear un formulario que te pida donde está el archivo, lo copie a la ruta que yo diga al access, y lo pege con el nombre que yo le diga.

el problema está que el código que he conseguido es muy complejo, y hay algo que no funciona.

voy a darle una vuelta y lo comparto con vosotros, a ver si veis el error.

un saludo.
 

i_minex

Forista Legendario
Modelo
E46-E85-987.2
Registrado
24 May 2005
Mensajes
8.078
Reacciones
4.075
kanuto;9162373 dijo:
Gracias.

La bbdd en sí misma nunca vá a superar los 2 gb, son los ficheros adjuntos lo sí lo haran, he estado buscando código para hacerlo como gestión documental, explico, quiero vincular un pdf a un registro, en vez de hacerlo como adjunto en la tabla, crear un formulario que te pida donde está el archivo, lo copie a la ruta que yo diga al access, y lo pege con el nombre que yo le diga.

el problema está que el código que he conseguido es muy complejo, y hay algo que no funciona.

voy a darle una vuelta y lo comparto con vosotros, a ver si veis el error.

un saludo.

Utilizas el propio MSACCESS para acceder a los datos, o utilizas algun otro programa ? Si es asi, dinos con que lenguaje estas trabajando.

Para el tema de los datos adjuntos, puedes crear un campo TEXTO y allí le pones la ruta física. Si trabjas con red, seria un poco mas complicado.

Expon que quieres y como lo has hecho y a ver si te podemos ayudar.

Un saludo! ;-)
 

kanuto

En Practicas
Modelo
BMW 320DA
Registrado
14 Feb 2008
Mensajes
313
Reacciones
3
i_minex;9162544 dijo:
Utilizas el propio MSACCESS para acceder a los datos, o utilizas algun otro programa ? Si es asi, dinos con que lenguaje estas trabajando.

Para el tema de los datos adjuntos, puedes crear un campo TEXTO y allí le pones la ruta física. Si trabjas con red, seria un poco mas complicado.

Expon que quieres y como lo has hecho y a ver si te podemos ayudar.

Un saludo! ;-)

Utilizo Access 2007, que me es suficiente.

Buena idea, como hago para que el doble clic en el formulario me lance la busqueda del link.

Es algo parecido a la gestión documental, tengo que guardar o vincular pdf's a un registro de una tabla. Similar a escanear un documento por cada ficha de cliente.

Me he explicado?

Gracias tio.
 

i_minex

Forista Legendario
Modelo
E46-E85-987.2
Registrado
24 May 2005
Mensajes
8.078
Reacciones
4.075
Bien, yo creo que deberías usar el comando "Shell" que tiene MSACCESS.

He encontrado un ejemplo ( no lo he probado ) pero vendría a ser algo parecido a esto:


Código:
Dim PathRead As String 
Dim PathFich As String 

PathRead = "C:\Archivos de programa\Adobe\Reader 8.0\Reader\AcroRd32.exe" 
PathFich = "C:\SCANIN~1\MAD-" & Me!ID & ".PDF" 

Shell PathRead & " " & PathFich, vbNormalFocus

Con el comando "Shell" aprovechas las funciones de Windows y ejecutas el "AcroRd32.exe" y le pasas como parámetro la ruta dónde esta el PDF.

Yo solo guardaría la ruta física dónde se encuentra el fichero, por ejemplo:

Campo: pathFile
Tipo: Texto(255)

Así de esta forma tendrás los ficheros fuera de la base de datos, ahorrandote un montón de espacio.

Nos cuentas si te ha funcionado!

También te adjunto la página oficial de Office con una explicación mas amplia de la función Shell:

Shell Function - Access - Microsoft Office

Un saludo! ;-)
 

kanuto

En Practicas
Modelo
BMW 320DA
Registrado
14 Feb 2008
Mensajes
313
Reacciones
3
Muchas gracias, i_minex

Es una muy buena idea. Me pongo con ello y cuento.

Un saludo.
 

i_minex

Forista Legendario
Modelo
E46-E85-987.2
Registrado
24 May 2005
Mensajes
8.078
Reacciones
4.075
kanuto;9176517 dijo:
Muchas gracias, i_minex

Es una muy buena idea. Me pongo con ello y cuento.

Un saludo.

Ok cuentanos como te ha ido!

Un saludo! ;-)
 

LOCUM

Forista
Registrado
14 Sep 2006
Mensajes
2.306
Reacciones
38
Pues empieza por no usar el acrobat reader te va a consumir la vida, mas tirando de shell
puedes hacer exactamente lo mismo con foxitreader por ejemplo
 

kanuto

En Practicas
Modelo
BMW 320DA
Registrado
14 Feb 2008
Mensajes
313
Reacciones
3
i_minex;9167768 dijo:
Bien, yo creo que deberías usar el comando "Shell" que tiene MSACCESS.

He encontrado un ejemplo ( no lo he probado ) pero vendría a ser algo parecido a esto:


Código:
Dim PathRead As String 
Dim PathFich As String 

PathRead = "C:\Archivos de programa\Adobe\Reader 8.0\Reader\AcroRd32.exe" 
PathFich = "C:\SCANIN~1\MAD-" & Me!ID & ".PDF" 

Shell PathRead & " " & PathFich, vbNormalFocus
Con el comando "Shell" aprovechas las funciones de Windows y ejecutas el "AcroRd32.exe" y le pasas como parámetro la ruta dónde esta el PDF.

Yo solo guardaría la ruta física dónde se encuentra el fichero, por ejemplo:

Campo: pathFile
Tipo: Texto(255)

Así de esta forma tendrás los ficheros fuera de la base de datos, ahorrandote un montón de espacio.

Nos cuentas si te ha funcionado!

También te adjunto la página oficial de Office con una explicación mas amplia de la función Shell:

Shell Function - Access - Microsoft Office

Un saludo! ;-)

Arreglado, me ha servido de mucho. Aunque para que funciones hacia falta un "Call". Así me quedo:

Código:
Dim RutaEXE As String
RutaEXE = "C:\Program Files\Adobe\Acrobat 8.0\Acrobat\Acrobat.exe"
Call Shell(RutaEXE & " " & Me.SalidaArchivo, 1)

Y también probé con este otro:

Código:
Dim fs As Object
Set fs = CreateObject("WScript.Shell")
fs.Run ("C:\dell\dos.pdf")

los dos funcionan bien, siempre y cuando la ruta no sea muy larga, si nó, adios.

muchas gracias, i_minex.
 

kanuto

En Practicas
Modelo
BMW 320DA
Registrado
14 Feb 2008
Mensajes
313
Reacciones
3
Vereis,

Por ejemplo, lo utilizo por que es algo similar. Vincular una foto a un contacto, claro que no quiero que la foto este dentro de la bbdd.

Y creado este codigo que hace esto:

Código:
Dim fs As Object
Dim origen As String
Dim destino As String

'Verifico si el archivo de origen existe

Set fs = CreateObject("Scripting.FileSystemObject")
origen = fs.FileExists(Me.EntradaArchivo)

If origen = True Then
    MsgBox ("el archivo de origen existe")
Else
    MsgBox ("el archivo de origen no existe")
    Exit Sub
End If

' Verifico el destino de la copia, que no exista

destino = fs.FileExists(Me.SalidaArchivo)

If destino = False Then
    MsgBox ("el archivo de destino no existe, se puede copiar")
Else
    MsgBox ("el archivo de destino ya existe, no se puede copiar")
    Exit Sub
End If

' Copio el archivo a su destino

fs.CopyFile Me.EntradaArchivo, Me.SalidaArchivo, False

MsgBox ("El archivo ha sido copiado")

Y gracias a i_minex, puedo abrirlo con:

Código:
Dim RutaEXE As String
RutaEXE = "C:\Program Files\Adobe\Acrobat 8.0\Acrobat\Acrobat.exe"
Call Shell(RutaEXE & " " & Me.SalidaArchivo, 1)

Ahora me falta, decirle a la variable "origen" donde está el archivo, he probado con TreeView, pero es un lio. Aunque igual vosotros sabeis alguna forma sencilla.

Muchas Gracias. :yawinkle
 

kanuto

En Practicas
Modelo
BMW 320DA
Registrado
14 Feb 2008
Mensajes
313
Reacciones
3
i_minex,

Como va ese iphone nuevo? ](*,)

El juego de la optimización, recuerdas el codigo para abrir los pdf, dan un fallo en la ruta del archivo, total que tienes que convertir el formato, etc. etc. un rollo, y por casualidad me he tropezado con uno que sustituye la ruta del Adobe Reader por "explorer.exe", ahora si que vá de lujo.

Por cierto ya tengo echo el codigo para seleccionar un archivo y meter su ruta en una caja de texto. Y funciona muy muy bién:

Código:
  Dim wzhwndOwner As Long
  Dim wzAppName As String
  Dim wzDlgTitle As String
  Dim wzOpenTitle As String
  Dim wzFile As String
  Dim wzInitialDir As String
  Dim wzFilter As String
  Dim wzFilterIndex As Long
  Dim wzView As Long
  Dim wzflags As Long
  Dim wzfOpen As Boolean
  Dim ret As Long
  Dim EscogeFichero_Con_WizHook As String

    WizHook.Key = 51488399

    wzhwndOwner = 0&
    wzAppName = "empresa"
    wzDlgTitle = "Selecciona el archivo PDF a importar ...."
    wzOpenTitle = "Seleccionar"
    wzFile = String(255, Chr(0))
    wzInitialDir = "C:\Users\Jesus\Desktop"
    wzFilter = "Todos los archivos " & "(*.pdf)"
    wzFilterIndex = 1
    wzView = 1
    wzflags = 64
    wzfOpen = True

    ret = WizHook.GetFileName(wzhwndOwner, _
        wzAppName, wzDlgTitle, wzOpenTitle, wzFile, _
        wzInitialDir, wzFilter, wzFilterIndex, _
        wzView, wzflags, wzfOpen)
'_____________________________________________________
' Si no se ha pulsado el botón Cancelar (-302)
   If ret <> -302 Then
    EscogeFichero_Con_WizHook = wzFile
    Else
     EscogeFichero_Con_WizHook = ""
     Exit Sub
   End If
    
' LE METEMOS LA RUTA A UNA CAJA DE TEXTO O LO QUE SEA:
Me.EntradaArchivo = EscogeFichero_Con_WizHook
Que te parece? :-k

Un saludo.
 

i_minex

Forista Legendario
Modelo
E46-E85-987.2
Registrado
24 May 2005
Mensajes
8.078
Reacciones
4.075
kanuto;9192306 dijo:
i_minex,

Como va ese iphone nuevo? ](*,)

El juego de la optimización, recuerdas el codigo para abrir los pdf, dan un fallo en la ruta del archivo, total que tienes que convertir el formato, etc. etc. un rollo, y por casualidad me he tropezado con uno que sustituye la ruta del Adobe Reader por "explorer.exe", ahora si que vá de lujo.

Por cierto ya tengo echo el codigo para seleccionar un archivo y meter su ruta en una caja de texto. Y funciona muy muy bién:

Código:
  Dim wzhwndOwner As Long
  Dim wzAppName As String
  Dim wzDlgTitle As String
  Dim wzOpenTitle As String
  Dim wzFile As String
  Dim wzInitialDir As String
  Dim wzFilter As String
  Dim wzFilterIndex As Long
  Dim wzView As Long
  Dim wzflags As Long
  Dim wzfOpen As Boolean
  Dim ret As Long
  Dim EscogeFichero_Con_WizHook As String

    WizHook.Key = 51488399

    wzhwndOwner = 0&
    wzAppName = "empresa"
    wzDlgTitle = "Selecciona el archivo PDF a importar ...."
    wzOpenTitle = "Seleccionar"
    wzFile = String(255, Chr(0))
    wzInitialDir = "C:\Users\Jesus\Desktop"
    wzFilter = "Todos los archivos " & "(*.pdf)"
    wzFilterIndex = 1
    wzView = 1
    wzflags = 64
    wzfOpen = True

    ret = WizHook.GetFileName(wzhwndOwner, _
        wzAppName, wzDlgTitle, wzOpenTitle, wzFile, _
        wzInitialDir, wzFilter, wzFilterIndex, _
        wzView, wzflags, wzfOpen)
'_____________________________________________________
' Si no se ha pulsado el botón Cancelar (-302)
   If ret <> -302 Then
    EscogeFichero_Con_WizHook = wzFile
    Else
     EscogeFichero_Con_WizHook = ""
     Exit Sub
   End If
    
' LE METEMOS LA RUTA A UNA CAJA DE TEXTO O LO QUE SEA:
Me.EntradaArchivo = EscogeFichero_Con_WizHook
Que te parece? :-k

Un saludo.

Buenas,

ya veo que has encontrado algo mejor. El VB del MSACCESS hace ya bastante tiempo que no lo toco, pero veo que abres un cuadro de dialogo para seleccionar el archivo cada vez ? O sólo utilizas el cuadro de dialogo para que te devuelva el nombre del archivo ?

Un saludo! ;-)
 

kanuto

En Practicas
Modelo
BMW 320DA
Registrado
14 Feb 2008
Mensajes
313
Reacciones
3
i_minex;9193030 dijo:
Buenas,

ya veo que has encontrado algo mejor. El VB del MSACCESS hace ya bastante tiempo que no lo toco, pero veo que abres un cuadro de dialogo para seleccionar el archivo cada vez ? O sólo utilizas el cuadro de dialogo para que te devuelva el nombre del archivo ?

Un saludo! ;-)

Lo utilizo para que me devuelva la ruta, compruebo que existe, lo copio con el nombre que le indica la base datos donde le indica la base de datos y listo. Despues es solo darle a un boton y me abre el archivo, se ha quedado de lujo.

Ahora estoy haciendo un buscador general, que me busque en distintas tablas y distintos campos, con like y me devuelva en una pantalla las coincidencias, ya te iré contando.

Gracias.
 

i_minex

Forista Legendario
Modelo
E46-E85-987.2
Registrado
24 May 2005
Mensajes
8.078
Reacciones
4.075
kanuto;9197559 dijo:
Lo utilizo para que me devuelva la ruta, compruebo que existe, lo copio con el nombre que le indica la base datos donde le indica la base de datos y listo. Despues es solo darle a un boton y me abre el archivo, se ha quedado de lujo.

Ahora estoy haciendo un buscador general, que me busque en distintas tablas y distintos campos, con like y me devuelva en una pantalla las coincidencias, ya te iré contando.

Gracias.

Ok, perfecto! Seguro que a la larga vas a notar mucha diferencia con la velocidad, sobretodo si tenias que guardar los datos en una base de datos como MSACCESS.

Ya nos irás contando! ;-)

Un saludo
 

pLEy

Clan Leader
Registrado
21 Ago 2002
Mensajes
63.016
Reacciones
147
Compacta la BD regularmente y si puedes, haz migraciones de los datos que no utilices. Si no tienes mas remedio, deberas usar varias BD.

Yo me plantearia pasarme a un SQL Server por ejemplo.
 
Arriba