Problema Claves For
Publicado: Jue Dic 03, 2009 2:26 pm
Buen día, tengo dos tabla como les voy a mostrar...
CREATE TABLE `productos` (
`PDT_CODIGO` varchar(20) NOT NULL DEFAULT '',
`PDT_TIV_CODIGO` varchar(10) NOT NULL DEFAULT '',
`PDT_DESCRIPCION` varchar(80) NOT NULL DEFAULT '',
`PDT_ESTADO` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`PDT_CODIGO`),
UNIQUE KEY `PDT_CODIGO` (`PDT_CODIGO`),
KEY `TIPOIVA_PRODUCTOS` (`PDT_TIV_CODIGO`),
CONSTRAINT `TIPOIVA_PRODUCTOS` FOREIGN KEY
(`PDT_TIV_CODIGO`) REFERENCES `tipoiva` (`TIV_CODIGO`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `tipoiva` (
`TIV_CODIGO` varchar(10) NOT NULL DEFAULT '',
`TIV_DESCRIPCION` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`TIV_CODIGO`),
UNIQUE KEY `TIV_CODIGO` (`TIV_CODIGO`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
....Con esto tengo una clave foránea que relaciona PRODUCTOS e IVA, todo
funciona bien mientras no escriba un CODIGO que no esté
en la tabla tipoiva, es decir si hay 3 valores en tipoiva (GN,RD,NA) y llego
y modifico el DBBrowse y escribo "XX" entonces logicamente
me devuelve un error de foreign key desde MySQL, lo que he tratado es que
dicho error lo pueda atrapar para que no le salga al usuario dicho
error sino un mensaje personal diciendo que no puede utilizar dicha clave ya
que no existe. He intentado con lDisplayErrors en .F. para el TSQLTable
y lAllowProcessMessages en .F. del TMySQLDataSource y no logro atrapar dicho
mensaje, luego de esto y la desesperación he intentado con cada una de las
combinaciones de las propiedades lDisplayErrors, lAbortOnErrors y
lAllowProcessMessages pero nada no logro atrapar el error ni siquiera en el
Evento
OnError del DataSource.
Muchas Gracias a quien me pueda ayudar.
Guillermo García
de las propiedades
CREATE TABLE `productos` (
`PDT_CODIGO` varchar(20) NOT NULL DEFAULT '',
`PDT_TIV_CODIGO` varchar(10) NOT NULL DEFAULT '',
`PDT_DESCRIPCION` varchar(80) NOT NULL DEFAULT '',
`PDT_ESTADO` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`PDT_CODIGO`),
UNIQUE KEY `PDT_CODIGO` (`PDT_CODIGO`),
KEY `TIPOIVA_PRODUCTOS` (`PDT_TIV_CODIGO`),
CONSTRAINT `TIPOIVA_PRODUCTOS` FOREIGN KEY
(`PDT_TIV_CODIGO`) REFERENCES `tipoiva` (`TIV_CODIGO`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `tipoiva` (
`TIV_CODIGO` varchar(10) NOT NULL DEFAULT '',
`TIV_DESCRIPCION` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`TIV_CODIGO`),
UNIQUE KEY `TIV_CODIGO` (`TIV_CODIGO`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
....Con esto tengo una clave foránea que relaciona PRODUCTOS e IVA, todo
funciona bien mientras no escriba un CODIGO que no esté
en la tabla tipoiva, es decir si hay 3 valores en tipoiva (GN,RD,NA) y llego
y modifico el DBBrowse y escribo "XX" entonces logicamente
me devuelve un error de foreign key desde MySQL, lo que he tratado es que
dicho error lo pueda atrapar para que no le salga al usuario dicho
error sino un mensaje personal diciendo que no puede utilizar dicha clave ya
que no existe. He intentado con lDisplayErrors en .F. para el TSQLTable
y lAllowProcessMessages en .F. del TMySQLDataSource y no logro atrapar dicho
mensaje, luego de esto y la desesperación he intentado con cada una de las
combinaciones de las propiedades lDisplayErrors, lAbortOnErrors y
lAllowProcessMessages pero nada no logro atrapar el error ni siquiera en el
Evento
OnError del DataSource.
Muchas Gracias a quien me pueda ayudar.
Guillermo García
de las propiedades