Autor
|
Tema: Conectar o Bajar un MDB situado en un servidor FTP (Leído 4,716 veces)
|
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.
|
|
« Última modificación: 7 Enero 2006, 17:15 pm por jrhomer »
|
En línea
|
ups!!
|
|
|
jrhomer
|
nadie nos puede ayudar??? si no se entiende muy bien lo que intento explicar... decirmelo, q lo intento redactar de otro modo
|
|
|
En línea
|
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 
|
|
|
En línea
|
|
|
|
jrhomer
|
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  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.
|
|
|
En línea
|
ups!!
|
|
|
jrhomer
|
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.
|
|
« Última modificación: 7 Enero 2006, 17:14 pm por jrhomer »
|
En línea
|
ups!!
|
|
|
jrhomer
|
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 Hola 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.
|
|
|
En línea
|
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)?
|
|
|
En línea
|
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
|
|
|
En línea
|
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.
|
|
|
En línea
|
ups!!
|
|
|
Slasher-K
Desconectado
Mensajes: 1.477
|
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.
|
|
|
En línea
|
A la reina de las profundidades que cuida los pasos de una sombra en la noche :*
|
|
|
|
|