Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Ap Multiusuario:Cómo avisar que un reg está siendo editado?
Ir a página 1, 2  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Ap Multiusuario:Cómo avisar que un reg está siendo editado? Responder citando

Hola a todos.
Tengo una aplicación que intento correr en un entorno multiusuario.
Si un usuario edita un registro y luego un segundo entra al modo edición el error de bloqueo para el segundo usuario me lo tira después que terminó de modificar los datos.
Yo quisiera que me avise antes de comenzar a editar los datos.
Es posible?
Todo lo que encontré hasta ahora es cómo manejar los estados a nivel tabla o dataset. Pero a nivel registro, yo quisiera que la aplicación le avise al usuario que ese registro no está disponible al momento de oprimir el botón de modificación y no luego de postearlo.
Mi transacción está así (uso Interbase):
AutoStopAction:saCommitRetaining;
DefaultAction:TaCommitRetaining;
Params:
read_commited;
rec_version;
nowait
Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

ya he visto muchos posts sobre multiusario.
Yo he usado btrieve desde hace muchos años, y ahora pervasive sql (muy parecido a las bases de datos que se usan en builder)

¿Como se soluciona el problema de un usuario editando? Pues bloqueando antes de editar. Cuando tu lees un registro que esta bloqueado por otro usuario, el motor te niega ese registro indicandote que esta bloqueado.

Btrieve te puede informar hasta quien es el usuario que esta usando ese registro. Y ademas lo hace todo solito.

Saludos, Bosoft
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: BTRIEVE Responder citando

Muchas gracias Bosoft.
No tenía ningún tipo de información sobre BTRIEVE pero intenté buscar algo en internet. Ya estoy bajando un trial.
A ver si entendí bien: es un programa que almacena la información de los archivos en formato "Btrieve" y es compatible con algunos motores de bases de datos. Y trae un gestor de registros (el cual me permitiría resolver el problema de mi consulta).
Es así?
Y es compatible con Interbase?
Es decir, podré usar las bases de interbase?
Última consulta: no hay versiones gratis de BTRIEVE?
Saludos y gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Cita:
A ver si entendí bien: es un programa que almacena la información de los archivos en formato "Btrieve" y es compatible con algunos motores de bases de datos. Y trae un gestor de registros (el cual me permitiría resolver el problema de mi consulta).

NO. Btrieve no es compatible con nadie. Simplemente es otro motor de base de datos, como oracle, firefox, acces, etc. Para mi muchas veces mas potente. Te premite trabajar como cuaquier base (cosa que no hago) y de forma tradicinal, es decir, accediendo registro a registro via programa.

Cita:
no hay versiones gratis de BTRIEVE?

No. pero hay un trial de 30 dias (o son 60?)

entra en www.pervasive.com y hechale un vistazo.
Por cierto bajate tambien los componentes para builder

Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Espero haber entendido bien, mira lo qu eyo hago es definirr un cambo boleano llamado "bloqueado", ahi activo si esta en edicion el usuario y desactivo cuando termina

Saludos
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Cita:
Espero haber entendido bien, mira lo qu eyo hago es definirr un cambo boleano llamado "bloqueado", ahi activo si esta en edicion el usuario y desactivo cuando termina


Eso es lo que hacen la mayoria de las bases de datos. Pervasive (btrieve) usa un archivo aparte para señalar los bloqueos. ¿La razon? imagina que haya un corte de luz antes de guardar la modificaciones. Nadie podria acceder al registro.
Btrieve devuelve codigo de bloqueo, sin datos, cuando el registro esta bloqueado, pero tiene la opcion de "esperar" a que se desbloquee. ademas si usas la identificacion de user, te dice incluso el usuario que "tiene" el dichoso registro.
Y todo eso transparente para el programador, o sea, sin preocuparte de nada.

Saludos, bosoft.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias a ambos, Gabriel y Bosoft.
Gabriel:
He pensado en añadir un campo lógico en mis registros de Interbase.Es una buena opción.Pero en ese caso me gustaría informar al usuario que no puede modificar quién está modificando el registro.Para ello intenté agregar el componente IBSecurityService.Pero no logro hacer que me muestre el usuario.Siguiendo la misma lógica pensé en agregar un campo que me almacene el usuario.Pero no lo pude lograr.
Mi pregunta es la siguiente: tengo alguna manera de saber quién está usando el registro en modo edición?
Bosoft:
En cuanto a BTRIEVE, bajé el trial de pervasive.Pero para probarlo debo obtener la licencia telefónicamente o por mail y no lo he conseguido aún.Por tus comentarios concluyo que sería el motor apropiado para mi aplicación, pero debería crear las bases y modificar código.Espero igualmente poder obtener la licencia y probarlo.
Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Bueno, por ahora resolví el asunto añadiendo dos campos a mis tablas:
-el campo lógico que permite saber si un registro está siendo editado,
-y el campo que almacena el usuario que está editando el registro en ese momento.
El usuario lo obtuve a través del componente IBDatabase:
DataModule2->IBTable1->FieldByName("usuarioeditando")->AsString = DataModule2->IBDatabase1->DBParamByDPB[isc_dpb_user_name];

Más allá de que mi error fue diseñar la base sin tener en cuenta la arquitectura de interbase en el momento de hacerlo, ya que podría haber incorporado estos campos en cada una de las tablas (que son muchas por cierto) en el momento de crearlas.Pienso que debe haber una solución más eficiente.Pero por ahora, y hasta que maneje mejor c++ e interbase, salgo del paso y tal vez le sirva a alguien más.
Lo que plantea Bosoft es cierto.Qué pasa si hay un corte?Aún no he hecho suficientes pruebas con las transacciones.Pero por lo que leí creería que si estas modificaciones están dentro de transacciones, un corte no sería inconveniente.Ya que para evitar estos y otros problemas es que se opera con transacciones.
Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola laura, una pregunta si nos referimos al diseño de la base de datos que mencionas y que dices que esta un poco mal modelada, quisiera hacerte una pregunta, para no revolverte, en que caso extremo puede que 2 estaciones modifiquen un registro? muchas veces he comentado que son las malas costumbres de EI2 ( je je para no hacer comercial y que me cobren por la marca), lo que mencionas es un problema que puedes encontarlo en paradox, pero es muy improbable que en interbase lo encuentres,

supongamos tu ejemplo con 1 tienda 2 terminales y muchos productos.

tabla productos-
cod-cant-descr
01-100-plumas de escritura

terminal A- vende 1 pluma (abre tabla y verifica cantidad) -- 99 plumas
terminal b- vende 1 pluma (abre tabla y verifica cantidad) -- 98 plumas

terminal A-cancela la venta (regresa el producto y cierra) plumas 99
terminal B-realiza con exito la venta (vende el producto y cierra) plumas 99

aun tengas millonesimas de segundos no puede existir 2 usuarios modificando el registro..
otro ejemplo

2 usuarios modificando una nota de compra de productos para alimentar el inventario

analicemos
1.- es posible que 2 usuarios tengan la misma factura al mismo tiempo?
2.- si es asi, no crees que es un fradue, por haber dos facturas con el mismo folio y mismos productos..
3.- si asi fuera, y el usuario mete 200 plumas, y el otro mete 300 plumas
4.- cuando aplique la transaccion cuantas plumas deben haber
obiamente deben haber 500 plumas mas + 99 de arriba 599
por muy lejana y remota coincidencia, esto es algo imposible.

para terminar 1 usuario no puede estar haciendo cola al mismo tiempo en 2 cajas en un centro comercial y pagar en las 2 cajas con la misma tarjeta de credito al mismo tiempo, por como lo quieras ver si eso fuera posible, aun asi no llegarian al mismo tiempo...


bien, espero que antes de moverle a tu base de datos y luego no puedas regresarla quieres tomarte un tiempo con nosotros y explicarnos o mostrarnos el modelo de tu base.. es decir como estas manejando la transaccion de informacion para que pueda sucitarse que 2 terminales accedan al mismo registro...

un saludo y estamos en contacto...
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Yo usaba transacciones antiguamente, pero acabe por dejar de usarlas.
El porque: Bloqueo general (en multiusuario) si no tienes los archivos de datos controlados a la hora de leer, escribir, etc..
El ejemplo (siempre con bloqueo de registro)

puesto 1:
abro archivo 1:
abro archivo 2:
abro archivo 3:
leo y bloqueo registro 3 del archivo 1
leo y bloqueo registro 1 del archivo 2
modifico registros y desbloqueo.

puesto 2:
abro archivo 1:
abro archivo 2:
abro archivo 3:
leo y bloqueo registro 3 del archivo 1-no puedo, se esta usando
leo y bloqueo registro 2 del archivo 2
leo y bloqueo registro 1 del archivo 3
no puedo modificar, poque el registro 3 esta bloqueado

en caso de transacciones, el puesto 2 no terminaria hasta que el 1 no "suelte" el registro 3.

sin trasacciones el puesto 2 termina el resto y estaria a la espera del registro 3.

¿pero que pasaria si antes de terminar el puesto 1 intenta leer el registro 1 del archivo 3?
todo bloqueado por las 2 transacciones.

espero haberme explicado bien

saludos, bosoft.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

vuelvo a mi pregunta anterior, dime en uno de los casos, en los cuales tus terminales

Puesto 1 y Puesto 2, esten editando el registro al mismo tiempo...
y cambiando sus datos al mismo tiempo...

por lo consiguiente, es Interbase Firebird o es alguna otra base de datos.. usando el BDE, si usas el BDE automaticamente estas callendo en la parte de Bloqueos ahora bien, como se dice un mal modelo de transacciones (hablando del flujo de datos, no de la accion Commit, Rollback), si la base de dato se encuentra mal diseñada y los flujos de informacion estan mal ideados, es posible que no sea la terminal quien marque el fallo del sistema.

Un ejemplo es en el post, si en este momento 3 o 5 usuarios estuvieran modificando este mismo post, que debe pasar... es decir el foro te debe decir " no puedes contestar, se encuentra bloqueado por tal usuario" y si te das cuento eso no es correcto... y mucho menos sucede...
mas sin embargo podemos estar escribiendo 100 personas al mismo tiempo y todas modificando las respuestas. pero eso, dependen del tiempo y momento en que presionaron [ Enviar ]
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Cita:
Puesto 1 y Puesto 2, esten editando el registro al mismo tiempo...
y cambiando sus datos al mismo tiempo...

Ya se que es implosible, o al menos debería serlo. Pero yo voy mas alla. Las transacciones pueden solucionar problemas de mala grabación, pero tambien pueden causar caidas del sistema.

En lo de los bloqueos, yo soy de los que los uso siempre, y ademas los hago de forma "manual", no espero a que el motor escriba un bool para anunciar a los demas usuarios que este registro esta bloqueado. Por ese problema llege a btrieve, que era la unica base de datos en tiempos del msdos 3.1 que lo hacia, y ademas estaba programado por novell para su sistema de red.
Actualmente yo programo sin apoyo de los datasets y cosas de esas, puesto que quiero saber en cualquier momento lo que ocurre con los datos que estoy gestionando. Btrieve (pervasive) tambien trabaja como las demas bases, pero eso a mi no me interesa, y creedme, hace muchos años que no tengo ningun problema, y mis programas hay llegado a tener 25 users conectados al mismo tiempo.

Saludos, Bosoft.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

bosoft escribió:
...Las transacciones pueden solucionar problemas de mala grabación, pero tambien pueden causar caidas del sistema.....


Te refieres al componente TTransaction ?

yo hablo de la transaccion de datos. no del componente, al hablar de Transaccion es hablar de el como se mueve la informacion de una tabla a otra...

bosoft escribió:
En lo de los bloqueos, yo soy de los que los uso siempre, y ademas los hago de forma "manual", no espero a que el motor escriba un bool para anunciar a los demas usuarios que este registro esta bloqueado. Por ese problema llege a btrieve, que era la unica base de datos en tiempos del msdos 3.1 que lo hacia, y ademas estaba programado por novell para su sistema de red.


es lo que me refiero, la costumbre del bloqueo ahora si voy a decirlo cuando en eso tiempos exisita el ms-dos ver 3.1 las primeras bases de datos eran Dbase y por aquellos tiempos el Clipper Summer 86 aun que siendo sinceros la primera version Se llamó Clipper Attum 86 pues bien la compañia de EIDOS un grupo de muy buena pinta en cuanto a programacion de bases de datos sacaron un libro de bloqueos ya que en ese momento la proliferacion de Internet o de la redes escasa o nula mucha gente tenia programas mono usuario, pero al entrar Novell como sistema operativo de red (cuando metias un diskette y login - password)
y te conectabas a una red... el problema no era el sistema operativo, ya que lo unico que se interesaba era poder compartir recursos.

ahi empieza el dilema de los desarrolladores de software quienes no sabian controlar los registros editados por usuarios... ahora si con la tematica que ahora ponemos nosotros "2 al mismo tiempo"

y fue EIDOS quien con su famoso libro de "clipper en redes de area local" nos pone la idea de que se tiene que bloquear, pero como actualmente existe y se prolifera el lenguaje SQL esa teoria esta quedando el el recuerdo...(hhaaa viejos tiempos de clipper)

bien a lo que hiva, actualemente con los gestores de bases de datos que hay en el mercado, ya que en esos tiempos empezaba a salir oracle e interbase (muy caros por eso no tuviero el auge), podemos decir que el tema de bloqueos es una manera de pensar aferrada a lo de las bases de datos anteriores, y como generalmente las personas que nos enseñan o nosotros mismo traemos ese habito del bloqueo... pues no vemos claro

esto del bloqueo esta como el tema de un formulario de busqueda en Interbase la pregunta esta en el foro y la hemos contestado.....

voy a tratar de explicar para que vean que es cierto lo que digo, traemos malas costumbres de versiones de gestores anteriores

1.- "Tengo un Form donde visualizo los registros de mi tabla, pero quiero crear un form para mostrarlos y elegir 1 y luego regresar para que el usuario pueda editarlo, un form de busqueda"

