Correr código para varias tablas
Espero poder explicar bien mi problema. Tengo una tabla en access llamada Datos, con los campos codEstacion, dia08, fecha, año, latitud, longitud, altitud, tmax, tmin. Esta tabla contiene datos diarios del año 2008, el código que te pongo a a continuación, lo que hace es coger crear una carpeta correspondiente al año, en este caso 2008, luego crea otra carpeta dentro de esta que corresponde a TMAX, dentro de la cual se va almacenar archivos txt que se obtendrán como salida, estos van a coorresponder a valores de 12 en 12 de TMAX para cada codestacion formándose así los archivos de cada 12dias hasta terminar el año.
Public Sub Command0_Click()
Dim lngFichero As Long
Dim strFichero, carpetaA, carpetaB As String
Dim MiRS As DAO.Recordset 'Variable de recordset
Dim sRegistro As String 'Para guardar los datos
Dim sql, sq As String
Dim strCodestacion As String
Dim i, j As Integer
Dim fs
'Crear carpeta
Set fs = CreateObject("Scripting.FileSystemObject")
carpetaA = fs.CreateFolder("D:\Clima\2008")
carpetaB = fs.CreateFolder("D:\Clima\2008\TMAX")
j = 0
For i = 1 To 18
strFichero = carpetaB
'crear nombre de los archivos txt de salida
strFichero = strFichero & "\TMAX" + Trim(Str(i)) + ".txt"
'Crear una consulta con la tabla
sql = "SELECT * FROM Datos order by codestacion, dia08"
Set MiRS = CurrentDb.OpenRecordset(sql, dbOpenForwardOnly)
lngFichero = FreeFile(1)
strCodestacion = ""
sRegistro = ""
' Abrir las carpetas y generar los archivos
Open strFichero For Output As #lngFichero
Do While Not MiRS.EOF
If Val(MiRS("dia08")) >= ((12 * j) + 1) And Val(MiRS("dia08")) <= (12 * i) Then
If strCodestacion = Trim(MiRS!Codestacion) Then
sRegistro = sRegistro + Space(3) + Format(Trim(MiRS!tmax), "##.00", 3)
If Val(MiRS("dia08")) = (12 * i) Then
Print #lngFichero, Format(sRegistro, "##.00")
End If
Else
If strCodestacion = "" Then
strCodestacion = Trim(MiRS!Codestacion)
Print #lngFichero, Format(strCodestacion, "000###") + Space(3) + Format(Trim(MiRS!Lat), "##.0000") + Space(3) + Format(Trim(MiRS!Lon), "##.0000") + Space(3) + Trim(MiRS!Altitud)
sRegistro = Format(Trim(MiRS!tmax), "##.00")
Else
strCodestacion = Trim(MiRS!Codestacion)
sRegistro = Format(Trim(MiRS!tmax), "##.00")
Print #lngFichero, Format(strCodestacion, "000###") + Space(3) + Format(Trim(MiRS!Lat), "##.0000") + Space(3) + Format(Trim(MiRS!Lon), "##.0000") + Space(3) + Trim(MiRS!Altitud)
End If
End If
End If
MiRS.MoveNext
Loop
j = j + 1
Close #lngFichero
MiRS.Close
Set MiRS = Nothing
Next i
End Sub
El código funciona bien, pero solo para un año especifico y para una tabla determinada, como puedo hacer en el código para que mi programa reconozca nombres de los campos de otras tablas, es decir tengo que trabajar con este código pero en otras tables que no tienen el nombre igual de los campos es decir codestacion en otra table puede ser stn, ¿cómo podría el programa reconocer ese nombre?
Public Sub Command0_Click()
Dim lngFichero As Long
Dim strFichero, carpetaA, carpetaB As String
Dim MiRS As DAO.Recordset 'Variable de recordset
Dim sRegistro As String 'Para guardar los datos
Dim sql, sq As String
Dim strCodestacion As String
Dim i, j As Integer
Dim fs
'Crear carpeta
Set fs = CreateObject("Scripting.FileSystemObject")
carpetaA = fs.CreateFolder("D:\Clima\2008")
carpetaB = fs.CreateFolder("D:\Clima\2008\TMAX")
j = 0
For i = 1 To 18
strFichero = carpetaB
'crear nombre de los archivos txt de salida
strFichero = strFichero & "\TMAX" + Trim(Str(i)) + ".txt"
'Crear una consulta con la tabla
sql = "SELECT * FROM Datos order by codestacion, dia08"
Set MiRS = CurrentDb.OpenRecordset(sql, dbOpenForwardOnly)
lngFichero = FreeFile(1)
strCodestacion = ""
sRegistro = ""
' Abrir las carpetas y generar los archivos
Open strFichero For Output As #lngFichero
Do While Not MiRS.EOF
If Val(MiRS("dia08")) >= ((12 * j) + 1) And Val(MiRS("dia08")) <= (12 * i) Then
If strCodestacion = Trim(MiRS!Codestacion) Then
sRegistro = sRegistro + Space(3) + Format(Trim(MiRS!tmax), "##.00", 3)
If Val(MiRS("dia08")) = (12 * i) Then
Print #lngFichero, Format(sRegistro, "##.00")
End If
Else
If strCodestacion = "" Then
strCodestacion = Trim(MiRS!Codestacion)
Print #lngFichero, Format(strCodestacion, "000###") + Space(3) + Format(Trim(MiRS!Lat), "##.0000") + Space(3) + Format(Trim(MiRS!Lon), "##.0000") + Space(3) + Trim(MiRS!Altitud)
sRegistro = Format(Trim(MiRS!tmax), "##.00")
Else
strCodestacion = Trim(MiRS!Codestacion)
sRegistro = Format(Trim(MiRS!tmax), "##.00")
Print #lngFichero, Format(strCodestacion, "000###") + Space(3) + Format(Trim(MiRS!Lat), "##.0000") + Space(3) + Format(Trim(MiRS!Lon), "##.0000") + Space(3) + Trim(MiRS!Altitud)
End If
End If
End If
MiRS.MoveNext
Loop
j = j + 1
Close #lngFichero
MiRS.Close
Set MiRS = Nothing
Next i
End Sub
El código funciona bien, pero solo para un año especifico y para una tabla determinada, como puedo hacer en el código para que mi programa reconozca nombres de los campos de otras tablas, es decir tengo que trabajar con este código pero en otras tables que no tienen el nombre igual de los campos es decir codestacion en otra table puede ser stn, ¿cómo podría el programa reconocer ese nombre?
1 respuesta
Respuesta de jcteo
1