IF TBloquesea.Text = ""
Message.Info("DEBE LLENAR EL CAMPO REQUERIDO")
ELSE
asisresul = coneccion.asiscon.Exec("SELECT * FROM asesores WHERE codigo = &1", textbox8.text)
IF asisresul.available THEN
TBcodigo.Text = asisresul["codigo"]
TBcedula.text = asisresul["cedula"]
TBnombres.text = asisresul["nombres"]
TBapellidos.text = asisresul["apellidos"]
TBdireccion.text = asisresul["direccion"]
TBtelefono.text = asisresul["telefono"]
CBsexo.text = asisresul["sexo"]
CBprorama.Text = asisresul["programa"]
VBfecha_ingreso.Value = asisresul["fecha_ingreso"]
ENDIF
ENDIF
Message.Info("DEBE LLENAR EL CAMPO REQUERIDO")
ELSE
asisresul = coneccion.asiscon.Exec("SELECT * FROM asesores WHERE codigo = &1", textbox8.text)
IF asisresul.available THEN
TBcodigo.Text = asisresul["codigo"]
TBcedula.text = asisresul["cedula"]
TBnombres.text = asisresul["nombres"]
TBapellidos.text = asisresul["apellidos"]
TBdireccion.text = asisresul["direccion"]
TBtelefono.text = asisresul["telefono"]
CBsexo.text = asisresul["sexo"]
CBprorama.Text = asisresul["programa"]
VBfecha_ingreso.Value = asisresul["fecha_ingreso"]
ENDIF
ENDIF
Donde el programador ha cambiado el nombre de los campos, dándole sentido al código, lo cual está muy bien. Pero ¿y si la tabla tiene 30 campos, o 100? Qué pesadez ¿no? y a la hora de grabar, a repetirlo todo al revés:
asisresul["codigo"]=TBcodigo.Text
asisresul["cedula"]=TBcedula.Text
....
....
asisresul["cedula"]=TBcedula.Text
....
....
etc., etc. hasta los 30.. o 100 campos
Personalmente odio ese tipo de código. Es aburrido de teclear, fácil de cometer errores, largo de leer y complicado de modificar. Por tanto hace tiempo que diseñé unas funcioncitas que me hacen el trabajo sucio:
Con ellas el ejemplo anterior quedaría así:
PUBLIC SUB btGrabar_Click()
DIM r AS Result
IF validaciones 'una función que compruebe que el tal campo está lleno, que este otro no sea menor que cero, etc. y devuelva cierto si todo es ok
asisresul = coneccion.asiscon.Exec("SELECT * FROM asesores WHERE codigo = &1", textbox8.text)
formularios.llenaCampos(asisresul, ME)
ENDIF
END
DIM r AS Result
IF validaciones 'una función que compruebe que el tal campo está lleno, que este otro no sea menor que cero, etc. y devuelva cierto si todo es ok
asisresul = coneccion.asiscon.Exec("SELECT * FROM asesores WHERE codigo = &1", textbox8.text)
formularios.llenaCampos(asisresul, ME)
ENDIF
END
¿No es mucho más simple y claro?
En el momento de grabar un registro nuevo, sólo tenéis que añadir la linea
formularios.creaRegistro("asesores", ME)
Para grabar los datos de la pantalla:
formularios.grabaRegistro("asesores", "id", id.value, ME)
Para limpiar los campos después de grabar o antes de mostrar campos nuevos:
formularios.limpiaCampos(ME)
Para que os funcione tan sólo tenéis que hacer una cosa muy sencilla:
Que los campos se llamen igual que los campos de la base de datos. Si el campo es "apellidos" en la tabla, el TextBox ha de llamarse "apellidos".
¿Y qué pasa con los ComboBox? "Tengo varios comboBox que me muestran los datos de otras tablas con las que se relaciona ésta"... pensaréis
En ese caso basta con añadir en tiempo de diseño la siguiente cadena en la propiedad Tag del combobox:
tabla_relacionada|campo_a_grabar|campo_a_mostrar1|campo_a_mostrar2|campo_a_mostrar3...etc
Ejemplo:
Siguiendo el ejemplo de arriba, estamos manejando la tabla Asistencias que tiene una referencia a los asesores.
Creamos un ComboBox que se llama "asesorid" (el mismo nombre que el campo de la tabla, recordad) y en el tag ponemos la siguiente cadena:
asesores|id|apellidos|nombre
Y ya está, nuestro combo se llenará automáticamente con el contenido de la tabla de asesores y grabará en la tabla el id del asesor cuando llamemos a la función grabaregistro.
Sólo un detalle más: Si tenéis algún campo que queréis mostrar, pero no grabar (como pueden ser los autonuméricos o los timestamp), basta con poner en tiempo de diseño un FALSE en el Tag del campo.
Esta solución es la que utilizo siempre. El código gana en limpieza, velocidad de escritura y en facilidad de lectura.
He subido una demostración de actualización de una tabla que tiene un campo vinculado con otra. No tenéis ni que entender el código que os adjunto aquí. Veréis que es muy sencillo de manejar.
Lo podéis descargar de Aquí:http://desconcertado.es/archivos/Ejemplo_formularios.zip