Eneboo - Documentación para desarrolladores
|
#include <FLSqlCursor.h>
Esta clase es una extensin de la clase QSqlCursor para la necesidades especificas de AbanQ.
Hereda de QSqlCursor, y aade ciertas funcionalidades. Esta clase se utiliza para gestionar los registros de una sola tabla. Tambien mantiene una copia de los metadatos (ver FLTableMetaData) de dicha tabla.
Tambin puede ser utilizada para manejar conjuntos de registros provenientes de una consulta, si la definicin de los metadatos corresponden a una consulta. En este caso las operaciones sobre el cursor se realizarn sobre la tabla principal de la consulta, ver FLTableMetaData::query().
El funcionamiento de esta clase radica en el modo de acceso en el que se encuentre, INSERTAR,MODIFICAR,BORRAR,NAVEGAR. Se mantiene siempre un registro completo del cursor, en un buffer, dependiendo del modo de acceso, este buffer contendr un registro listo para INSERTAR en blanco, para MODIFICAR con el contenido del registro actual del cursor, para BORRAR con el contenio del registro actual listo para borrar, o para NAVEGAR con el contenido del registro actual en mdo de slo lectura.
Las acciones asociadas a INSERTAR,MODIFICAR, o BORRAR, son llevadas a cabo cuando se enva el contenido del buffer de nuevo al cursor, con FLSqlCursor::commitBuffer , esta accin lleva implicito un chequeo de integridad para que se realize, ver FLSqlCursor::checkIntegrity.
enum FLSqlCursor::Mode |
Constantes para indicar el tipo de acceso al cursor
Reimplementado de QSqlCursor.
FLSqlCursor::FLSqlCursor | ( | const QString & | name = QString::null , |
bool | autopopulate = true , |
||
const QString & | connectionName = "default" , |
||
FLSqlCursor * | cR = 0 , |
||
FLRelationMetaData * | r = 0 , |
||
QObject * | parent = 0 |
||
) |
constructor.
cR | Cursor relacionado con este. Al indicar que este cursor depende de otro, el contenido del cursor est en funcin del valor actual del campo por el que se establece la relacin del cursor relacionado |
r | Relacin que indica como se relacionan los dos cursores |
connectionName | Nombre de la conexion |
FLSqlCursor::FLSqlCursor | ( | const QString & | name, |
bool | autopopulate, | ||
QSqlDatabase * | db, | ||
FLSqlCursor * | cR = 0 , |
||
FLRelationMetaData * | r = 0 , |
||
QObject * | parent = 0 |
||
) |
Sobrecargado por conveniencia
FLSqlCursor::~FLSqlCursor | ( | ) |
destructor.
const FLAction* FLSqlCursor::action | ( | ) | const [inline] |
Para obtener la accion asociada al cursor.
void FLSqlCursor::afterSeek | ( | ) | [protected, virtual] |
Redefinicion del mtodo afterSeek() de QSqlCursor.
Reimplementado de QSqlCursor.
int FLSqlCursor::atFrom | ( | ) |
Obtiene la posicin del registro actual, segn la clave primaria contenida en el buffer.
La posicin del registro actual dentro del cursor se calcula teniendo en cuenta el filtro actual ( FLSqlCursor::curFilter() ) y el campo o campos de ordenamiento del mismo ( QSqlCursor::sort() ). Este mtodo es til, por ejemplo, para saber en que posicin dentro del cursor se ha insertado un registro.
Obtiene la posicin dentro del cursor del primer registro que en el campo indicado empieze con el valor solicitado. Supone que los registros estn ordenados por dicho campo, para realizar una bsqueda binaria.
La posicin del registro actual dentro del cursor se calcula teniendo en cuenta el filtro actual ( FLSqlCursor::curFilter() ) y el campo o campos de ordenamiento del mismo ( QSqlCursor::sort() ). Este mtodo es til, por ejemplo, para saber en que posicin dentro del cursor se encuentra un registro con un cierto valor en un campo.
fN | Nombre del campo en el que buscar el valor |
v | Valor a buscar ( mediante like 'v%' ) |
orderAsc | TRUE (por defecto) si el orden es ascendente, FALSE si es descendente |
void FLSqlCursor::autoCommit | ( | ) | [signal] |
Indica que se ha realizado un commit automtico para evitar bloqueos
QString FLSqlCursor::baseFilter | ( | ) | [slot] |
Obtiene el filtro base
void FLSqlCursor::browseRecord | ( | ) | [slot] |
Abre el formulario de edicion de registro definido en los metadatos (FLTableMetaData) listo para slo visualizar el registro activo del cursor.
void FLSqlCursor::bufferChanged | ( | const QString & | ) | [signal] |
Indica ha cambiado un campo del buffer, junto con la seal se enva el nombre del campo que ha cambiado.
void FLSqlCursor::bufferCommited | ( | ) | [signal] |
Indica que se ha realizado un commit
Devuelve si el contenido de un campo en el bufferCopy en nulo.
name | Nombre del campo en el bufferCopy |
Devuelve si el contenido de un campo en el bufferCopy en nulo.
i | Posicion del campo en el bufferCopy |
void FLSqlCursor::bufferCopySetNull | ( | int | i | ) | const |
Establece que el contenido de un campo en el bufferCopy sea nulo.
i | Posicion del campo en el bufferCopy |
void FLSqlCursor::bufferCopySetNull | ( | const QString & | name | ) | const |
Establece que el contenido de un campo en el bufferCopy sea nulo.
name | Nombre del campo en el bufferCopy |
Devuelve si el contenido de un campo en el buffer es nulo.
i | Posicion del campo en el buffer |
Devuelve si el contenido de un campo en el buffer es nulo.
name | Nombre del campo en el buffer |
void FLSqlCursor::bufferSetNull | ( | int | i | ) | const |
Establece que el contenido de un campo en el buffer sea nulo.
i | Posicion del campo en el buffer |
void FLSqlCursor::bufferSetNull | ( | const QString & | name | ) | const |
Establece que el contenido de un campo en el buffer sea nulo.
name | Nombre del campo en el buffer |
Redefinida
Reimplementado de QSqlCursor.
Realiza comprobaciones de intregidad.
Se comprueba la integridad referencial al intentar borrar, tambien se comprueba la no duplicidad de claves primarias y si hay nulos en campos que no lo permiten cuando se inserta o se edita. Si alguna comprobacion falla muestra un cuadro de dilogo con el tipo de fallo encontrado y el metodo devuelve FALSE.
showError | Si es TRUE muestra el cuadro de dialogo con el error que se produce al no pasar las comprobaciones de integridad |
void FLSqlCursor::checkRisksLocks | ( | bool | terminate = false | ) | [slot] |
Entra en un bucle de comprobacion de riesgos de bloqueos para esta tabla y el registro actual
El bucle continua mientras existan bloqueos, hasta que se vuelva a llamar a este mtodo con 'terminate' activado o cuando el usuario cancele la operacin.
terminate | True terminar el bucle de comprobaciones si est activo |
void FLSqlCursor::chooseRecord | ( | ) | [slot] |
Realiza la accin asociada a elegir un registro del cursor, por defecto se abre el formulario de edicin de registro,llamando al mtodo FLSqlCursor::editRecord(), si la bandera FLSqlCursor::edition indica TRUE, si indica FALSE este mtodo no hace nada
Hace efectiva la transaccin y la acaba.
notify | Si TRUE emite la seal cursorUpdated y pone el cursor en modo BROWSE, si FALSE no hace ninguna de estas dos cosas y emite la seal de autoCommit |
Manda el contenido del buffer al cursor, o realiza la accin oportuna para el cursor.
Todos los cambios realizados en el buffer se hacen efectivos en el cursor al invocar este mtodo. La manera de efectuar estos cambios viene determinada por el modo de acceso establecido para el cursor, ver FLSqlCursor::Mode, si el modo es editar o insertar actualiza con los nuevos valores de los campos del registro, si el modo es borrar borra el registro, y si el modo es navegacion no hace nada. Antes de nada tambien comprueba la integridad referencial invocando al mtodo FLSqlCursor::checkIntegrity().
Si existe un campo calculado se invoca a la funcin "calculateField" del script del contexto (ver FLSqlCursor::ctxt_) establecido para el cursor. A esta funcin se le pasa como argumento el nombre del campo calculado y debe devolver el valor que debe contener ese campo, p.e. si el campo es el total de una factura y de tipo calculado la funcin "calculateField" debe devolver la suma de lineas de las facturas mas/menos impuestos y descuentos.
emite | True para emitir seal cursorUpdated |
checkLocks | True para comprobar riesgos de bloqueos para esta tabla y el registro actual |
bool FLSqlCursor::commitBufferCursorRelation | ( | ) | [slot] |
Manda el contenido del buffer del cursor relacionado a dicho cursor.
Hace efectivos todos los cambios en el buffer del cursor relacionado posiconndose en el registro correspondiente que recibe los cambios.
void FLSqlCursor::commitOpened | ( | int | count = -1 , |
const QString & | msg = QString::null |
||
) | [slot] |
Termina transacciones abiertas por este cursor.
count | Cantidad de transacciones a terminar, -1 todas. |
msg | Cadena de texto que se muestra en un cuadro de dilogo antes de terminar las transacciones. Si es vaca no muestra nada. |
QStringList FLSqlCursor::concurrencyFields | ( | ) | [slot] |
Comprueba si hay una colisin de campos editados por dos sesiones simultneamente.
QObject* FLSqlCursor::context | ( | ) | const [inline] |
Para obtener el contexto de ejecucin de scripts.
Ver FLSqlCursor::ctxt_.
void FLSqlCursor::copyRecord | ( | ) | [slot] |
Realiza la accion de insertar un nuevo registro, y copia el valor de los campos del registro actual.
QString FLSqlCursor::curFilter | ( | ) | [slot] |
Obtiene el filtro actual
void FLSqlCursor::currentChanged | ( | int | ) | [signal] |
Indica que la posicion del registro activo dentro del cursor ha cambiado
FLSqlCursor* FLSqlCursor::cursorRelation | ( | ) | const [inline] |
Devuelve el cursor relacionado con este.
void FLSqlCursor::cursorUpdated | ( | ) | [signal] |
Indica que se ha actualizado el cursor
FLSqlDatabase* FLSqlCursor::db | ( | ) | const [inline] |
Para obtener la base de datos sobre la que trabaja
Redefinicion del mtodo del() de QSqlCursor.
Este mtodo invoca al mtodo del() original de QSqlCursor() y comprueba si hay borrado en cascada, en caso afirmativo borrar tambin los registros relacionados en cardinalidad 1M.
Reimplementado de QSqlCursor.
void FLSqlCursor::deleteRecord | ( | ) | [slot] |
Borra, pidiendo confirmacion, el registro activo del cursor.
void FLSqlCursor::editRecord | ( | ) | [slot] |
Abre el formulario de edicion de registro definido en los metadatos (FLTableMetaData) listo para editar el registro activo del cursor.
Redefinido por conveniencia
Reimplementado de QSqlCursor.
Dice si un campo est deshabilitado.
Un campo estar deshabilitado, porque esta clase le dar un valor automticamente. Estos campos son los que estn en una relacin con otro cursor, por lo que su valor lo toman del campo forneo con el que se relacionan.
fN | Nombre del campo a comprobar |
Redefinicion del mtodo first() de QSqlCursor.
Este mtodo simplemente invoca al mtodo first() original de QSqlCursor() y refresca el buffer con el metodo FLSqlCursor::refreshBuffer().
emit | Si TRUE emite la seal FLSqlCursor::currentChanged() |
void FLSqlCursor::insertRecord | ( | ) | [slot] |
Abre el formulario de edicion de registro definido en los metadatos (FLTableMetaData) listo para insertar un nuevo registro en el cursor.
bool FLSqlCursor::inTransaction | ( | ) | [static] |
Indica si hay una transaccion en curso.
bool FLSqlCursor::isLocked | ( | ) |
Para comprobar si el registro actual del cursor est bloqueado.
bool FLSqlCursor::isModifiedBuffer | ( | ) |
Indica si el contenido actual del buffer difiere de la copia guardada.
Ver FLSqlCursor::bufferCopy_ .
Redefinicion del mtodo last() de QSqlCursor.
Este mtodo simplemente invoca al mtodo last() original de QSqlCursor() y refresca el buffer con el metodo FLSqlCursor::refreshBuffer().
emit | Si TRUE emite la seal FLSqlCursor::currentChanged() |
QString FLSqlCursor::mainFilter | ( | ) | const [inline] |
Para obtener el filtro principal del cursor.
FLTableMetaData* FLSqlCursor::metadata | ( | ) | const [inline] |
Para obtener los metadatos de la tabla.
int FLSqlCursor::modeAccess | ( | ) | const [inline] |
Para obtener el modo de acceso actual del cursor.
QString FLSqlCursor::msgCheckIntegrity | ( | ) |
Se comprueba la integridad referencial al intentar borrar, tambien se comprueba la no duplicidad de claves primarias y si hay nulos en campos que no lo permiten cuando se inserta o se edita. Si alguna comprobacion falla devuelve un mensaje describiendo el fallo.
void FLSqlCursor::newBuffer | ( | ) | [signal] |
Indica que se ha cargado un nuevo buffer
Redefinicion del mtodo next() de QSqlCursor.
Este mtodo simplemente invoca al mtodo next() original de QSqlCursor() y refresca el buffer con el metodo FLSqlCursor::refreshBuffer().
emit | Si TRUE emite la seal FLSqlCursor::currentChanged() |
Abre el formulario asociado a la tabla origen en el modo indicado.
m | Modo de apertura (FLSqlCursor::Mode) |
cont | Indica que se abra el formulario de edicin de registros con el botn de aceptar y continuar |
Redefinicion del mtodo prev() de QSqlCursor.
Este mtodo simplemente invoca al mtodo prev() original de QSqlCursor() y refresca el buffer con el metodo FLSqlCursor::refreshBuffer().
emit | Si TRUE emite la seal FLSqlCursor::currentChanged() |
void FLSqlCursor::recordChoosed | ( | ) | [signal] |
Indica que se ha elegido un registro, mediante doble clic sobre l o bien pulsando la tecla Enter
void FLSqlCursor::refresh | ( | const QString & | fN = QString::null | ) | [slot] |
Refresca el contenido del cursor.
Si no se ha indicado cursor relacionado obtiene el cursor completo, segun la consulta por defecto. Si se ha indicado que depende de otro cursor con el que se relaciona, el contenido del cursor depender del valor del campo que determina la relacin. Si se indica el nombre de un campo se considera que el buffer slo ha cambiado en ese campo y as evitar repeticiones en el refresco.
fN | Nombre del campo de buffer que ha cambiado |
bool FLSqlCursor::refreshBuffer | ( | ) | [slot] |
Refresca el buffer segun el modo de acceso establecido.
Lleva informacion del cursor al buffer para editar o navegar, o prepara el buffer para insertar o borrar.
Si existe un campo contador se invoca a la funcin "calculateCounter" del script del contexto (ver FLSqlCursor::ctxt_) establecido para el cursor. A esta funcin se le pasa como argumento el nombre del campo contador y debe devolver el valor que debe contener ese campo.
void FLSqlCursor::refreshDelayed | ( | int | msec = 50 | ) | [slot] |
Actualiza el conjunto de registros con un retraso.
Acepta un lapsus de tiempo en milisegundos, activando el cronmetro interno para que realize el refresh definitivo al cumplirse dicho lapsus.
msec | Cantidad de tiempo del lapsus, en milisegundos. |
FLRelationMetaData* FLSqlCursor::relation | ( | ) | const [inline] |
bool FLSqlCursor::rollback | ( | ) |
Deshace las operaciones de una transaccin y la acaba.
void FLSqlCursor::rollbackOpened | ( | int | count = -1 , |
const QString & | msg = QString::null |
||
) | [slot] |
Deshace transacciones abiertas por este cursor.
count | Cantidad de transacciones a deshacer, -1 todas. |
msg | Cadena de texto que se muestra en un cuadro de dilogo antes de deshacer las transacciones. Si es vaca no muestra nada. |
Redefinicion del mtodo seek() de QSqlCursor.
Este mtodo simplemente invoca al mtodo seek() original de QSqlCursor() y refresca el buffer con el metodo FLSqlCursor::refreshBuffer().
emit | Si TRUE emite la seal FLSqlCursor::currentChanged() |
bool FLSqlCursor::select | ( | const QString & | filter, |
const QSqlIndex & | sort = QSqlIndex() |
||
) | [virtual, slot] |
Redefinicion del mtodo select() de QSqlCursor
Reimplementado de QSqlCursor.
void FLSqlCursor::setAcosCondition | ( | const QString & | condName, |
AcosConditionEval | cond, | ||
const QVariant & | condVal | ||
) | [slot] |
Establece la condicion que se debe cumplir para aplicar el control de acceso.
Para cada registro se evalua esta condicion y si se cumple, aplica la regla de control de acceso establecida con FLSqlCursor::setAcTable y FLSqlCursor::setAcosTable.
Ejemplos:
setAcosCondition( "nombre", VALUE, "pepe" ); // valueBuffer( "nombre" ) == "pepe" setAcosCondition( "nombre", REGEXP, "pe*" ); // QRegExp( "pe*" ).exactMatch( valueBuffer( "nombre" ).toString() ) setAcosCondition( "sys.checkAcos", FUNCTION, true ); // call( "sys.checkAcos" ) == true
cond | Tipo de evaluacion; VALUE compara con un valor fijo REGEXP compara con una expresion regular FUNCTION compara con el valor devuelto por una funcion de script |
condName | Si es vacio no se evalua la condicion y la regla no se aplica nunca. Para VALUE y REGEXP nombre de un campo. Para FUNCTION nombre de una funcion de script. A la funcin se le pasa como argumento el objeto cursor. |
condVal | Valor que hace que la condicion sea cierta |
void FLSqlCursor::setAcosTable | ( | const QStringList & | acos | ) | [slot] |
Establece la lista de control de acceso (ACOs) para los campos de la tabla, , ver FLSqlCursor::setAcosCondition().
Esta lista de textos deber tener en sus componentes de orden par los nombres de los campos, y en los componentes de orden impar el permiso a aplicar a ese campo, p.e.: "nombre", "r-", "descripcion", "--", "telefono", "rw",...
Los permisos definidos aqui sobreescriben al global.
acos | Lista de cadenas de texto con los nombre de campos y permisos. |
void FLSqlCursor::setAcTable | ( | const QString & | ac | ) | [slot] |
Establece el acceso global para la tabla, ver FLSqlCursor::setAcosCondition().
Este ser el permiso a aplicar a todos los campos por defecto
ac | Permiso global; p.e.: "r-", "-w" |
void FLSqlCursor::setAction | ( | const FLAction * | a | ) | [inline] |
Establece la accion asociada al cursor.
a | Objeto FLAction |
void FLSqlCursor::setActivatedCheckIntegrity | ( | bool | a | ) | [inline] |
Activa o desactiva los chequeos de integridad referencial.
a | TRUE los activa y FALSE los desactiva |
void FLSqlCursor::setActivatedCommitActions | ( | bool | a | ) | [inline] |
Activa o desactiva las acciones a realizar antes y despus de un commit
a | TRUE las activa y FALSE las desactiva |
void FLSqlCursor::setAskForCancelChanges | ( | bool | a | ) | [inline] |
Establece el valor de FLSqlCursor::askForCancelChanges_ .
a | Valor a establecer (TRUE o FALSE) |
Establece el valor de un campo del buffer de forma atmica y fuera de transaccin.
Invoca a la funcin, cuyo nombre se pasa como parmetro, del script del contexto del cursor (ver FLSqlCursor::ctxt_) para obtener el valor del campo. El valor es establecido en el campo de forma atmica, bloqueando la fila durante la actualizacin. Esta actualizacin se hace fuera de la transaccin actual, dentro de una transaccin propia, lo que implica que el nuevo valor del campo est inmediatamente disponible para las siguientes transacciones.
fN | Nombre del campo |
functionName | Nombre de la funcin a invocar del script |
void FLSqlCursor::setBrowse | ( | bool | b | ) |
Establece el valor de FLSqlCursor::browse.
b | TRUE o FALSE |
void FLSqlCursor::setContext | ( | QObject * | c | ) |
Establece el contexto de ejecucin de scripts
Ver FLSqlCursor::ctxt_.
c | Contexto de ejecucion |
void FLSqlCursor::setEdition | ( | bool | b | ) |
Establece el valor de FLSqlCursor::edition.
b | TRUE o FALSE |
bool FLSqlCursor::setEditMode | ( | ) | [slot] |
Pasa el cursor a modo Edit
void FLSqlCursor::setFilter | ( | const QString & | filter | ) | [virtual, slot] |
Redefinicion del mtodo setFilter() de QSqlCursor
Reimplementado de QSqlCursor.
void FLSqlCursor::setMainFilter | ( | const QString & | f | ) |
Establece el filtro principal del cursor.
f | Cadena con el filtro, corresponde con una clausura WHERE |
void FLSqlCursor::setModeAccess | ( | const int | m | ) | [inline] |
Establece el modo de acceso para el cursor.
m | Constante FLSqlCursor::Mode que indica en que modo de acceso se quiere establecer el cursor |
void FLSqlCursor::setSort | ( | const QSqlIndex & | sort | ) | [virtual, slot] |
Redefinicion del mtodo sort() de QSqlCursor
Reimplementado de QSqlCursor.
Desbloquea el registro actual del cursor.
fN | Nombre del campo |
v | Valor para el campo unlock |
Establece el valor de un campo del buffer con un valor.
fN | Nombre del campo |
v | Valor a establecer para el campo |
Inicia un nuevo nivel de transaccin.
Si ya hay una transaccin en curso simula un nuevo nivel de anidamiento de transaccin mediante un punto de salvaguarda.
lock | Actualmente no se usa y no tiene ningn efecto. Se mantiene por compatibilidad hacia atrs |
int FLSqlCursor::transactionLevel | ( | ) | [static, slot] |
QStringList FLSqlCursor::transactionsOpened | ( | ) | [slot] |
void FLSqlCursor::updateBufferCopy | ( | ) |
Copia el contenido del FLSqlCursor::buffer_ actual en FLSqlCursor::bufferCopy_.
Al realizar esta copia se podra comprobar posteriormente si el buffer actual y la copia realizada difieren mediante el metodo FLSqlCursor::isModifiedBuffer().
Devuelve el valor de un campo del buffer.
fN | Nombre del campo |
Devuelve el valor de un campo del buffer copiado antes de sufrir cambios.
fN | Nombre del campo |