Programación en tres capas

Tengo una pregunta que hacerte sobre programación: ¿Cómo se pasa información de una base de datos entre tres capas?, Te comento, mi aplicación cliente tiene que mostrar datos en un formulario, pero estos datos son un conjunto de datos, te pongo un ejemplo: "todos los nombres de mi agenda que empiezan por A". Antes de dividir el programa en tres capas, yo lo que hacía era ejecutar una sentencia SQL a una tabla que me diese las filas en un Recordset, y luego navegaba en ese Recordset que estaba abierto como sólo lectura, pero lo tenía que tener abierto hasta que el usuario cerrase la interfaz.
Ahora tengo creado un módulo de acceso a datos y otro de gestión empresarial. En el módulo de acceso a datos yo tengo una función (método) que crea un Recordset y ejecuta una sentencia SQL sobre él y lo llena, pero si lo cierro lo pierdo, por ello lo que hago es clonarlo a un recordset pasado como parámetro, después cierro el recordset antes de terminar la función. Como a éste método lo llamo desde el módulo de gestión empresarial, es aquí donde estará definido el recordset pasado como parámetro. ¿Cómo paso toda la información desde aquí a la interfaz? ¿Sigo pasando el recordset como parámetro a la interfaz?
La verdad es que se me ocurre que si mantengo el Recordset pasando de una capa a otra (aunque sea clonando), estará abierto ¿no? Eso supongo no me da independencia o ¿es así como se hace?.
Como otra opción creé un tipo de dato registro definido por mi para pasarlo como parámetro, si tengo que pasar un grupo de filas, cada fila irá en uno de estos registros ¿debo declararme un array de registros y pasarlo por parámetro? Esta sería la solución que me da independencia de la base de datos pero ¿no consume demasiada memoria?. Con esta opción los pasos a realizar creo que serían los siguientes:
Componente acceso a datos
Abro conexión a BD
Abro tabla y ejecuto SQL sobre Recordset
Lleno un array de registros (pasado por referencia) de ese Recordset (si es uno como si son mil)
Cierro Recordset
Cierro conexión (y con ello la tabla)
Componente gestión de empresa
Hago lo que estime oportuno con el array de registros
Interfaz
Visualizo cada posición del array cada vez que haga click en un botón.
¿Cuál es mejor de las dos?
¿No hay otra manera mejor de solucionar esto?

1 Respuesta

Respuesta
1
Lo que comentas lo estas haciendo bien, pero para mí sería mejor que tu primer capa el fuente o ejecutable gráfico solo presente los datos en un control tipo flexgrid si así lo quieres, ya que no debes presentar tantos datos para modificarlos sino para consultarlos, segunda capa, la programación requerida en una dll o componente que te permita el interactuar con los controles de la primera y con stored procedures o consultas directas a la base de datos y desconectarse una vez obtenida la información y heredada al control de trabajo, la tercera capa, serían los stored procedure de explotación de la base de datos misma, selecciones, inserciones, borrados o actualizaciones.
Sobre lo que me dijiste del flexgrid, yo entiendo que es éste el control de trabajo, pero en mi caso lo que necesito es algún tipo de control navegacional pero que únicamente me muestre en pantalla un registro cada vez que me mueva sobre él. Como tú bien dices, la segunda capa llama a los stored procedures y captura un recordset, pero si yo me desconecto una vez obtenida la información la pierdo. ¿Dónde la vuelco para tener el control navegacional?
Con lo que comente, tienes que recorrer todo el recordset primero e ir colocando cada dato del recordset en el flexgrid, es decir, como si fueras llenando columnas y renglones de excel, lo haces con los datos del recordset. Ahora, no entiendo el motivo de que te muevas en un registro y después a otro, si me explicas un poco más la forma en la que piensas tener la información en pantalla podemos dedicar tiempo a encontrar la primera capa, la segunda y la tercera ya las entendiste. Si encontramos como quieres la primera, la segunda la ajustas de acuerdo a lo que quieres y la tercera pues, sería un complemento de la segunda para extraer información.
Hola David, primero te doy las gracias por ayudarme, no sabes como te lo agradezco.
Te explico:
En el formulario van a aparecer sólo textbox, los textbox que aparecen en pantalla muestran la información de sólo un registro (actual). Además tengo 2 botones, uno para avanzar y otro para retroceder. Cada vez que pulse uno de ellos me refrescará los datos de los textbox, así consigo el efecto que te comentaba al que yo llamo "navegacional".
Mi duda es: ¿En dónde almaceno los datos para no tenerlos en pantalla y poderlos recuperar?
Lo que hemos comentado del flexgrid, es lo que debes de hacer, ese control lo colocas invisible y generas una variable que utilizas como un indice, para que cuando presiones uno de los botones, incrementes este indice o lo decrementes y los datos de los text box los vayas colocando de acuerdo al registro o renglón del flexgrid, recuerda que los datos ya los tenemos en el flexgrid y no los tenemos que volver a traer de la base de datos. Solo tenemos que presentar lo que tenemos oculto y listo. Espero que me comprendas, es muy sencillo y no debes de tener problemas.
Gracias!, parece que lo he tenido delante mía todo el tiempo y he sido incapaz de verlo...
Cuando lo pruebe te mandaré un email con el resultado.
Saludos a México, D.F. desde Madrid-España

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas