PDA

Ver la Versión Completa : bug en componente Ttable ?


MasterXP
21-03-2005, 09:27:37
tengo una base de datos MySQL y en una tabla tengo 10 campos, uno de ellos es tipo DATE, asigno a una Ttable la tabla antes mencionada, y resulta que me lee 9 campos (Fields Editor), especificamente todos excepto el campo Date, lo mismo me pasa con otras tablas MySQL ningun campo Date lo logra leer. :(

he probado entonces con un Tquery y un TupdateSQL:

pongo un DBgrid y un DBNavigator, los asocio al DataSource que contiene el Tquery (y este al TupdateSQL) y intento borrar un registro:

el SQL del Tquery:
Select codigo AS Codigo,Cantidad_Inicial AS Cantidad, Articulo, Tipo,
Marca, Modelo, Fecha_Compra AS `Fecha De Compra`,
Lugar_Compra AS `Lugar De Compra` from articulos_datos

el SQL Delete del UpdateSQL

delete from articulos_datos
where
Codigo = :OLD_Codigo and
Cantidad = :OLD_Cantidad and
Articulo = :OLD_Articulo and
Tipo = :OLD_Tipo and
Marca = :OLD_Marca and
Modelo = :OLD_Modelo and
Fecha De Compra = :OLD_Fecha De Compra and
Lugar De Compra = :OLD_Lugar De Compra

La propiedad CachedUpdates del Tquery esta True, por lo tanto tengo un boton que contiene el codigo para aplicar todos los updates,Deletes, o inserts que se hagan en la tabla:

codigo del boton

procedure TForm6.BitBtn1Click(Sender: TObject);
begin
Datamodule1.QueryArticulosDetalles.ApplyUpdates;
Datamodule1.QueryArticulosDetalles.CommitUpdates;
end;

bien, entonces por ejemplo borro un registro del DBgrid, y despues pincho el boton y me salta el siguiente error:

raised expcetion class EdatabaseError with message 'Field'OLD_Fecha' is of an unknown Type'.

alguien por favor me podria decir como solucionar este problema, ya sea con el Ttable o con el Tquery, tal vez usando un ADOquery o no se, lo que deseo es una solucion cualquiera, o un comentario sobre que piensan de esto.

gracias de antemano.

Lepe
21-03-2005, 10:01:42
Segun he leido por ahí, tienes que poner el nombre del campo entre comillas, por tener espacios en blanco. No sé si se valdrá :(

De todas formas ¿realmente tienes que acotar tanto la búsqueda para el borrado? Debería existir algun campo en ese registro que fuese único, y por ende, hacer el borrado por ese campo.

Saludos

@-Soft
21-03-2005, 13:08:55
hola

una duda, que componentes utilizas para conectarte a mysql. utilizas algun Front para manipular mysql.

MasterXP
21-03-2005, 17:09:31
Segun he leido por ahí, tienes que poner el nombre del campo entre comillas, por tener espacios en blanco. No sé si se valdrá :(
Ningun campo tiene espacio, los separo pro medio de la "_". despues de la clasula AS si hay espacios, pero los tengo encerrado entre ``, mira:
[code]Select ..... Fecha_Compra AS `Fecha De Compra`[code]


De todas formas ¿realmente tienes que acotar tanto la búsqueda para el
borrado? Debería existir algun campo en ese registro que fuese único, y por
ende, hacer el borrado por ese campo.
Saludos

si tengo un indice que es codigo, aqui el codigo con el que cree la tabla:
CREATE TABLE `articulos_datos` (
`Codigo` int(4) unsigned zerofill NOT NULL default '0000',
`Articulo` varchar(45) NOT NULL default '',
`Tipo` varchar(20) NOT NULL default '',
`Marca` varchar(30) default NULL,
`No_Serie` varchar(45) default NULL,
`Modelo` varchar(20) default NULL,
`Lugar_Compra` varchar(45) default NULL,
`Factura_No` varchar(45) default NULL,
`Fecha_Compra` date default '0000-00-00',
`Cantidad_Inicial` smallint(5) unsigned default '0',
`Precio_x_Unidad` decimal(9,2) default '0.00',
`Sub_Total` decimal(9,2) default '0.00',
`Descuento` decimal(9,2) default '0.00',
`Total` decimal(9,2) default NULL,
`Notas_Ad` blob,
`Foto` varchar(255) default NULL,
PRIMARY KEY (`Codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
hola
una duda, que componentes utilizas para conectarte a mysql. utilizas algun Front para manipular mysql. utilizo el ODBC oficial de AB MySQL.

verdad que esto es muy extra~o ?

Gracias por contestas.