Nueva base de datos

Desconectado FRENTEFRIO

  • Cb Incus
  • *****
  • 4980
  • Sexo: Masculino
  • Ojáiz-Peñacastillo (Cantabria)
    • OJAIZMETEO
Nueva base de datos
« en: Viernes 16 Abril 2010 22:51:13 pm »
Saludos.
Pues aquí os la presento, tras el mucho tiempo que me ha llevado diseñarla y ponerla en funcionamiento, casi todo a base de consultar libros sobre el tema.
Está realizada en Access y permite grabar, visualizar en modo consulta cualquier dato, ya sea de un día en concreto o de un periodo determinado y sacar los listados que se precisen.
Aún la quedan hacer algunos toques (los detalles son siempre los que llevan más tiempo), pero eso será  a medida que se vayan introduciendo los datos y se vean las necesidades.
Os dejo con una captura de pantalla del Menú General de la base de datos.

Estación Meteorológica de Ojáiz-Peñacastillo (Cantabria) Página web: OJAIZMETEO
DETECTOR DE RAYOS
                                                   Vigilando el tiempo

Desconectado CANTABRUCO

  • Cb Calvus
  • ****
  • 2289
  • Sexo: Masculino
  • Adivaneubal
Re: Nueva base de datos
« Respuesta #1 en: Viernes 16 Abril 2010 23:18:49 pm »
Una curiosidad.
¿Como se delimita las HORAS DE SOL en el apartado horas de sol y radiacion solar?
Por umbral de intensidad luminica no puede ser.
Gracias.

Ya esta en funcionamiento la pagina?
« Última modificación: Viernes 16 Abril 2010 23:22:16 pm por CANTABRUCO »
..DESDE LOS CORRALES DE BUELNACANTABRIA A 99m DE ALTITUD..

Desconectado FRENTEFRIO

  • Cb Incus
  • *****
  • 4980
  • Sexo: Masculino
  • Ojáiz-Peñacastillo (Cantabria)
    • OJAIZMETEO
Re: Nueva base de datos
« Respuesta #2 en: Viernes 16 Abril 2010 23:24:47 pm »
Una curiosidad.
¿Como se delimita las HORAS DE SOL en el apartado horas de sol y radiacion solar?
Por umbral de intensidad luminica no puede ser.
Gracias.

Son dos cosas distintas, aunque relacionadas entre sí.
Las horas de sol se miden con un heliógrafo y la radiación solar con un pirheliómetro. En mi caso el sensor que mide la radiación solar es el sensor de la Davis, que da las medidas en Watios por metro cuadrado.

En cuanto al heliógrafo, aquí puedes ver un reportaje de cómo es y su funcionamiento:

https://www.tiempo.com/ram/1762/el-heligrafo-de-campbell-stokes/

Estación Meteorológica de Ojáiz-Peñacastillo (Cantabria) Página web: OJAIZMETEO
DETECTOR DE RAYOS
                                                   Vigilando el tiempo

Desconectado Vaqueret di Rondó

  • un Zarathustra insidioso
  • Supercélula
  • ******
  • 5077
  • Sexo: Masculino
  • Eppur si calfa....
    • MeteoCastalla
Re: Nueva base de datos
« Respuesta #3 en: Sábado 17 Abril 2010 01:00:32 am »

Está realizada en Access .....


Es que esa es la herramienta más indicada.

La de horas que le habrás echado.....


Un consejo (si no quieres llorar en un furturo próximo):

Procura tener los datos en una BD aparte y enlazar las tablas a la BD que utilizas como aplicación. Así te evitarás que si alguna rutina en VBA te descalabra la aplicación, que esto no afecte para nada a los datos.

Enhorabuena!!!
   

Desconectado FRENTEFRIO

  • Cb Incus
  • *****
  • 4980
  • Sexo: Masculino
  • Ojáiz-Peñacastillo (Cantabria)
    • OJAIZMETEO
Re: Nueva base de datos
« Respuesta #4 en: Sábado 17 Abril 2010 13:07:43 pm »

Está realizada en Access .....


Es que esa es la herramienta más indicada.

La de horas que le habrás echado.....


Un consejo (si no quieres llorar en un furturo próximo):

Procura tener los datos en una BD aparte y enlazar las tablas a la BD que utilizas como aplicación. Así te evitarás que si alguna rutina en VBA te descalabra la aplicación, que esto no afecte para nada a los datos.

Enhorabuena!!!

Hola Vaqueret.
Pues sí...horas...unas cuantas, no creas.
Se compone de muchas tablas ya que quería que todo estuviese bien organizado.
Cada día, por medio del administrador de tareas del Windows, hago una copia de sguridad a un disco duro externo, por si acaso hay algún fallo en el ordenata principal y se me va todo a freir monas. No sé si es eso a lo que tú te refieres... ::)

He capturado dos pantallas más, para que se pueda ver un poco la estructura. La primera de ellas corresponde al formulario en donde se graban los datos día a día. Es bastante extenso así que sólo se ve la mitad en la pantalla.

La otra captura corresponde a la solicitud de consulta de datos de un día cualquiera. También es extenso y por eso solo se ve la mitad de lo que es en realidad. Pero creo que puede servir para hacerse una idea.





Si tenéis alguna sugerencia, será bienvenida.
Estación Meteorológica de Ojáiz-Peñacastillo (Cantabria) Página web: OJAIZMETEO
DETECTOR DE RAYOS
                                                   Vigilando el tiempo

Desconectado JoseBP

  • Cb Calvus
  • ****
  • 2093
  • Sexo: Masculino
  • Jardines de Murillo-Sevilla
    • Tiempo en Sevilla
Re: Nueva base de datos
« Respuesta #5 en: Sábado 17 Abril 2010 13:31:52 pm »
Una base de datos mágnífica.
Sugerencia, por si no lo tienes así, divide la base de datos en 2 partes, así en una solamente tendrías las tablas y en la otra los formularios y las consultas.
Con esto puedes modificar los formularios y las consultas sin que te "afecte" a los datos de tus tablas, gana en rapidez y solamente tendrías que hacer copia diaria de los datos.
Saludos,

Desconectado Anzur

  • Cb Incus
  • *****
  • 2619
  • Sexo: Masculino
Re: Nueva base de datos
« Respuesta #6 en: Sábado 17 Abril 2010 16:34:28 pm »
Impresionante FRENTEFRÍO menudo trabajo te has pegado, espero que dentro de poco pueda utilizar yo también.
Rute      652msnm       70km al sur de Córdoba, suroeste de Jaén, oeste de Granada y 60km al norte de Málaga     10.559hab.


Año más húmedo: 1120,8 mm. 2009/10   ~   T. Máx. Absoluta: 42º en agosto 2005   ~   T. Mín. Absoluta: -7,6º en enero 2005

Desconectado Juanjo...

  • Cb Calvus
  • ****
  • 1984
  • Sexo: Masculino
  • Vamossss Atleti...!!!!!!!!!!!!!
Re: Nueva base de datos
« Respuesta #7 en: Sábado 17 Abril 2010 20:49:20 pm »
Impresionante trabajo te felicito ;D
El Puerto De Santa María , Cádiz . 32msnm .
El Blog de la meteorología Gaditana.
http://meteocdiz.blogspot.com/

Desconectado Valfria

  • Forestal en Meteored
  • Supercélula
  • ******
  • 7228
  • Sexo: Masculino
  • Cabuérniga
Re: Nueva base de datos
« Respuesta #8 en: Sábado 17 Abril 2010 20:49:56 pm »
Vaya currada, Jose.....una maravilla de base de datos.
Como siempre obra de un esntusiasta de la meteo.
Genial.
P.D.
Aún ando muy liado, me queda mucho trabajo de oficina pediente, nos se si me van ha  dejar acabarlo.
Ya te contaré.
TERÁN DE CABUÉRNIGA (CANTABRIA)
Estación Meteorológica, nº 1136-E,          254 m./s.n.m.
43º 13' 13 16" N            X     394300.51
04º 18' 05 97" W           Y   4786190.37

Desconectado los vados

  • PEDRO POLANCO-UCIEDA CANTABRIA
  • Cb Calvus
  • ****
  • 1321
  • Sexo: Masculino
  • CANTABRIA INFINITA
Re: Nueva base de datos
« Respuesta #9 en: Sábado 17 Abril 2010 22:48:23 pm »
ENHORABUENA !!!!!! si señor, un trabajo bien currao, yo como creo que lo tendras previsto, de todas formas te lo recuerdo que tengas algun disco externo que te quede grabado como una copia de seguridad, y tambien pondria un sai por si acaso,  felicitaciones, saludos
" el tiempo nos pone a cada uno en su lugar ".
N 43º22´49" W 004º01´40" POLANCO, CANTABRIA. 55m/s.n.m. (entre semana )
N 43º15´56" W 004º14´54" UCIEDA, CANTABRIA. 178m/s.n.m ( finde y festivos)

Desconectado FRENTEFRIO

  • Cb Incus
  • *****
  • 4980
  • Sexo: Masculino
  • Ojáiz-Peñacastillo (Cantabria)
    • OJAIZMETEO
Re: Nueva base de datos
« Respuesta #10 en: Sábado 17 Abril 2010 23:12:40 pm »
Saludos.

Gracias a todos por contestar. Y agradezco también todas las sugerencias.

No sé si eso de dividir la BD en dos partes se puede hacer una vez que ya está configurada, o tendría que haberlo previsto antes. Lo cierto es que ni pensé en ello.

Cada tabla es independiente de las demás; es decir, no hay elementos comunes en ninguna de ellas para establecer relaciones "uno a uno" ó "uno a varios". A no ser que puedan relacionarse a través de la ID.

Como dije anteriormente la tabla funciona bien e incluso ella sola ya realiza algunos cálculos que ya están programados (lo que me evita tener que grabar los datos a mano).

Para tener un respaldo de la BD (como ya dije también), todos los dias hago una copia de seguridad a un disco duro externo. Por si acaso...... ::)



Estación Meteorológica de Ojáiz-Peñacastillo (Cantabria) Página web: OJAIZMETEO
DETECTOR DE RAYOS
                                                   Vigilando el tiempo

Desconectado Vaqueret di Rondó

  • un Zarathustra insidioso
  • Supercélula
  • ******
  • 5077
  • Sexo: Masculino
  • Eppur si calfa....
    • MeteoCastalla
Re: Nueva base de datos
« Respuesta #11 en: Domingo 18 Abril 2010 02:48:46 am »
Saludos.

Gracias a todos por contestar. Y agradezco también todas las sugerencias.

No sé si eso de dividir la BD en dos partes se puede hacer una vez que ya está configurada, o tendría que haberlo previsto antes. Lo cierto es que ni pensé en ello.

Cada tabla es independiente de las demás; es decir, no hay elementos comunes en ninguna de ellas para establecer relaciones "uno a uno" ó "uno a varios". A no ser que puedan relacionarse a través de la ID.

Como dije anteriormente la tabla funciona bien e incluso ella sola ya realiza algunos cálculos que ya están programados (lo que me evita tener que grabar los datos a mano).

Para tener un respaldo de la BD (como ya dije también), todos los dias hago una copia de seguridad a un disco duro externo. Por si acaso...... ::)





Veo que JoseBP te ha sugerido exactamente lo mismo que yo.

Símplemente creas otra base de datos vacía, importas todas las tablas de la que tienes (Archivo -> Obtener datos externos -> Importar, Pulsa el botón de opciones para asegurarte de que importas también los datos y las relaciones entre tablas)
En la base de datos donde tienes los formularios, borras todas las tablas (previa copia de seguridad, of course) y, seguidamente, vuelves a 'Obtener Datos externos' -> 'Vincular tablas', seleccionas la nueva base de datos donde previamente habías importado las tablas, seleccionas todas las tablas y ¡¡ya está!!

Esto te da unas cuantas ventajas:
1. Sabido es por todos los que hemos tenido que trabajar con bases de Access la facilidad que tienen de 'escoñarse' por culpa del código VBA. Si te sucede ésto, solo perderás la aplicación, no los datos. No lo solucionas haciendo copias de seguridad porque nunca sabes si cuando has hecho la copia la bbase estaba ya 'escoñada'.
2. Facilidad para trabajar en red.
3. Facilidad futura para migrar a nuevas versiones del access sin tener que tocar para nada la base de datos.
4. Puedes utilizar el mismo programa con varias bases de datos al mismo tiempo (por ejemplo con varias estaciones, en el supuesto de que las tablas esten diseñadas para una única estación)


El único problema que te puedes encontrar es que si mueves de lugar la base de datos, la aplicación ya no los encontrará.
Para evitar eso puedes hacer una macro 'autoexec' que llame a una función que reconecte si se ha perdido el enlace:

Te dejo el código que suelo utilizar para cambiar/buscar la base de datos:

Código: [Seleccionar]

Option Compare Database
Option Explicit

'*******Verssió MultiUsuari
Global EmpDBs As String
Global DocDBs As String
'Global WKs As Workspace

'*Generals
Global NomDB As String
Global DirDB As String
Global DirDoc As String
Global DirImg As String
Global NomUsuari As String
Global CliServ As Boolean

'*******Registre
Global NumSerie As String
Global NomRegistre As String
Global NumRegistre As String
Global NoEval As Boolean
Global Ejercicio As Integer

Public Function Inicio()



End Function



'****** Empresa

Public Sub BuscaNomEmpresa()
Dim db As Database
Dim T As TableDef
Dim CC As String
Dim DD As String
Dim NN As String
Dim Estat As Integer

Dim reconecta As Boolean
On Error GoTo Error_Obri
CliServ = False
Set db = CurrentDb
On Error Resume Next
NomDB = ""
DirDB = ""
Set T = db.TableDefs("_Const")
If Err = 0 Then
   CC = T.Connect
   If Len(CC) > 0 Then
      DD = Mid$(CC, 11)
      If ExistFile(DD) Then
          Estat = 0
          NomDB = FileName(DD)
          DirDB = PathName(DD)
      Else
          BuscaUltimaEmpresa
          DD = DirDB + NomDB
          If ExistFile(DD) Then Estat = 1 Else Estat = 2
      End If
   Else
      Estat = -1 'Local
      NomDB = FileName(CurrentDb.name)
      DirDB = PathName(CurrentDb.name)
      CommandBars("Menú principal").Controls("&Cambio Empresa").Visible = False
   End If
Else
   Estat = 2
   Err.Clear
End If
On Error GoTo Error_Obri
CliServ = (Estat >= 0)
If Estat = 2 Then 'Preguntar
   DD = PreguntaNomEmpresa(True)
   NomDB = FileName(DD)
   DirDB = PathName(DD)
End If
If Estat > 0 Then
   While Not ConectaEmpresa(DD)
      MsgBox "El fichero " & DD & vbCr & "No es una base de datos válida", vbCritical, "¡ERROR!"
      DD = PreguntaNomEmpresa(True)
      NomDB = FileName(DD)
      DirDB = PathName(DD)
   Wend
End If
DirImg = DirDB & "Imágenes\"
DirDoc = DirDB & "Documentos\"
CambiaPropHyper

If DatosEmpresa Then GravaUltimaEmpresa Else DoCmd.Quit
DoEvents
Exit_Obri:
Set T = Nothing
Set db = Nothing
Exit Sub
Error_Obri:
   MsgBox "Error al abrir Empresa: " & DD & vbCr & Err.Description, vbCritical, "¡ERROR!"
   Resume Exit_Obri
End Sub
Private Sub CambiaPropHyper()
Dim db As Database
Dim P As Property
On Error Resume Next
Set db = CurrentDb
Set P = db.Containers("Databases").Documents("Summaryinfo").Properties("Hyperlink Base")
If Len(DirDoc) = 0 Then DirDoc = PathEmpresa + "\Documentos\"
P.Value = DirDoc
Set P = Nothing
Set db = Nothing
End Sub

Public Function CambiaEmpresa()
PreguntaNomEmpresa
End Function

Public Function PreguntaNomEmpresa(Optional Forsada As Boolean) As String
Dim CC As String
On Error GoTo Err_Entrada

While Len(CC) = 0
   CC = OpenAccessDB
   If Len(CC) = 0 Then
      If Forsada Then
         If MsgBox("¿Desea salir del programa sin abrir ninguna empresa?", vbCritical + vbYesNo, "¡Atención!") = vbYes Then DoCmd.Quit
      Else
         PreguntaNomEmpresa = DirDB + NomDB
         Exit Function
      End If
   Else
      If Not ExistFile(CC) Then CC = ""
   End If
Wend
If Not Forsada Then
   If ConectaEmpresa(CC) Then
      DatosEmpresa
      NomDB = FileName(CC)
      DirDB = PathName(CC)
      GravaUltimaEmpresa
   End If
End If
PreguntaNomEmpresa = CC
Err_Entrada:
If Err > 0 Then
  MsgBox "Error de Programa: " & CC & vbCr & Err.Description, vbCritical, "¡ERROR!"
  Err.Clear
End If
End Function


Public Function ConectaEmpresa(PathDB As String) As Boolean
Dim db As Database
Dim DBN As Database
Dim T As TableDef
Dim TNou As TableDef
Dim P As Integer
Dim Pathd As String
On Error GoTo Err_Conn
Set db = CurrentDb
Set DBN = OpenDatabase(PathDB, , True)
P = DBN.TableDefs.Count
SysCmd acSysCmdInitMeter, "Abriendo Empresa " & PathDB & "...", P
P = 1
On Error Resume Next
  Set T = DBN.TableDefs("_Const")
  If Err > 0 Then
     Err.Clear
     Exit Function
  End If
On Error GoTo Err_Conn

For Each T In DBN.TableDefs
    SysCmd acSysCmdUpdateMeter, P
    DoEvents
    If Left$(T.name, 4) <> "MSys" Then
       On Error Resume Next
       Set TNou = db.TableDefs(T.name)
       If Err = 0 Then
          If TNou.Connect <> ";DATABASE=" & PathDB Then
             TNou.Connect = ";DATABASE=" & PathDB
             TNou.RefreshLink
          End If
       Else
          Err.Clear
          DoCmd.TransferDatabase acLink, "Microsoft Access", PathDB, acTable, T.name, T.name
       End If
       On Error GoTo Err_Conn
    End If
    P = P + 1
Next T
DBN.Close
ConectaEmpresa = True
Exit_Conn:
  SysCmd acSysCmdClearStatus
  Set DBN = Nothing
  Set db = Nothing
  Set T = Nothing
  Set TNou = Nothing
  Exit Function
Err_Conn:
   MsgBox "Error al abrir el archivo: " & PathDB & vbCr & Err.Description, vbCritical, "¡ERROR!"
   Resume Exit_Conn
End Function

Public Sub MostraUsuari()
NomUsuari = CurrentUser
CommandBars("Menú Rápido").Controls(4).Caption = NomUsuari
End Sub

Public Function SumaChar(S As String) As String
Dim i As Integer
Dim n As Integer
For i = 1 To Len(S): n = n + Asc(Mid$(S, i, 1)): Next i
SumaChar = Chr$((n Mod 26) + 65)
End Function
Public Function CodChar(S As String, Num As Integer) As Integer
Dim i As Integer
Dim n As Integer
For i = 1 To Len(S): n = n + Asc(Mid$(S, i, 1)): Next i
CodChar = (n Mod Num)
End Function
Public Function SumaCharNum(S As String) As String
Dim i As Integer
Dim n As Integer
For i = 1 To Len(S): n = n + Asc(Mid$(S, i, 1)): Next i
SumaCharNum = Chr$((n Mod 10) + 48)
End Function
Public Function ComprovaSerie(Serie As String, NomReg As String) As String
Dim i As Integer
ComprovaSerie = ""
If Len(Serie) <> 12 Then Exit Function
If Left$(Serie, 4) <> (Left$(CNomCompanyia, 3) & "C") Then Exit Function
i = Len(NomReg)
If Mid$(Serie, 5, 4) <> SumaChar(Left$(NomReg, i - 3)) & SumaChar(Left$(NomReg, i - 2)) & SumaChar(Left$(NomReg, i - 1)) & SumaChar(Left$(NomReg, i)) Then Exit Function
If Mid$(Serie, 9, 4) <> SumaCharNum(Left$(Serie, 8)) & SumaCharNum(Left$(Serie, 9)) & SumaCharNum(Left$(Serie, 10)) & SumaCharNum(Left$(Serie, 11)) Then Exit Function
ComprovaSerie = Serie
End Function

Public Sub BuscaRegistre()
Dim RegTot As Long
Dim XX As Long

RegTot = RegOpenGeneral
XX = RegQueryValue(RegTot, "Num Registro", NumRegistre)
XX = RegQueryValue(RegTot, "Nombre Registrado", NomRegistre)
RegCloseKey RegTot
NumSerie = ComprovaSerie(NumRegistre, NomRegistre)
NoEval = NumSerie <> ""
If Not NoEval Then DoCmd.OpenForm "_Registre_", , , , , acDialog
End Sub
Public Sub BuscaUltimaEmpresa()
Dim RegTot As Long
Dim XX As Long
RegTot = RegOpenLocal
XX = RegQueryValue(RegTot, "Directorio Datos", DirDB)
XX = RegQueryValue(RegTot, "Nombre Datos", NomDB)
RegCloseKey RegTot
End Sub
Public Sub GravaUltimaEmpresa()
Dim RegTot As Long
Dim XX As Long
RegTot = RegOpenLocal
XX = RegSetValue(RegTot, "Directorio Datos", REG_SZ, DirDB)
XX = RegSetValue(RegTot, "Nombre Datos", REG_SZ, NomDB)
RegCloseKey RegTot
End Sub
Public Function Compactar()
Dim Data As String
On Error Resume Next
Data = Format(Now, "yyyy-mm-dd")
RepairDatabase DirDB & NomDB
If Err > 0 Then
   MsgBox Err.Description
   Err.Clear
Else
   CompactDatabase DirDB & NomDB, DirDB & Data & NomDB
   If Err > 0 Then
      MsgBox Err.Description
      Err.Clear
   Else
      FileCopy DirDB & Data & NomDB, DirDB & NomDB
   End If
End If
End Function

Public Function PathEmpresa() As String
On Error GoTo Err_Conn
If Len(DirDB) = 0 Then
    DirDB = PathName(EmpresaDB)
End If
PathEmpresa = DirDB
Exit_Conn:
  Exit Function
Err_Conn:
   Resume Exit_Conn
End Function
Public Function PathDoc() As String
PathDoc = PathEmpresa + "\documentos\"
End Function
Public Function EmpresaDB() As String
Dim CC As String
Dim i As Integer
On Error GoTo Err_Conn
If Len(DirDB) > 0 Then
    EmpresaDB = DirDB + "\" + NomDB
Else
    CC = CurrentDb.TableDefs("_Const").Connect
    i = InStr(CC, "=")
    If i > 0 Then EmpresaDB = Mid$(CC, i + 1)
End If
Exit_Conn:
  Exit Function
Err_Conn:
   Resume Exit_Conn
End Function



Obviamente este código era de un programa mío de gestión para empresas, pero te sirve igual.