Ver Mensaje Individual
  #41 (permalink)  
Antiguo 01/05/2010, 07:43
Avatar de erbuson
erbuson
 
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Ayuda por favor

Hola amigo Xyon:

La fiesta del trabajo y tu currando y haciéndome currar a mi (es broma) como habrás adivinado si tengo un vicio, es la programaciópn, no consigo detenerme y que mayor satisfacción para mi que poder ayudar a entender lo que a mi tanto me costó, porque es verdad aunque en los libros se explica todo o casi todo, la mayoría de las veces una explicación procedente de la experiencia es mucho mas productiva.

Vamos por lo fácil, la pregunta de Option Explicit, esta declaración lo que consigue es evitar que se produzcan errores de tipografía difíciles de detectar. Efectivamente un programa bien desarrollado no tiene la necesidad de ella, pero personalmente siempre la utilizo. Te explico su significado con un ejemplo

Function MultiplicaPorDos(Factor As Single) As Single
' Esta función tan simple devuelve como resultado el Factor multiplicado por 2
MultiplicaPonDos = Factor * 2
End Function

Como puedes ver, he cometido un error de escritura ya que en vez de MultiplicaPorDos de salida utilizo MultiplicaPonDos por lo que SIEMPRE devolverá 0

Si tengo el Option Explicit como primera sentencia del programa, éste me producirá un error porque MultiplicaPonDos no ha sido definida previamente así que me daré cuenta enseguida del error. Sun inconveniente, pues que siempre tienes que definir las variables con DIM cuando vayas a utilizarlas, a no ser que sean variables comunes que están definidas al principio o en un módulo. Un inconveniente que personalmente prefiero tener ya que así soy yo quien determina realmente el tipo de las variables a utilizar.

Respecto al tema de los módulos para entenderlo haremos tambien un ejemplo:

'*******************************************
Libreria.bas (Este es un módulo en el que tenemos funciones reutilizables por cualquier programa que efectuemos)
'*******************************************

Public Sub GridCabecera(Grid As MSFlexGrid, Columna As Single, AnchoTwips As Single, Titulo As String, Ajuste As String)
' Crea Cabeceras de un MsFlexGrid creando la Columna is no Existe
End Sub

Public Sub GridPonerDato(Grid As MSFlexGrid, Fila As Single, Columna As Single, Dato As Variant)
' Pone Datos en una Fila/Columna de un MsFlexGrid controlando exista la Fila y La Columna
End Sub

Public Sub ComboAdd(Combo As ComboBox, Item As String)
' Añade elementos a un combo evitando duplicados
End Sub

Public Function HmsDif(ByVal FechaInicial As Date, FechaFinal As Date, Optional ConSegundos As Boolean = False) As String
' Obtiene la diferencia de Horas entre dos Date
End Function
*
Public Function HmsSum(ByVal HmsUno As String, ByVal HmsDos As String) As String
' Suma dos valores de hh:mm:ss sin tener en cuenta el limite de 24 horas
End Function

'*******************************************
FicherosHoras.bas (Este es un módulo donde tenemos rutinas y funciones que utilizamos en TODOS los Formularios de Horas)
'*******************************************

Public Type Horas_T
inicio1 As Date
fin1 As Date
inicio2 As Date
fin2 As Date
inicio3 As Date
fin3 As Date
tiempo As Date
dia As String * 10 ' Lunes, Martes, ...
fecha As Integer
semana As Integer ' 1, 2, 3 ...
mes As String * 10 ' Enero, Febrero, ...
año As Integer
npedido As Long
Totalhoras As Date
End Type
Public RegistroHoras As Horas_T

Sub FicheroHoras(Opcion As Integer, Registro as Single)
' Funciones de Apertura, Lectura, Grabacion, Borrado, etc
End Sub

¿ Porque los módulos de esta manera ?

Cuando inicio una nueva aplicación, incluyo evidentemente el módulo libreria al cual si es necesario efectúo las modificaciones y mejoras oportunas, siempre teniendo en cuenta que este módulo esta incluido en el resto de los programas y no debo afectuar al normal funcionamiento de los mismos. ¿ Como consigo hacerlo ? Si para efectuar una mejora a una de las funciones o rutinas y debo pasarle un nuevo parámetro, le indico que el mismo es opcional, y controlo en la rutina las funciones del mismo, de este modo una recompilación de los demas programas, aunque haya sufrido modificaciones la rutina de Libreria no afecta a los mismos, a no ser que se trate de una mejora que implica una mejora para todos, de este modo una simple recompilación me modifica todos los programas.

Si la aplicación que empiezo debe utilizar el fichero de Horas, incluyo en el mismo FicherosHoras.bas, con lo que sin hacer nada tengo acceso a todos los datos de la propia aplicación. Por esta razón, amigo Xyon tal como te explicaba en uno de los post, incluyo siempre en el Type un numero prudente de Bytes Libres, ya que como puedes adivinar un cambio en la estructura del mismo, si no modifico la longitud de registro, me modifica tras la recompilación todos los programas a los que afecta.

Bueno, supongo que con este capítulo ya tienes en que pensar, y ya sabes donde me tienes.
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...