** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - El tipo de argumento ByRef no coincide
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoEl tipo de argumento ByRef no coincide

 Responder Responder
Autor
Mensaje
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2533
Enlace directo a este mensaje Tema: El tipo de argumento ByRef no coincide
    Enviado: 11/Noviembre/2017 a las 18:23
Buenas!!

Tengo apañado un codigo de Bhuo sacado de aqui
http://www.mvp-access.es/buho/ficheros/ejemploftp.zip

Mi objetivo es que se suba una copia de seguridad a un servidor ftp automaticamente.
Si los datos los coge de los cuadros de texto como el ejemplo de Bhuo funciona perfecto, pero yo quiero que los pille de unas variables, para no tener que usar formularios.
Me suelta el siguiente error  "El tipo de argumento ByRef no coincide"  y me señala una de las variables. Estan declaradas como string, que creo es lo correcto, he probado otras declaraciones y lo mismo, que hago mal, no consigo verlo???

Saludos



Dim varDireccionFTP, varUsuario, varPassword, varCarpetaFTP, varFicheroSubir As String
   
   
   varDireccionFTP = DLookup("DireccionFTP", "tbCopiaSeguridad", "Orden=1")
   'MsgBox varDireccionFTP
   varUsuario = DLookup("UsuarioFTP", "tbCopiaSeguridad", "Orden=1")
   varPassword = DLookup("ContraseñaFTP", "tbCopiaSeguridad", "Orden=1")
   varCarpetaFTP = DLookup("CarpetaServidorFTP", "tbCopiaSeguridad", "Orden=1")
   
  

'Pillando datos de formulario va OK
 'PutFichero Me.DirecionFTP, Me.UsuarioFTP, Me.ContraseñaFTP, Me.CarpetaServidorFTP, RutaDos(Me.CarpetaArchivoSubir), Nz(False, 0)

'Con varibles error
 PutFichero varDireccionFTP, varUsuario, varPassword, varCarpetaFTP, RutaDos(varFicheroSubir), Nz(False, 0)




La funcion PuFichero esta en un modulo

Option Compare Database
Option Explicit

'Módulo que envía o coge ficheros del FTP
'Existe un metodo utilizando API
'Ya he probado dicha api y funciona tambien
'Francisco Javier García Aguado
'Mayo - Junio de 2004
'Valladolid - España
'Si usas este codigo deberás preservar la autoría del mismo

 Dim NumeroArchivo As Long

'En este ejemplo he construido estas dos funciones
'Una para PUT (Subir) y otra para GET (Bajar)
'Se puede escribir perfectamente solo una funcion para ambos
'casos, sin mas que pasar un parametro, si estamos haciendo
'PUT o GET
'Las he separado, simplemente por comodidad y para que el ejemplo
'se vea mas claro.

Function PutFichero(StrFtp As String, StrUsuario As String, _
    strPassword As String, strCarpetaRemota As String, _
    StrRutalocalFichero As String, Optional VerVentanaDos As Boolean = True)
    
 Dim Retval
 'escribimos el fichero ftp.txt que hara toda la labor
 'SUBIDA
 
 Dim varTXT As String
 varTXT = Application.CurrentProject.path & "\" & "ftp.txt"        'Lo creamos en la carpeta base de datos
 'MsgBox "put  (Subir)"
 'MsgBox varTXT
 
 Dim varTXTretval As String
 varTXTretval = "ftp " & "-s:" & varTXT         'para muestra como es mas abajo   Retval = Shell("ftp -s:Z:\ftp.txt", vbHide)
 'MsgBox varTXTretval




If Len(Dir(varTXT)) <> 0 Then Kill varTXT

  
 NumeroArchivo = FreeFile
 Open Application.CurrentProject.path & "\" & "ftp.txt" For Append As #NumeroArchivo
 Print #NumeroArchivo, "Open " & StrFtp
 Print #NumeroArchivo, StrUsuario
 Print #NumeroArchivo, strPassword
 Print #NumeroArchivo, "cd " & strCarpetaRemota
 Print #NumeroArchivo, "put " & StrRutalocalFichero
 Print #NumeroArchivo, "bye"
 Close #NumeroArchivo
 DoEvents
 If VerVentanaDos = False Then
  Retval = Shell(varTXTretval, vbHide)
 Else
  Retval = Shell(varTXTretval, vbNormalFocus)
 End If

End Function



Public Function RutaDos(strFileName As String) As String

    Dim lngRes As Long, strPath As String
    strPath = String$(165, 0)
    lngRes = GetShortPathName(strFileName, strPath, 164)
    RutaDos = Left$(strPath, lngRes)
    
End Function

Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 11668
Enlace directo a este mensaje Enviado: 11/Noviembre/2017 a las 19:01
Típico error que se comete en Access al definir variables (sobre todo los que provienen de usar Visual Basic):

Dim varDireccionFTP, varUsuario, varPassword, varCarpetaFTP, varFicheroSubir As String

Con eso has definido VarFicheroSubir como String, pero el resto están definidas como Variant (valor por defecto al no asignarlas tipo).



La forma correcta es:

Dim varDireccionFTP As String, varUsuario As String, varPassword As String, varCarpetaFTP As String, varFicheroSubir As String
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2533
Enlace directo a este mensaje Enviado: 11/Noviembre/2017 a las 20:30
Publicado originalmente por Mihura Mihura escribió:

Típico error que se comete en Access al definir variables (sobre todo los que provienen de usar Visual Basic):
La forma correcta es:

Dim varDireccionFTP As String, varUsuario As String, varPassword As String, varCarpetaFTP As String, varFicheroSubir As String

Jode!! Yo siempre lo habia hecho por separado cada variable asi

Dim varxxx as string
Dim varccc as string
.......

y por hacerlo mejor va y la cago ConfusedConfusedConfused en algun lado me habia visto que se hacia si, pero va a ser que no.

Luego lo pruebo y os cuento..

Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2533
Enlace directo a este mensaje Enviado: 12/Noviembre/2017 a las 09:48
Pues ya funciona.

Gracias una vez mas Mihura!

Se puede cerrar
Saludos
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable