PDA

Ver la Versión Completa : como indexar fechas


xavier
12-12-2003, 23:07:07
:confused:
Ruego me indiquen como lograr indexar campos de tipo fecha junto con campos de tipo caracter en una expresion clave de Dbase mediante :
table1.addindex('nombre_indice','campo_fecha+campo_caracter',[ixexpression]);
A mi me interesaría saber que función de Delphi5 profesional me podria cambiar, unicamente a efectos de la clave indice, el orden colocando primero el año, despues el mes y ,por último, el dia. Tal y como se conseguia con la función DTOS() de Clipper5.
Yo lo he intentado con FORMATDATETIME('YYYYMD',campo_fecha) y siempre ocasiono una excepción...

Tony_G
13-12-2003, 15:29:26
Hola Xavier.

Creo que no es necesario que conviertas el campo tipo fecha a cadena de caracteres como tenías que hacer en Clipper con la función DTOC(fecha), para luego indexar con los cuatro dígitos del año. Prueba a sustituir el + por un ; --> table1.addindex('nombre_indice','campo_fecha;campo_caracter',[ixexpression]);

Espero que sea lo que necesitas.

Saludos.

marcoszorrilla
13-12-2003, 17:31:02
Eso no funcionará, puesto que lo espera es una expresión válida en Dbase.

Con este código de ejemplo si funcionará, a condición de que se le haya indicado que las tablas son del tipo ttDBase.


procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Exclusive:=False;
Table1.open;
Table1.AddIndex('MiIndice7','Dtos(Fecha);apellidos',[ixexpression]);
Table1.IndexName:='MiIndice7';
end;


Un Saludo.

Tony_G
14-12-2003, 11:30:16
Gracias por la corrección.

Saludos.

xavier
17-12-2003, 22:35:25
:D
Muchas gracias por responderme con tanta rapidez. Ruego me perdoneis por no haberos yo igualmente respondido antes ya que he estado poniendo en practica vuestras observaciones y recomendaciones.
Está visto que siempre me ahogo en una gota de agua...
Yo, me imaginaba que la función DTOS() era exclusiva de CLIPPER 5 y al no encontrarla en las ayudas de DELPHI ya me pensé directamente que la tendria que sustituir por las que si aparecieran en dichas ayudas...
Me imagino, y ya lo probaré otro dia, que igualmente se podrian utilizar otras funciones que antes se podian utilizar en las expresiones indice de DBASEIII PLUS y de CLIPPER 5 como podrian ser las funciones SUBSTR() y STR().
Ahora mi pequeña duda es cual puede ser la diferencia de separar los campos en la expresión indice mediante el signo
de suma ('+') o mediante el punto y coma (';'). El de suma es el que yo siempre he utilizado para las claves de indices tipo DBASE, mientras veo que vosotros utilizais el punto y coma. Este último, por lo visto en los libros de DELPHI que yo consulto, es el sistema ideal para bases de datos como PARADOX con el que si se entretienen en explicaciones dejando de lado lo referente a DBASE...
Mi duda ahora es como lograr un maestro-detalle, no indexado por un solo campo en la tabla maestro y en la de detalle, sino poder indexar la tabla detalle ademas del campo compartido por la maestro por algunos otros más y todo ello en tablas tipo DBASE.
Muchas gracias por vuestra atención, recibit un caluroso saludo.

marcoszorrilla
17-12-2003, 23:43:54
Bueno lo de la sintáxis es debido al BDE que es el motor de la base de Datos por lo que desde Delphi hemos de atenernos a esa sintáxis y olvidar un poco Clipper y Dbase, puesto que la programación en Delphi no tiene nada que ver con Clipper.

En cuanto a lo de la relación maestro detalle, si mi memoria no me traiciona, Set Relation to xxxx Into xxx.

En Delphi la relación maestro detalle, viene más bien dada por el motor de Base de datos que estemos utilizando, por ejemplo Access, Paradox. FireBird y es en la definición de las tablas dentro de las herramientas que tiene cada motor en donde creamos y definimos dichas relaciones, integridad referencial, actualización en cascada....


Por lo tanto cuando desde Delphi hacemos que una tabla sea maestra de otra que va a ser detalle de esta, generalmente vamos a necesitar que el campo que casa de la tabla maestra sea clave única y el campo de la tabla detalle esté indexado, en cuanto a que existan otros índices además de estos es absolutamente normal, aunque en el momento en que estemos manteniendo la relación maestro detalle deberán de estar activos estos índices.

Un Saludo.