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?

1 respuesta

Respuesta
1
Veo que estas usando consultas con sql
Existe una consulta para conocer los campos de una tabla
sql='show columns from tabla'
La cual te regresa los nombres de las columnas
Epero te sirva
Lo que sucede es que tengo que correr el código que puse pero sin modificar nada en el texto y lo tengo que hacer para varias tablas que están en mi misma base de datos, la pregunta es que en las tablas los campos que corresponden al código de estación no siempre cohiciden con el mismo nombre en una tabla puede ser CodEstacion en otra estación en otra IdEst, etc igual para la temperatura máxima, en una es tmax en otrmax en otra val... como puedo hacer para que programa sepa cual campo corresponda y correr el programa sin modificar el nombre de las variables... debo agregar algo al programa.
Gracias
Si te entiendo lo que pasa es que me parece que no es posible hacerlo desde un DAO
por ejemplo php tiene su función mysql_fetch_field() la cual te muestra los campos de una consulta, pero me parece (no estoy seguro) que exista algo parecido usando DAO en VB lo que puedes hacer es 1 no usar los nombres de los campos si no index es decir en una tabla con campos c1 y c2 envés de MiRS("c1") usar MiRS(0) y MiRS("c2") usar MiRS(1) esto solo en caso de que en las tablas las columnas estén colocadas de igual forma.
Otra solución podría ser si tienes todos los nombres posibles de los campos en las diferentes tablas usar show columns from tabla y comprarar con los campos que tu tienes para saber cual usar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas