Lograr el bloqueo de registro con access 2000
¿Cómo puedo implementar el bloqueo de registros en una base de datos Access 2000 con Delphi?
¿has visto esto en Borland Apoyo?
Área: base de datos/ado
Número de Referencia: 74076
Estado: Abierto
Fecha del reporte: 11/3/99
Gravedad: Comúnmente Encontrados
Tipo: Funcionalidad Básica de la Insuficiencia
Problema:
en la Actualidad, pesimista de bloqueo de registro no funciona
con los componentes de ADO ADO porque no
proporcionar una manera de bloquear un registro distinto de la
registro actual.
Bueno, hay una manera de bloquear registros en MSAccess 2000 tablas.
en Primer lugar se requiere que los desarrolladores de la edición de
Microsoft Ado Data Control 6.0 (viene con programas de Visual Studio).
Si usted tiene que, a continuación, importarlo a delphi mediante la Importación de ActiveX
elemento de menú en el menú Componentes. Usted verá que el ActiveX
se han agregado como Adodc en el ActiveX de la paleta.
Crear un Formulario y poner como muchos de Adodc componentes en él, ya que necesitará
bloqueos simultáneos. Recuerda esto: Un Adodc puede bloquear Un registro en Una tabla
en un momento. Así que si usted necesita para bloquear varios registros en varias tablas, se
la necesidad de múltiples Adodc componentes (usted tiene la opción de creación dinámica).
a Continuación, crear una nueva tabla en la MDB de Access y el nombre de digamos 'Lock'. Poner dos
los campos ('lockid' tipo de Cadena y 'fldEdt' de tipo entero).
a Continuación se muestran dos Funciones. Una llamada de Bloqueo, que se puede utilizar para
bloquear el registro, o comprobar si está bloqueado. El otro se llama Desbloquear
y se puede utilizar para desbloquear el registro.
la función de bloqueo(ds:TAdoConnection LckTable:TAdodc const s:string
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp rec,CurrentUserId:longint):boolean
var
& nbsp & nbsp fnd:boolean
& nbsp & nbsp s1:string
begin
& nbsp & nbsp s1:=formato(s,[trim(inttostr(rec))])
& nbsp & nbsp LckTable.ConnectionString:=ds.ConnectionString
& nbsp & nbsp LckTable.CursorLocation:=2
& nbsp & nbsp LckTable.LockType:=2
& nbsp & nbsp LckTable.CommandType:=2
& nbsp & nbsp LckTable.RecordSource='Bloquear'
& nbsp & nbsp fnd:=false
& nbsp & nbsp Probar
& nbsp & nbsp & nbsp & nbsp LckTable.actualización
& nbsp & nbsp & nbsp & nbsp si LckTable.Conjunto de registros.RecordCount>0, entonces
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp LckTable.Conjunto de registros.MoveFirst
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp LckTable.Conjunto de registros.Find('lockid='' s1 '',0,1,1)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp si LckTable.Conjunto de registros.RecordCount>0, entonces
& nbsp & nbsp & nbsp & nbsp si no (LckTable.Conjunto de registros.EOF), a continuación,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si LckTable.Conjunto de registros.Campos['lockid'].valor=s1, a continuación,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp fnd:=true
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si no fnd, a continuación,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp LckTable.Conjunto de registros.AddNew('lockid',s1)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp LckTable.Conjunto de registros.Campos['fldEdt'].Valor:=CurrentUserId
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp resultado:=true
& nbsp & nbsp excepto
& nbsp & nbsp & nbsp & nbsp resultado:=false
& nbsp & nbsp final
fin
la función de Desbloqueo(const s:string rec:longint LckTable:TAdodc):boolean
var
& nbsp & nbsp s1:cadena
begin
& nbsp & nbsp s1:=format(s,[trim(inttostr(rec))])
& nbsp & nbsp probar
& nbsp & nbsp & nbsp & nbsp & nbsp LckTable.Conjunto de registros.Cancelar
& nbsp & nbsp & nbsp & nbsp & nbsp LckTable.Conjunto de registros.Find('lockid='' s1 '',0,1,0)
& nbsp & nbsp & nbsp & nbsp & nbsp LckTable.Conjunto de registros.Eliminar(1)
& nbsp & nbsp & nbsp & nbsp resultado:=true
& nbsp & nbsp excepto
& nbsp & nbsp & nbsp & nbsp resultado:=false
& nbsp & nbsp final
Ahora usted tiene que hacer algo de codificación dentro de su proyecto.
Cuando supongamos que un usuario solicita para abrir un registro (digamos, por ejemplo, con el código único de identificación 12)
a partir de su tabla de Clientes. Usted tiene un Tadodc que se llama lckCustomers y se
situado en el formulario denominado lckForm. Utilizar este código:
si la Cerradura(TCustomer.Conexión,lckForm.lckCustomers,'Clientes',12,1) a continuación,
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp // el registro ha sido correctamente bloqueado y puede ir con su
& nbsp & nbsp & nbsp & nbsp // edición de código
& nbsp & nbsp & nbsp & nbsp // ...
& nbsp & nbsp final
else
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp // Ther registro ya fue bloqueado por otro usuario.
& nbsp & nbsp & nbsp & nbsp // dar un mensaje y anulación de la edición, o continuar con la lectura.
& nbsp & nbsp & nbsp & nbsp // ...
& nbsp & nbsp final
Ahora si quieres desbloquear el registro, después de la edición de la llamada:
Unlock('Clientes',12,lckForm.lckCustomers)
Advertencia: La tabla de Bloqueo llega a ser muy grande, así que cuando el primer usuario inicia sesión en
el programa, vacía la tabla de bloqueo mediante una consulta como 'eliminar de'bloqueo'.
Usted puede comprobar si eres el primer usuario mediante la comprobación de la existencia de una ldb
archivo siguiente a su archivo mdb. Si no existe, tú eres el primero.
Eso es todo. La buena suerte.
Lograr el bloqueo de registro con access 2000
Lograr el bloqueo de registro con access 2000 : Multi-millones de consejos para hacer su vida mas facil.
¿Como puedo implementar el bloqueo de registros en una base de datos Access 2000 con Delphi?
¿has visto esto en Borland Apoyo?
Area: base de datos/ado
Numero de Referencia: 74076
Estado: Abierto
Fecha del reporte: 11/3/99
Gravedad: Comunmente Encontrados
Tipo: Funcionalidad Basica de la Insuficiencia
Problema:
en la Actualidad, pesimista de bloqueo de registro no funciona
con los componentes de ADO ADO porque no
proporcionar una manera de bloquear un registro distinto de la
registro actual.
Bueno, hay una manera de bloquear registros en MSAccess 2000 tablas.
en Primer lugar se requiere que los desarrolladores de la edicion de
Microsoft Ado Data Control 6.0 (viene con programas de Visual Studio).
Si usted tiene que, a continuacion, importarlo a delphi mediante la Importacion de ActiveX
elemento de menu en el menu Componentes. Usted vera que el ActiveX
se han agregado como Adodc en el ActiveX de la paleta.
Crear un Formulario y poner como muchos de Adodc componentes en el, ya que necesitara
bloqueos simultaneos. Recuerda esto: Un Adodc puede bloquear Un registro en Una tabla
en un momento. Asi que si usted necesita para bloquear varios registros en varias tablas, se
la necesidad de multiples Adodc componentes (usted tiene la opcion de creacion dinamica).
a Continuacion, crear una nueva tabla en la MDB de Access y el nombre de digamos 'Lock'. Poner dos
los campos ('lockid' tipo de Cadena y 'fldEdt' de tipo entero).
a Continuacion se muestran dos Funciones. Una llamada de Bloqueo, que se puede utilizar para
bloquear el registro, o comprobar si esta bloqueado. El otro se llama Desbloquear
y se puede utilizar para desbloquear el registro.
la funcion de bloqueo(ds:TAdoConnection LckTable:TAdodc const s:string
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp rec,CurrentUserId:longint):boolean
var
& nbsp & nbsp fnd:boolean
& nbsp & nbsp s1:string
begin
& nbsp & nbsp s1:=formato(s,[trim(inttostr(rec))])
& nbsp & nbsp LckTable.ConnectionString:=ds.ConnectionString
& nbsp & nbsp LckTable.CursorLocation:=2
& nbsp & nbsp LckTable.LockType:=2
& nbsp & nbsp LckTable.CommandType:=2
& nbsp & nbsp LckTable.RecordSource='Bloquear'
& nbsp & nbsp fnd:=false
& nbsp & nbsp Probar
& nbsp & nbsp & nbsp & nbsp LckTable.actualizacion
& nbsp & nbsp & nbsp & nbsp si LckTable.Conjunto de registros.RecordCount>0, entonces
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp LckTable.Conjunto de registros.MoveFirst
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp LckTable.Conjunto de registros.Find('lockid='' s1 '',0,1,1)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp si LckTable.Conjunto de registros.RecordCount>0, entonces
& nbsp & nbsp & nbsp & nbsp si no (LckTable.Conjunto de registros.EOF), a continuacion,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si LckTable.Conjunto de registros.Campos['lockid'].valor=s1, a continuacion,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp fnd:=true
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si no fnd, a continuacion,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp LckTable.Conjunto de registros.AddNew('lockid',s1)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp LckTable.Conjunto de registros.Campos['fldEdt'].Valor:=CurrentUserId
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp resultado:=true
& nbsp & nbsp excepto
& nbsp & nbsp & nbsp & nbsp resultado:=false
& nbsp & nbsp final
fin
la funcion de Desbloqueo(const s:string rec:longint LckTable:TAdodc):boolean
var
& nbsp & nbsp s1:cadena
begin
& nbsp & nbsp s1:=format(s,[trim(inttostr(rec))])
& nbsp & nbsp probar
& nbsp & nbsp & nbsp & nbsp & nbsp LckTable.Conjunto de registros.Cancelar
& nbsp & nbsp & nbsp & nbsp & nbsp LckTable.Conjunto de registros.Find('lockid='' s1 '',0,1,0)
& nbsp & nbsp & nbsp & nbsp & nbsp LckTable.Conjunto de registros.Eliminar(1)
& nbsp & nbsp & nbsp & nbsp resultado:=true
& nbsp & nbsp excepto
& nbsp & nbsp & nbsp & nbsp resultado:=false
& nbsp & nbsp final
Ahora usted tiene que hacer algo de codificacion dentro de su proyecto.
Cuando supongamos que un usuario solicita para abrir un registro (digamos, por ejemplo, con el codigo unico de identificacion 12)
a partir de su tabla de Clientes. Usted tiene un Tadodc que se llama lckCustomers y se
situado en el formulario denominado lckForm. Utilizar este codigo:
si la Cerradura(TCustomer.Conexion,lckForm.lckCustomers,'Clientes',12,1) a continuacion,
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp // el registro ha sido correctamente bloqueado y puede ir con su
& nbsp & nbsp & nbsp & nbsp // edicion de codigo
& nbsp & nbsp & nbsp & nbsp // ...
& nbsp & nbsp final
else
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp // Ther registro ya fue bloqueado por otro usuario.
& nbsp & nbsp & nbsp & nbsp // dar un mensaje y anulacion de la edicion, o continuar con la lectura.
& nbsp & nbsp & nbsp & nbsp // ...
& nbsp & nbsp final
Ahora si quieres desbloquear el registro, despues de la edicion de la llamada:
Unlock('Clientes',12,lckForm.lckCustomers)
Advertencia: La tabla de Bloqueo llega a ser muy grande, asi que cuando el primer usuario inicia sesion en
el programa, vacia la tabla de bloqueo mediante una consulta como 'eliminar de'bloqueo'.
Usted puede comprobar si eres el primer usuario mediante la comprobacion de la existencia de una ldb
archivo siguiente a su archivo mdb. Si no existe, tu eres el primero.
Eso es todo. La buena suerte.
Lograr el bloqueo de registro con access 2000
By Consejos Y Trucos
Lograr el bloqueo de registro con access 2000 : Multi-millones de consejos para hacer su vida más fácil.