Ver Mensaje Individual
  #18 (permalink)  
Antiguo 14/04/2010, 01:09
Avatar de XYON126
XYON126
 
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años, 1 mes
Puntos: 0
Respuesta: Importar de un .dat o txt a MSFlexGrid

Hola erbunson!

Muchas gracias por esto me ayuda un monton, aunque como esperabas me provoca varias cnsultas.

1. Este codigo lo tienes en un modulo.bas o en el programa.

2. Si he entendido bien con la función "Select Case LCase(Opcion)" lo que estas haciendo son cuatro sentencias que llamas a tu antojo o necesidad como si fuesen variables ¿Es asi?¿Es lo mismo a crear varias subrutinas como (leer(), grabar(), etc.?si es asi, ¿esto seria valido para cuando tienes que crear un número elevado de subrutinas y asi poderlas agrupar para hacer mas comprensible el codigo?.

3. En esta parte de codigo :
Código vb:
Ver original
  1. Sub FicheroClientes(Opcion As String, Registro As Single)
  2.  ' Variable de número de Fichero. Estática para guardarla en la Rutina.
  3.  Static Numero As Integer
  4.  ' Si Número = Cero el archivo no está abierto. Lo asignamos y Abrimos.
  5. If Numero = 0 Then
  6.  Numero = FreeFile
  7. Open "CLIENTES.DAT" For Random As #Numero Len = 256
  8. End If

Veo que por un lado asignas un canal a la variable "Numero" o que use el FreeFile y despues en el Open siempre habres un canal en vez de usar el FreeFile ¿Porque, no es mejor usar siempre el FreeFile? y despues en la sentencia Open le das siempre el tamaño de 256 que es lo mismo que "CamposClientes", ¿lo haces por no llamar a "CamposClientes" en cada LEN?

4.Veo que utilizas la funcion "Sub" sola, referente a ella ypor mucho que he buscado siempre me la asocian o con un "Private Sub" o con un "Sub Main" y no sola, en tu caso como se comporta ¿Porque de Sub a solas.?

5. Y para rematar en varias sentencias If por ejemplo :

If Registro = 0 Or Registro > LOF(Numero) / 256 Then
Registro = -1

coges el valor del tamaño del registro y lo divides por 256 ¿Porque?
Se que son trucos de perro viejo por eso te lo pregunto.

Un saludo

PDTA.:

Una consulta mas .:

En este codigo :

Código C:
Ver original
  1. Private Sub GridPonerDato(Grid As MSFlexGrid, Fila As Single, Columna As Single, Dato As Variant)
  2.   ' Si la fila no existe, la añadimos. La columna es de suponer que ya le hemos puesto cabecera
  3.  If Grid.Rows - 1 < Fila Then Grid.Rows = Fila + 1
  4.  Grid.TextMatrix(Fila, Columna) = Dato
  5. End Sub

Si tengo tres grillas que se llaman MsFlexgrid1, MsFlexgrid2 y MsFlexgrid3

y para llamarlas con :

Código vb:
Ver original
  1. CALL GridPonerDato (Grid, 0, 0, "Dato")

He probado esto, con MsgBox el nomdre es bueno, pero en el CALL me da el error "el tipo de argumento de ByRef no coincide" ¿Porque?

Código vb:
Ver original
  1. Dim i As Integer, Grid As String
  2.  
  3. i = 1
  4.  
  5. For i = i To 3
  6.  
  7. Grid = "MsFlexgrid" & i
  8.  
  9. Call GridPonerDato(Grid, 0, 0, "25")

en cambio si al codigo no le declaro el "Grid As String"

el error que me da es "Variable no definida"

¿Como renombro la Grilla?

Saludo2

Última edición por XYON126; 14/04/2010 a las 11:47