Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Manejo de Indices en Mysql temporal (https://www.clubdelphi.com/foros/showthread.php?t=93003)

lbidi 17-04-2018 20:14:10

Manejo de Indices en Mysql temporal
 
Estimados..

Tengo el siguiente codigo para crear una tabla temporal en un server MYSQL.
Código Delphi [-]
FDQuery.SQL.Clear;
FDQuery.SQL.Add( 'CREATE TEMPORARY TABLE temp ( ');
FDQuery.SQL.Add( 'Cliente Double,');
FDQuery.SQL.Add( 'Nombre Char(30),');
FDQuery.SQL.Add( 'Direccion Char(30),');
FDQuery.SQL.Add( 'Total Double,');
FDQuery.SQL.Add( 'Telefono Char(10) );');
FDQuery.SQL.Add( 'CREATE INDEX xCliente   on temp (Cliente);');
FDQuery.SQL.Add( 'CREATE INDEX xNombre    on temp (Nombre);');
FDQuery.SQL.Add( 'CREATE INDEX xDireccion on temp (Direccion);');
FDQuery.SQL.Add( 'CREATE INDEX xTotal     on temp (Total DESC);');
FDQuery.ExecSQL;

cTablaMy.IndexName := 'xTotal';  <<---- aqui me da error

cual es la sintaxis correcta para tomar por defecto el indice que le indico.
estan bien creados los indices de esta manera ??

Gracias.

Casimiro Notevi 17-04-2018 20:51:35

¿Y qué es cTablaMy?

lbidi 17-04-2018 20:53:09

Perdon Casimiro.. es una FDTable..

Neftali [Germán.Estévez] 18-04-2018 08:50:35

Normalmente cuando se trabaja con SGBD's (Sistemas de Gestión de Base de Datos) no se aplican índices a nivel de componentes, porque se supone que ese trabajado de planificación y optimización queda a cargo del servidor de Bases de Datos. A diferencia de cuando trabajamos con Bases de datos locales(DBase, Accesss, Paradox,...) que ese trabajo quedaba para el programador.

Muchos componentes actuales siguen manteniendo esas propiedades por compatibilidad o simplemente porque entre los componenetes disponibles (aunque trabajemos con SGBD's) sigue existiendo uno para trabajar en memoria (TFDMemTable en el caso de FireDAC).

En ese caso sí tiene sentido trabajar con índices porque estamos convirtiendo el trabajo con un servidor de Base de Datos en un trabajo similar a una Base de Datos de escritorio, ya que TFDMemTable lo que hace es traer todos los datos de la tabla a memoria.
Para ellos debes definir los índices en la propiedad Indexes y luego activar el que quieras utilizando la propiedad IndexName.

El el caso de TFDTable tal y como te he dicho puedes:

1) Definir los índices en Indexes y liuego activarlo con IndexName
2) Definiendo directamente la propiedad IndexFieldName que es excluyente con la anterior.

En ambos casos lo que hece el SGBD es "convertir" eso en un ORDER BY en la Base de Datos.

La otra opción en estos casos, es utilizar un TFDQuery y definir la sentencia SQL necesaria con la parte ORDER BY que necesitemos.

lbidi 18-04-2018 14:53:31

Gracias Neftali por tu amplia y concisa respuesta.

Tratare de hacerlo con FDMemTable y luego cuento como me fue.

Saludos

lbidi 18-04-2018 20:45:42

Gracias nuevamente Neftali. Lo hice con FDMemTable y anda como balazoo..

Saludos

lbidi 18-04-2018 20:51:34

Me surge una duda ahora con el siguiente codigo al agregar indices a la tabla.
Código Delphi [-]
with FDMemTable.Indexes.Add do
begin
   Name       := 'xTotal';
   Expression := 'Total';
   Active     := True;
end;
como se hace para indicar que este indice lo quiero descendente ??

Gracias

lbidi 18-04-2018 21:01:31

Me respondo yo mismo.

Se hace asi
Código Delphi [-]
FDMemTable.IndexFieldNames := 'Total : D';
aunque el : y la D van juntos, no los pongo porque me sale el emoticon.. y no se como evitarlo. :confused:

Saludos

Casimiro Notevi 18-04-2018 22:29:18

Cita:

Empezado por lbidi (Mensaje 525744)
aunque el : y la D van juntos, no los pongo porque me sale el emoticon.. y no se como evitarlo.

Con este "comando": [noparse] :D [/noparse]


La franja horaria es GMT +2. Ahora son las 22:41:48.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi