Trabajar datos en linea

He creado un datatable lo enlaza a un datagrid, luego a los texbox,
hasta allí todo bien, pero veo que la conexión con LA TABLA ORIGEN no es
EN LINEA, es decir solo es una copia(cursor), bien no se si en .Net Hay alguna forma
de trabajar EN LINEA Directamente con la Tabla.
Por Decir:
Si (2)Usuarios trabajan simultáneamente, El Usuario(1) abre el form de Consulta de Clientes,
este espera una autorización de limite de crédito.
Después el Usuario(2) quien autoriza el limite de crédito abre el form Maestro de Clientes y
lo modifica marcando el check de autoarizacion y graba.
Hasta allí el usuario(1), sigue esperando la autorización pero no la vera hasta que cierre la pantalla
y vuelva a abrirla, porque el usuario(1)abrió 1ero la pantalla que el usuario(2).
A lo que voy es si el .Net Trabaja en Linea, dicho de otro modo, el usuario(1) vea el cambio generado
por el usuario(2), sin necesidad de cerrar y volver abrir su7 pantalla

11 Respuestas

Respuesta
1
Bueno mi respuesta seria "no"
.net no trabaja de esa forma con los datos, o al menos no que yo sepa, si quieres hacer eso que dices tienes que construir un servicio de windows, que daría la impresión de algo como lo que tu mencionas
Respuesta
1
Efectivamente, .net trabaja tanto con datos desconectados como conectados, según sean los requerimientos que el desarrollador necesite.
Suponiendo que estés trabajando sobre una aplicación de escritorio y no en un entorno web, las soluciones que puedo ver a tu problema son:
     - Puedes invocar el método refresh del control datagridview de la siguiente manera me. <nombre_del_datagridview>. Refresh()
     - Puedes poner un botón de refresco en la pantalla para que el usuario pueda refrescar la pantalla, es decir, que vuelva a realizar la petición a la base de datos y mostrar los nuevos.
     - Cambiar el botón de la 2º opción por un control timer que lo refresque cada intervalo de tiempo predeterminado.
Si tienes alguna duda o aclarar alguna cosa no dudes en contactar conmigo
Respuesta
1
Por lo que tengo entendido, sea cual sea el tipo de base de datos, cuando un usuario está editando una tabla, ésta queda abierta de manera exclusiva para ese usuario, es decir, queda bloqueada, y hasta que el primer usuario no la guarde los cambios los demás usuarios no los verán, aunque éstos si pueden leer datos de la tabla.
En cuanto al tema del formulario, lo que puedes hacer es añadir un botón que compruebe si se han modificado datos en esa tabla, y en tal caso, recargarlos en el formulario.
Respuesta
1
No comozco mucho la programación a mando de .net pero por lo que me detallas quizá sea un tema del motor de base de datos.
Quizá tienes algún problema de datos "no comitiados". Osea que tengas el Commit on Exit entonces mientras no sales de la página no da el commit y por lo tanto no es visible.
Respuesta
1
El problema es claro, pero la única solución que yo conozco es engorrosa.
La solución pasaría por crear un timer en el formulario que cada POR segundos mandara 2 instrucciones:
1.- Cerrar conexión a la base de datos
2.- Abrir la conexión y recuperaría los datos aportados por el usuario (2)
Otra opción sería que esta acción fuera asignada a un botón y el usuario hiciera clic para refrescar los datos.
La misma opción del timer y del botón podría asignarse para cerrar y abrir el formulario.
Respuesta
1
A ver, .Net o mejor dicho ADO .Net que es la tecnología que estas utilizando con el "DataTable", trabaja en modo desconectado, es decir, todo lo contrario que en línea. Un datatable, carga todos los datos que estén en ese momento en la BBDD y lo inserta en memoria para que lo puedas utilizar. Para trabajar en modo conectado existe otro elemento que se llama DATAREADER pero tan sólo puedes de registro en registro, por lo tanto dudo que te sirva para enlazarlo con el grid. En cualquier caso podrías refrescar el datatable enlazado al grid cada cierto tiempo con un temporizador, pero por supuesto todo ello carga bastante la máquina.
Respuesta
1
Por lo general se trabaja siempre en línea, pero con respecto a los datos de una bdd realiza una copia y lo presenta, esto para ahorrar recursos y tiempos. Existe un método llamado Refresh, para que siempre se vea los cambios y de un entorno en tiempo real tienes que codificar el refresh o databinding de los controles.
Respuesta
1
Tienes que realizar una función que te acutalice si hay algún cambio en la base de datos comparándola directamente con el datatable.
Respuesta
1
Te dejo un par de links, los cuales te pueden ayudar. Cualquier consulta me la mandas, lo único que mandame más detarlles, que bd, que lenguaje, etc.
http://programandoenpuntonet.blogspot.com/2007/07/bloqueo-pesimista-en-adonet-vbnet.html
http://www.foro.vb-mundo.com/f24/concurrencia-multiples-usuarios-mejorar-2173/
Respuesta
1
Sinceramente nunca me había surgido esa situación pero no creo que eso sea posible, en windows es imposible hacerlo sin cerrar y abrir la pantalla o al menos actualizarla desde algún control, lo que se me ocurre es que puedas poner un botón "Actualizar" que cumpla la función de cargar todos los datos que están cargados en pantalla,(usando parámetros), recuperar la nueva información con el permiso del usuario 2 y volver a abrir la pantalla actualizada, todo esto no lo notará el usuario del sistema
Respuesta
1
Normalmente cuando alguien abre una consulta se trae los datos del servidor y los deja libre ya que si no fuera así y siguiendo tu ejemplo el usuario 2 no podría hacer nada con la ficha del cliente. En esos casos se puede usar una segunda tabla con los datos "cliente" y "timestamp de la ultima modificación" y que al modificar los datos del cliente también se haga en esta tabla (con un trigger) y el usuario que consulta los datos de los clientes cada por tiempo lo haga de esta y si cambia haga un recarga del grid
Gracias por el dato amigo, para ser sincero no entendí muy bien, bueno lo que me quedo claro es que hay que hacer una recarga paa actualizar los datos
Saludos
carlso villena

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas