Ayuda con formulario access para actualizar el contenido de un cuadro de texto

Hola!, espero que me puedas ayudar...
Lo que estoy intentando hacer es que en un formulario de access al introducir un código oaci de 4 letras en un cuadro de texto y al pulsar en un botón de comando me introduzca en otro cuadro de texto el contenido de un archivo de texto de internet...
Bien he logrado lo siguiente
T1=cuadro de texto donde introduzco las 4 letras (por ejemplo GCXO)
Combo1=boton de comando que al pulsar
Private Sub Combo1_Click()
Dim res As Long
res = ShellExecute(Me.hWnd, "Open", "ftp://weather.noaa.gov/data/observations/metar/stations/" & T1 & ".TXT", "", "", 1)
esto quedaria asi:
res = ShellExecute(Me.hWnd, "Open", "ftp://weather.noaa.gov/data/observations/metar/stations/GCXO.TXT", "", "", 1) es decir a esta pagina se accedera....
BIEN LO QUE QUIERO AHORA Y NO LOGRO HACER ES QUE EL CONTENIDO DEL ARCHIVO "GCXO" lo copie o lo introduzca en un cuadro de texto también situado en el formulario llamado T2...
Y si es posible que al pulsar en el combo no me abra la página sino que pegue el contenido del archivo en el cuadro de texto t2 seria mucho mejor...
por cierto tengo en la declaración del formulario
Private Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Espero tu ayuda gracias!

1 respuesta

Respuesta
1
La parte que te falta es:
Dim sText as string
Me.T2 = ""
iFile = FreeFile
Open "E:TRANSFERENCIAmetar" & T1 & ".txt" For Input As iFile
Do Until EOF(iFile)
Line Input #iFile, sText
Me.T2 = Me.T2 & sText & vbCrLf
Loop
Close iFile
End Sub
Lo que hace esto es abrir el Fichero y copiar todas las líneas a T2.
Muchas gracias me funciona muy bien...
Podrías decirme como puedo hacer lo siguiente en el mismo formulario... es que he puesto un timer para hacer algo con una barra de progreso Y FUNCIONA lo que pasa es que me salta antes de que pulse el botón de comando si tardo en introducir el código oaci en el cuadro de texto Y LO QUE DESEO ES QUE NO ME SALTE HASTA QUE NO PULSE EN EL BOTÓN DE COMANDO ¿hay alguna forma de mantener el cronometro del timer del formulario a 0 y desde que pulse el botón de comando se ponga a 300 por ejemplo para que empiece a funcionar lo que he puesto?... ESTO ES LO NUEVO QUE HE PUESTO:
Option Compare Database
Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _
szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Dim iResult As Integer
Dim tiempo As Integer
Dim j As Long
Private Sub Comando0_Click()
Comando0.Caption = "Bajando " & T1
iResult = mciExecute("Play c:windowsmedia
otify.wav")
'Inicializamos la barra de progreso, y comenzamos el Timer
ProgressBar1.Value = 0
ProgressBar1.Enabled = True
Me.ProgressBar1.Visible = True
E9.Caption = "Procesando datos..."
E9.ForeColor = 7
Me.E9.Visible = True
j = URLDownloadToFile(0, "ftp://weather.noaa.gov/data/observations/metar/stations/" & T1 & ".TXT", _
"E:TRANSFERENCIAmetar" & T1 & ".txt", 0, 0)
End Sub
Private Sub Comando5_Click()
Dim sText As String
Me.T2 = ""
iFile = FreeFile
Open "E:TRANSFERENCIAmetar" & T1 & ".txt" For Input As iFile
Do Until EOF(iFile)
Line Input #iFile, sText
Me.T2 = Me.T2 & sText & vbCrLf
Loop
Close iFile
End Sub
Private Sub Form_Load()
Me.ProgressBar1.Visible = False
Comando0.Caption = "Bajar metar"
T1.SetFocus
End Sub
Private Sub Form_Timer()
'Si el progreso todavía no termina, seguir aumentando Value hasta 100
With ProgressBar1
If .Value < .Max Then
.Value = .Value + 1
If .Value = 20 Then
E9.Caption = "Conectando a internet..."
ElseIf .Value = 40 Then
E9.Caption = "Accediendo a servicio meteorológico..."
ElseIf .Value = 60 Then
E9.Caption = "Buscando metar asociado..."
ElseIf .Value = 80 Then
E9.Caption = "Metar " & T1 & " encontrado...."
ElseIf .Value = 100 Then
E9.Caption = "¡Proceso terminado!...'METAR GRABADO'"
iResult = mciExecute("Play c:windowsmediading.wav")
ProgressBar1.Value = 100
ProgressBar1.Enabled = False
ProgressBar1.Visible = True
End If
End If
If E9.Caption = "¡Proceso terminado!...'METAR GRABADO'" Then
tiempo = tiempo + 1
If tiempo >= 3 Then
tiempo = 0
Me.E9.ForeColor = 255
Else
Me.E9.ForeColor = 16711680
End If
End If
End With
End Sub
Private Sub T1_AfterUpdate()
Comando0.SetFocus
End Sub
Funciona bien pero se muestra la etiqueta e9 con los textos y la barra de progreso antes de darle al botón de comando si tardo más de 15 segundos en introducir el código oaci en el cuadro de texto t1
Gracias por todo
Hola! Te estoy muy agradecido por tu interés... GRACIAS... tengo un problema y es que con lo que me has dicho se bloquea access... yo he hecho lo siguiente: (SOLO ME FALTA COPIAR EL CONTENIDO DEL ARCHIVO.TXT AL CUADRO DE TEXTO)... ESPERO QUE ME PUEDAS DECIR COMO...
Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _
szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Private Sub Form_Load()
T1.SetFocus
End Sub
Private Sub T1_KeyPress(KeyAscii As Integer)
KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub
Private Sub Comando1_Click()
Dim j As Long
j = URLDownloadToFile(0, "ftp://weather.noaa.gov/data/observations/metar/stations/" & T1 & ".TXT", _
"E:TRANSFERENCIAmetar" & T1 & ".txt", 0, 0)
If j = 0 Then
'el fichero se descargó correctamente
Else
'ha ocurrido un error
End If
End Sub
Ahora bien esto me funciona de maravilla pero como puedo copiar el contenido del archivo de formato 'txt' que esta en "E:TRANSFERENCIAmetar" & T1 & ".txt", 0, 0)
Es decir metarGCXO.txt (si pongo GCXO en el cuadro de texto T1) en T2 otro cuadro de texto del formulario, tendría que ver dentro del T2 lo siguiente:
2004/10/24 09:00
GCXO 240900Z 29011KT 9999 FEW004 18/16 Q1021 NOSIG
Espero que me ayudes... MUCHAS GRACIAS...
ShellExecute y Shell abren la aplicación por defecto cuando les pasas un nombre de archivo. Las URL son nombres de archivo cuyo programa por defecto es Internet explorer.
Una solución sencilla para resolver tu problema es invocar el programa ftp de línea de comandos pasándole un archivo en el que le dices lo que tiene que hacer.
Te envío lo que a mí me ha funcionado.
Const FTP_FILES_PATH = "E:TODOEXPERTOSBDFTP"
Const FTP_PARAMS_FILE = "NOAA.FTP"
Const FTP_SRVR_CHECK_FILE = "GCXO.TXT"
Const FTP_CHECK_FILE = "NOAA.TST"
Const FTP_FINAL_FILE = "NOAA:TXT"
Private Sub Comando4_Click()
Dim iFile As Integer
Dim sText As String
iFile = FreeFile()
Open FTP_FILES_PATH & FTP_PARAMS_FILE For Output As iFile
Print #iFile, "OPEN weather.noaa.gov"
Print #iFile, "anonymous"
Print #iFile, "[email protected]"
Print #iFile, "ASCII"
Print #iFile, "GET /data/observations/metar/stations/" & Me.T1 & ".TXT " & FTP_FILES_PATH & FTP_FINAL_FILE
Print #iFile, "GET /data/observations/metar/stations/" & FTP_SRVR_CHECK_FILE & " " & FTP_FILES_PATH & FTP_CHECK_FILE
Print #iFile, "DISCONNECT"
Print #iFile, "BYE"
Close iFile
On Error Resume Next
Kill FTP_FILES_PATH & FTP_CHECK_FILE
On Error GoTo 0
Shell "ftp -s:" & FTP_FILES_PATH & FTP_PARAMS_FILE
Do Until Dir$(FTP_FILES_PATH & FTP_CHECK_FILE) = FTP_CHECK_FILE
Loop
Me.T2 = ""
iFile = FreeFile
Open FTP_FILES_PATH & FTP_FINAL_FILE For Input As iFile
Do Until EOF(iFile)
Line Input #iFile, sText
Me.T2 = Me.T2 & sText & vbCrLf
Loop
Close iFile
End Sub
Notas:
- La constante FTP_FILES_PATH apunta a un directorio de trabajo. Yo he puesto el que he usado. Cuando lo cambies, recuerda que no debe contener espacios.
- FTP_SRVR_CHECK_FILE debe ser un archivo pequeño que sepas que existe en el servidor. Puedes sustituirlo por el mismo archivo que vas a bajar (si nunca es muy grande). La misión es asegurarme de que el archivo que quiero está completo antes de pasarlo a la caja de texto.
Me parece que el problema es porque inicializas el timer en diseño.
Deberías, en diseño, poner el valor de la propiedad a 0 y cambiarle el valor en el momento que haces visible la barra de progreso para que sea a partir de ahí cuando empuieze a contar el tiempo.
Muchisimas GRACIAS....merci beaucoup!!!!.....YA LO HE HECHO Y FUNCIONA DE MARAVILLA......
Por cierto como puedo introducir una progressbar dentro de una statusbar en un formulario de access... GRACIAS POR TODO...
La función SysCmd.
Inicializas el medidor con el parámetro SysCmdInitMeter y actualizas el valor con syscmdUpdateMeter.
No la uso desde hace mucho tiempo por lo que te recomiendo que en la ayuda de VB de access busques syscmd. Verás que puedes hacer montones de cosas con ella.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas