Conectar o Bajar un MDB situado en un servidor FTP

Iniciado por jrhomer, 5 Enero 2006, 12:56 PM

0 Miembros y 2 Visitantes están viendo este tema.

jrhomer

Hola, soy nuevo en este foro, ya que no me ha quedado mas remedio que expandir mis fronteras en cuanto a foros visitados...., ya que no encuentro la solución a un problema que me tare basntate desconcertado varios días.


Os expongo mi situación.

Tengo una aplicación en VB,la cual ha de conectarse a un BD (mdb de access) para realizar sus cosas...

El caso que siempre que he trabajado con conexiones a BD siempre ha sido en un servidor local, total q o tomaba la base de datos desde mi PC o desde otro PC q tngo en RED, así que nada del otro mundo.

El problema viene al colocar el archivo MDB en un servidor FTP, por ejmplo ftp.pepe.com/BD/base.mdb

ahí vienen los problema, ya que no consigo realizar la conexión del mismo como que lo hacía anteriormente, de modo que comienzo con la recopilación de información para realizar la conexión, veo y leo muchas cosas en MSDN, foro y tutoriales del Guille, wvp-access y varios foros mas (perdón por la publi de otros foros, pero siempre es bueno q "expandamos las fronteras"), pero que no consigo ejecutar perfectamente. De modo que cansado de tenerlo ahí decido realizar una chapuza, para salir del paso (mientras aprendo a realizar la conexión perfectamente) y decido que la misma aplicación se conecte al servidor FTP, se baje el MDB (ya que no es grande y si se puede realizar eso....) haga lo que tenga que hacer y despues vuelva a subir el archivo, como digo es una chapuza, pero que intenaba hacer para salir del paso.

El caso que ni la chapuza me sale perfectamente, ya que si puedo subir y bajar archivos con fluidez y sin problemas (si alguien kiere el código de esto que me lo pida, hay mucho sobre el tema por ahí, y se lo paso) pero si bajo el MDB no se PQ?, pero se baja corrupto y al abrir la base de datos dice que el archivo tiene un problema y ha de corregirse, cosa que no hace, total que sube y baja los MDB, pero al bajarse bajan corruptos y por lo tanto no se puede trabajar con ellos, sin embargo si subo y/o bajao otro tipo de archivos, como un TXT por ejmplo o lo que sea no hay problemas al abrirlo, se ejecuta perfectamente, de mismo modo que si se utiliza un programa cliente de FTP.


un vez explicada la historia... si os la habeis leido vereis que necesito información de como crear la conexión desde mi PC a un servidor FTP remoto, por ejemplo ftp.pepe.com/BD/base.mdb. ya que es como se deben hacer las cosas.

Espero que me puedan echar una mano, a mi y a toda la gente que pueda tener el mismo problema.

Un saludo y espero contestación.

gracias.
ups!!

jrhomer

nadie nos puede ayudar??? si no se entiende muy bien lo que intento explicar... decirmelo, q lo intento redactar de otro modo
ups!!

programatrix

Prueva bajarte la base de datos y luego la usas..., porque que yo sepa ftp es solo para administrar ficheros no para gestionar base de datos.
Saludos  ::)


jrhomer

Cita de: Rey11 en  6 Enero 2006, 19:57 PM
Prueva bajarte la base de datos y luego la usas..., porque que yo sepa ftp es solo para administrar ficheros no para gestionar base de datos.
Saludos  ::)



Cita de: jrhomer en  5 Enero 2006, 12:56 PM

El caso que ni la chapuza me sale perfectamente, ya que si puedo subir y bajar archivos con fluidez y sin problemas (si alguien kiere el código de esto que me lo pida, hay mucho sobre el tema por ahí, y se lo paso) pero si bajo el MDB no se PQ?, pero se baja corrupto y al abrir la base de datos dice que el archivo tiene un problema y ha de corregirse, cosa que no hace, total que sube y baja los MDB, pero al bajarse bajan corruptos y por lo tanto no se puede trabajar con ellos, sin embargo si subo y/o bajao otro tipo de archivos, como un TXT por ejmplo o lo que sea no hay problemas al abrirlo, se ejecuta perfectamente, de mismo modo que si se utiliza un programa cliente de FTP.
ups!!

jrhomer

#4
He estado utilizdo la librería wininet.dll siendo el resultado el mismo que he tenido en las demás ocasiones.

consigo bajar el archivo (mdb) pero una vez bajado no se puede abrir, por un error que no se cual es.

Lo he probado con otros archivos, como TXT... y con ellos no hay problem, subo y bajo archivos sin problema, pero al hacer la operación con un MDB surge el problema y no se puede abrir el MDB que se ha bajado.

alguno ha hecho la prueba?

subir a un servidor FTP un MDB y bajarlo con un "programa casero" (nada de clientes como el cuteFTP o cosas así) si no por programas creamos con nuestras manos. si conseguis subir y bajar el MDB, y abrirlo (cuando os lo habeis bajado del servidor) sin ningún problema... os pido que me digais como lo haceis, ya que no conseguimos realizar esa operación sin que nos de un error.


Un saludo.

Y pido disculpas por si soy algo pesado con el tema... pero es algo que nos trae de cabeza y necesitamos una solución.

gracias por todo.

ups!!

jrhomer

Cita de: E. Feijoo
Teniendo en cuenta que una MDB puede comprimirse (y ocupa generalmente un % del tamaño original), la subida y bajada seria mas eficaz y nada impide descomprimirla una vez en nuestro poder y ejecutarla normalmente.



Ejemplos de como comprimirla y descomprimirla en linea de comando hay bastantes (incluso se puede utilizar el clasico WinZip) y todo ello llevaria un tiempo menor que el de bajarla sin comprimir.



Puestos a progamar, seria un simple paso mas que redundaria en eficacia.



Un saludo, Enrique

He comprimido el MDB en un zip y en rar (a mano, no con código, ya que no quería "perder el tiempo" implementando el código para que despues surgiera el mismo problema que hasta ahora.) y he realizado la prueba, pero el resultado es el de siempre, se corrompe algo del MDB y entonces al abrir el zip/rar me dice que no se puede descomprimir, así que estoy en las mismas. No se a que es debido ese error y porque a mucha gente le funciona sin problemas y a mi no, siempre con el error del MDB

Cita de: BattleTrollHola JrHomer

No, el cliente FTP de WinXP es el "real", el que se accede desde el prompt de ms-dos -> haz la prueba ahora mismo, abre una ventana de "simbolo del sistema" (inicio->accesorios->símbolo del sistema) y nomas abra teclea algo asi como "ftp ftp.openbsd.org<enter>"
acto seguido entraras al servidor FTP de la universidad de calgary, canada (donde se produce este maravilloso sistema operativo) y tras validarte como usuario (recuerda que los servidores FTP publicos *siempre* tienen activada la cuenta de usuario "anonymous" cuyo password es, en orden de frecuencia: nada, "anonymous", un correo electronico cualquiera

ESE es el cliente FTP que debes utilizar, cuando utilizas el explorador de windows para conectarte a un sitio FTP lo que haces es conectarte en modo asincrono y anonimo de manera automatica, y dependes de las configuraciones que el servidor tenga configuradas para quien se conecte en ese caso - es posible que no estes conectandote en modo "binary" automaticamente y por eso tus archivos se corrompen.

De hecho, el cliente FTP de winXP es la base para el ejemplo del buho, quizas debieras activar el programa cliente FTP (solo escribe "ftp <enter>" en tu prompt de ms-dos) y leete la ayuda que incorpora (despues de que te salga el prompt "ftp>" indicando que esta listo para una orden, tu escribes "help" y ves todos los comandos, son bastante auto-explicativos, si no busca en internet o en un manual UNIX para que es cada uno)

Es lo malo de los jovenes: hoy en dia lo tienen todo tan facil... En mis tiempos TODO se tenia que hacer desde el prompt de ms-dos, windows 3.11 nos parecia algo maravilloso y macintosh era una utopia (por ser muchisimo mejor que win3.11 y por ser tb. como 7 veces mas caro que una PC). 
De ese modo ya lo había probado con varias fuentes que he visto por internet, pero el resultado ha sido el mismo, se corrompe el MDB.

En cuanto a lo del modo "binary"/"ascii" he probado bajando y subiendo el archivo con ambos modos, pero el resultado ha sido el mismo, se corrompe el MDB (o zip/rar) y no se puede abrir la base de datos.

Sin embargo todas esas pruebas las realizo subiendo y bajando un TXT (por ejemplo) y no hay problemas.
ups!!

jrhomer

Sigo probando con varios modos...

Ahora, con el ejemplo de Buho como base tengo lo sieguiente

Open "C:\ftp.txt" For Append As #NumeroArchivo
    Print #NumeroArchivo, "Open " & StrFtp
    Print #NumeroArchivo, StrUsuario
    Print #NumeroArchivo, StrPassword
    Print #NumeroArchivo, "cd " & strCarpetaRemota
    Print #NumeroArchivo, "get " & StrFicheroRemoto & " " & _
            RutaDos(LOGIN.Directorio) & "BD.mdb"
    Print #NumeroArchivo, "binary"
    Print #NumeroArchivo, "bye"
    Close #NumeroArchivo
    DoEvents
    Retval = Shell("ftp -s:C:\ftp.txt", vbNormalFocus)

De modo que la transferencia de archivo debería de hacerse en modo "binary", no? pues se hace en modo ASCII.


viendo el código que he utlizado... creo que debería forzarse a utilizar el modo binario... pero por lo que veo al realizar la transferencia no lo hace (no se si ahí puede estar el error,,, pero es algo que me intriga y que quiero comprobar para ver si puedo realizar correctamente el GET)

¿Cómo puedo FORZAR a que se baje en modo binary, ya que no lo hace (eso creo yo)?
ups!!

jrhomer

está solucionado, aki posteo la solución para quien le pueda interesar, de todos modos dejo un link a un foro donde me ayudaron con la solución.

lo he dejado así para bajar e archivo:

    Open "C:\ftp.txt" For Append As #NumeroArchivo
    Print #NumeroArchivo, "Open " & StrFtp
    Print #NumeroArchivo, StrUsuario
    Print #NumeroArchivo, StrPassword
    Print #NumeroArchivo, "cd " & strCarpetaRemota
    Print #NumeroArchivo, "binary"
    Print #NumeroArchivo, "get " & StrFicheroRemoto & " " & _
            RutaDos(LOGIN.Directorio) & "BD.mdb"
    Print #NumeroArchivo, "bye"
    Close #NumeroArchivo
    DoEvents


y así para subirlo:

    Open "C:\ftp.txt" For Append As #NumeroArchivo
    Print #NumeroArchivo, "Open " & StrFtp
    Print #NumeroArchivo, StrUsuario
    Print #NumeroArchivo, StrPassword
    Print #NumeroArchivo, "cd " & strCarpetaRemota
    Print #NumeroArchivo, "binary"
    Print #NumeroArchivo, "put " & RutaDos(StrRutalocalFichero)
    Print #NumeroArchivo, "bye"
    Close #NumeroArchivo
    DoEvents


y despues ejecutar el comando:

Retval = Shell("ftp -s:C:\ftp.txt", vbNormalFocus)


FORO: http://www.mvp-access.com/foro/forum_posts.asp?TID=16954&PN=1&get=last#109493
ups!!

jrhomer

Ahora tengo un problemilla que es que al ejecutar
Retval = Shell("ftp -s:C:\ftp.txt", vbNormalFocus)
pasa un tiempo hasta que baja(/sube) el archivo, pero la ejecución de sentencias sigue y no "para" mientras se está bajando el archivo, conoceis algún modo de controlarlo?

conociendo el tamaño total del archivo y lo que se ha transferido cada 1seg por ejemplo...?

o como se puede controlar eso, para que no intente acceder al MDB sin antes haberse descargado?

un saludo y muchas gracias.
ups!!

Slasher-K

Para eso tendrías que crear el proceso usando CreateProcess y luego llamar a WaitForSingleObject hasta que termine dicho proceso.

Escribí un ejemplo para que te quede más claro. El siguiente procedimiento ExecuteAndWait no volverá hasta que termine la descarga o hasta que la variable global CancelDownload se establezca a True.


Option Explicit

Const STARTF_USESHOWWINDOW = &H1

Type STARTUPINFO
  cb              As Long
  lpReserved      As String
  lpDesktop       As String
  lpTitle         As String
  dwX             As Long
  dwY             As Long
  dwXSize         As Long
  dwYSize         As Long
  dwXCountChars   As Long
  dwYCountChars   As Long
  dwFillAttribute As Long
  dwFlags         As Long
  wShowWindow     As Integer
  cbReserved2     As Integer
  lpReserved2     As Long
  hStdInput       As Long
  hStdOutput      As Long
  hStdError       As Long
End Type

Type PROCESS_INFORMATION
  hProcess    As Long
  hThread     As Long
  dwProcessId As Long
  dwThreadId  As Long
End Type

Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long


Public CancelDownload As Boolean

Sub ExecuteAndWait(CommandLine As String, Optional ShowWindow As VbAppWinStyle)
        Dim lpProcess As PROCESS_INFORMATION
        Dim lpStartup As STARTUPINFO
        Dim r&

  ' Oculta la ventana del proceso.
  '
  lpStartup.dwFlags = STARTF_USESHOWWINDOW
  lpStartup.wShowWindow = ShowWindow
 
  ' Se debe establecer el valor inicial del
  ' tamaño de la estructura.
  '
  lpStartup.cb = LenB(lpStartup)
 
  ' Crea el proceso.
  '
  r = CreateProcess(vbNullString, CommandLine, 0&, 0&, False, 0&, 0&, _
                    vbNullString, lpStartup, lpProcess)
 
  If r Then
    ' Si el proceso se creo correctamente.
    '
    Do While WaitForSingleObject(lpProcess.hProcess, 100)
      ' Espera hasta que termine el proceso.
      '
      If CancelDownload Then
        'Cancelar la espera.
        '
        Exit Sub
      End If
     
      DoEvents
    Loop
   
    CancelDownload = False
   
    ' Libera el controlador de proceso.
    '
    Call CloseHandle(lpProcess.hProcess)

  End If
End Sub


Saludos.



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*