1.- en interbase cuando se genera la sentencia
"select * From Cliente where CmpCodigo STARTING WITH '1234' "

se esta trayendo los registros que inicien con 1234 en el campo codigo


bien luego me preguntan,

como le hago para saber que numero de registro es y volver a regresar a mi tabla a editarlo...

Shocked ahi es donde no entiendo, si ya estas en el registro y cuando te moviste en la tabla con select quedaste en el registro que tu querias, para que quieres volver a realizar una consulta como esta
"select * From Cliente" y luego buscar el numero de registro si cada vez que haces un select la palabra Recno() no es la misma...


al momento de presionar esc o enter de tu form, automaticamente estas dentro del registro, lo muestras en tu form y lo editas...

lo que se hacia
pantallas con el clasico DBEdit de Clipper. que ponias [F5] - catalog
mostrabas la pantalla y luego con la tecla enter editabas el registro...

muy pero muy mala idea de trabajar asi.. se que existen muchas personas que en su caso usaron FiveWin, el hermano de clipper sobre windows, pero actualmente quien lo usa? si existen mejores alternativas de solucion...


espero haberme explicado...

saludos y ahora si me extendi un poco...
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

creo que no me explicado bien.
Las transacciones de una base de datos nos son componentes, simplemente son un seguro para realizar varias operaciones, ya sea entre bases o en la misma base y, si por algun motivo no acabase bien, no se hace nada.

Los bloqueos, podria contarte para que sirven y de obsoletos nada de nada.
Yo tengo varios programas de gestion y estoy harto de pelearme con los usuarios ¿porque? pillan un cliente, le modifican cualquier dato, y antes de pulsar para guardar la modificacion se largan a tomar un cafe. JODER con lo poco que cuesta pulsar el ENTER.....

Si a eso te referias con lo de imposible modificar un registro por 2 terminales, pues habra que pensar en lo peor (mira el ejemplo de arriba)

¿Porque no uso el SQL? porque no he podido dominarlo en cuanto se conectan 2 o mas despistados a la vez por culpa de los bloqueos. Eso si. no lo he estudiado a tope, aunque creo, en mi modesta opinion, que deja mucho que desear.

Yo hago que mis programas hagan lo mismo que el sql, pero controlados por mi aunque me cueste mas de programar, pero asi cuando pasa algo entre redes, se que solo yo tengo la culpa, aunque algun antiordenadores este tomando su cafe.

Saludos, bosoft.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Efectivamente, mientras el software funcione correctamente, no es necesario modificar nada, para terminar mi participacion y esperar la participacion de los demas... sin ser tema de discusion o enfrascarnos en una lucha de capa y espada..

el control de bloqueos en SQL ( que tambien se pude hacer), viene controlado desde el servidor de base de datos, usando
Triggers o Procedures, para manejarlos...

como bien dices, haces todo de lado de la aplicacion, pero por que hacerlo cuando el servidor de base de datos te permite programar en el y controlar la informacion, usando las sentencias del mismo servidor se obtiene resultados... perfectamente muy controlables.

la programacion de bases de datos actualmente se maneja del lado del servidor, la interface desarrollada en BCB es meramente lo "bonito" que el usuario entiende... si alguien como tu dices, se va a tomar cafe y deja colgada una terminal, voy hablar de interbase, el servidor a un determinado tiempo que tu le pongas, realiza las operaciones, cuando el usuario vuelva de tomar el cafe. se va a dar cuenta que la transaccion ya fue aplicada sin la nececidad de que el usuario presione la tecla enter,

que gano con ello, que mis estaciones estan controladas por el servidor...

asi mismo el mismo interbase trae por default, la opcion de desconectar a un usuario de la base de datos cuando esta pase determinado tiempo y dentro de ese evento de conexion el servidor puede aplicar las operaciones correspondientes, grabar o desechar la operacion que el usuario dejo "colgada"

bien bosfot, como te comento y como tu has dicho... llevamos desde el 1990 con la version 3.1 del Ms-Dos eso quiere decir que tenemos aproximadamente 16 años viendo esto de las bases de datos... siendo los mismos años que se han regenerado los gestores

sobre la cuestion de SQL y sobre el tema de dominarlo, es como aprender ingles pero pensando en español

no es lo mismo
La Blanca Casa del Vecino - que - El Vecino en la Casa Blanca
the House White - que - the White House

querer entender a SQL con lo que estamos acostumbrados, no es posible si no se entiende la filosofia de SQL...


para terminar:
las bases Btrive las implemento Visual Basic en 1990 y son las que se manejan por access.


por lo que me comentas de Pervasive existe una version de Pervasive.SQL 8.0 y en este enlace viene la informacion asi como una tabla comparativa sobre los productos.

http://www.danysoft.com/free/06reperv.pdf


saludos...
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.