Soy consciente de que SQL es necesario dominarlo.
-Últimamente y cada vez más, utilizo un sólo fichero aleatorio pasando de
hacer indexados y esas cosas. En el último programa que he hecho, uno de
ellos tiene una longitud de registro de 3016 Bytes que próximamente he de
ampliar (más abajo te pongo la estructura del registro). Como ya he
explicado, relleno un list con el campo que quiero o que quiere el usuario
ver y al pinchar sobre él se ve la ficha completa. Lo curioso es que
funciona perfectamente en multipuesto y varios usuarios pueden acceder y
escribir en el mismo registro sin problemas.
-Para la copia de seguridad pongo siempre un programilla de copia al salir
en donde aparece un list con los ficheros que se van a copiar y otro con los
ficheros que se van copiando y con el FileCopy pienso que lo resuelvo bien y
rápido, se copia en otro ordenador de la red o en otro disco duro. Restauro
igual pero a la inversa.
-Borrar, borro poniendo un 1 en un campo byte del registro. Luego al dar de
alta un nuevo registro, antes compruebo si hay alguno borrado para usarlo.
-La actualización de datos es siempre instantánea, ya que el PUT lo guarda
sin más.
Buscar, busco en el list en donde tengo metido uno de los campos, si es
necesario buscar por más de un campo, el truco que hago es añadir el campo a
la derecha de cada Ittem del list sin que el usuario los pueda ver, o bien
presentar ese campo en el list volviendo a cargar el fichero.
-Para mayor seguridad los ficheros siempre están cerrados.
Fichero de un libro recetario de fórmulas:
Public Const kr = 3016 'Longitud del registro
Type Recetario
RNul As Byte
RETiqueta As String * 80 'Para Texto fijo en etiqueta
RTotalF As Double
RRegProsp As Long 'registro que ocupa el prospecto
RNomProsp As String * 23 'Nombre del fichero Prospecto
RNum As Long 'Número de registro del apunte
RFarmacia As String * 30 'farmacia que encarga la fórmula
RFormula As String * 50
RPaciente As String * 35
RMedico As String * 30
RCantTotal As Currency
RElaboracion As String * 10
RElaboracion8 As String * 8
RTipo As String * 4 'tipo de fórmula
RColegiado As String * 12 'ojo este no existia
RHonorariosFijos As String * 40 'Honorarios fijos
RNumRegReceta As Long 'Número registro recetario farmacia para version 4
RNada2 As String * 10
RDtoPaciente As String * 1 'Si el descuento es al paciente se pone una P
RIvaPorcien As Integer
RNumFar As Long 'numero de la farmacia
RDeudaReceta As Byte
RDNI As String * 10
RCaducidad As String * 15
RNombreFN As String * 48
RAceptacion As Boolean
RHonorarios As Currency
RProductos As Currency
REnvase As Currency
RIva As Currency
RDescuento As Currency
RDesc100(1 To 3) As Integer '(de la ficha del paciente, descuento en % de
honorarios, productos y total)
RTotal As Currency
RPro(1 To 25) As String * 40 'Productos
RCant(1 To 25) As Currency 'Cantidad
RUni(1 To 25) As String * 2 'Unidades
RCantT(1 To 25) As Currency 'Cantidadtotal
RPrecio(1 To 25) As Double ' Precio
RPa_ex(1 To 25) As String * 2 'Pa-ex
RAsss(1 To 25) As String * 2 'ASSS
REnvFoto(1 To 25) As String * 2 'Envase
RPsic(1 To 25) As String * 2 'Psicotropo
RAut(1 To 25) As String * 2 'Automático
RLote(1 To 25) As String * 8 'Num de lote
RCodigo(1 To 25) As String * 6 'Código de cada producto
RNumInt(1 To 25) As Long 'Número interno de cada producto
RFarCab As String * 30 'Nombre de la cabecera de la farmacia (Cl.Ob2)
RFarDir As String * 30 'Direccion de la farmacia
RFarPob As String * 30 'Poblacion de la farmacia
RFarTf As String * 10 'Telefono de la farmacia
RAportacion As Currency
RAporTantoporcien As String * 4
RASSSR As Byte
RNtot As Integer
RContabilizado As Byte
RNumLote As String * 12
RTextoFijoEtiqueta As String * 40
End Type
Public RR As Recetario
En realidad este fichero está relacionado con este otro que aún tiene un
registro más largo y me sirve para meter texto de una hoja de elaboración de
fórmulas magistrales. No me caliento mucho la cabeza y aunque son 2 ficheros
diferentes, tienen el mismo número de registro uno con otro.
Public Const kel = 4880
Type Elaboracion
Elabor(60) As String * 80 '61 líneas
End Type
Public EB As Elaboracion
En fin, que a pesar de todo voy a aprender a usar SQL.
Un saludo, Gusti.
http://www.magisfor.com
Post by Manuel CondeBueno, supongo ke si no te da pegas ni te roba mucho tiempo es otra opción
como las BDs.
Sin embargo es posible ke si pruebas ya no kieras volver a los ficheros
aleatorios.
- Toda la BD en un solo archivo (imagino que usas un archivo por cada
"tabla") -> Copias de seguridad, seguridad de datos, etc más fácil.
- Selección, borrado, actualización de datos instantanea con un solo comando
(nada de buscar, posicionarse y ejecutar) mediante SQL.
- Integridad de datos mediante relaciones (nada de comprobar manualmente si
el borrar un dato afecta a otros).
La lista sigue...
Eso sí, si kieres probar alguna vez, métete directamente con SQL, olvídate
de usar los recordsets para edicion-inserción (lo típico de los ejemplos de
VB) y nada de enlazar campos, hazlo tú a pelo. Serás más feliz. :)
--
Manuel Conde (http://manuel.conde.name)
Maicrosoft LVP (www.maicas.net)