No consigo que mi bd lea una archivo de texto

Quiero que en evento LOAD mi aplicación busque un archivo de texto y lo lea, y en caso de que dicho archivo no exista se cierra la aplicación.
Estoy tratando de hacerlo con el siguiente código:
Dim fr, lr
 Open "c:\windows\system32\Prueba.txt" For Binary As #fr
    lr = LOF(fr)
    Close #fr
    If lr = 0 Then MsgBox "   No tiene autorización para usar esta aplicación       ", 16, "      ¡ ATENCIÓN ERROR CRÍTICO !              ": CloseCurrentDatabase
Te agradezco me des algún consejo para resolver este problema.

1 Respuesta

Respuesta
1
Primero, antes de abrir el fichero con el número #fr, debes asignarle un valor a esa variable:
fr = freeFile
Yo abriría el fichero como 'de entrada' controlando los errores:
on error resume next
Open "c:\windows\system32\Prueba.txt" For Input As #fr
if err<>0 then
    msgbox "Error el fichero no existe o no se puede abrir"
    CloseCurrentDatabase
end if
on error goto 0
lr = lof(fr)
if lr = 0 then
    msgbox "Error el fichero está vacio"    CloseCurrentDatabase
end if
...
...
Close fr
Disculpa Santiago, lo he probado pero sigue sin funcionar. Te copio el código que utilizo:
Private Sub Form_Open(Cancel As Integer)
On Error Resume Next
Dim fr
fr = FreeFile
Open "c:\WINDOWS\system\Prueba.txt" For Input As #fr
If Err <> 0 Then
    MsgBox "Error el fichero no existe o no se puede abrir"
    CloseCurrentDatabase
End If
On Error GoTo 0
lr = LOF(fr)
If lr = 0 Then
    MsgBox "Error el fichero está vacio"
    CloseCurrentDatabase
End If
Close fr
End Sub
A ver, el código de antes comprueba si existe el fichero y si no existe o está vacío da un mensaje y sale.
Dices que quieres que lea el contenido. ¿Dónde se va a guardar lo leído? ¿Qué contiene y en qué formato? ¿Estás guardando información en windows\system? (no me parece un sitio muy normal).
Lo que quiero es que simplemente compruebe que existe ese archivo, el cual contiene texto (TXT), y en caso de que no exista me de un mensaje. No me interesa guardar ningún valor. Es un truco para hacer que se cierre la aplicación cuando se encuentre instalado ese archivo.
No se si me explico...
El siguiente código lo he probado y, si no existe el fichero o está vacío, se cierra la base de datos:
Private Sub Form_Open(Cancel As Integer)
    Dim fr As Integer
    Dim fl As Double
    On Error Resume Next
    fr = FreeFile
    Open "c:\WINDOWS\system\Prueba.txt" For Input As #fr
    fl = LOF(fr)
    If Err <> 0 Then fl = 0
    Close fr
    On Error GoTo 0
    If fl <= 0 Then
        MsgBox "Error el fichero no existe o está vacio"
        CloseCurrentDatabase
    End If
End Sub
Si lo que quieres es que se cierre 'sólo cuando no exista el fichero' y si existe vacío continúe, entonces deberíamos quitar la línea "fl = LOF(fr)" y asignar el valor -1 en lugar de 0 en la línea "If Err <> 0 Then fl = 0". Esta última línea quedaría:
If Err <> 0 Then fl = -1
Perdona Santiago, he probado como me dices y nada, sigue sin funcionar. Este es el código que he utilizado, la versión de Access con el que trabajo es la 2003 y el tengo instalado Windows XP, versión 2002 servipack 3:
Private Sub Form_Open(Cancel As Integer)
    Dim fr As Integer
    Dim fl As Double
   On Error Resume Next
   fr = FreeFile
   Open "c:\WINDOWS\system\Prueba.txt" For Input As #fr
   fl = LOF(fr)
   If Err <> 0 Then fl = 0
   Close fr
   End If
   On Error GoTo 0
   If fl <= 0 Then
   MsgBox "Error el fichero no existe o está vacio"
   CloseCurrentDatabase
   End If
End Sub
Este asunto me lleva de cabeza.
Envíame una copia de la base de datos comprimida en "zip" y con una clave a [email protected] y miro a ver qué pasa, pero el código es correcto.
Mandame un mensaje por aquí cuando hayas enviado el correo y me dices la clave que has puesto.
De todas formas, lo único que se me ocurre es que no se esté ejecutando el código. Eso ocurriría si no activas las macros al abrir.
Lo último. Prueba a cambiar CloseCurrentDatabase por:
Application. Quit
Ya te he enviado el formulario que me da problemas. Espero noticias tuyas.
Mil gracias, amigo experto.
No le has puesto ninguna clave y el correo de hotmail no deja pasar las bases de datos con código si no están con clave.
Como es pequeñito, envíamelo a [email protected] (en este correo tengo muy poco espacio).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas