Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Que TTable estoy usando???? (https://www.clubdelphi.com/foros/showthread.php?t=1697)

seken 24-06-2003 17:41:58

Que TTable estoy usando????
 
Estimados amigos del foro......
tengo una dbgrid que dependiendo de que boton elijo en el Tabcontrol me relaciona el dbgrid con una data source diferente.

Como puedo hacer para ordenar por diferentes columnas????
pongo:
DBgrid.DataSource.DataSet.indexname:='indice'
pero no me permite.
¿hay alguna funcion que me devuelva la TTable que esta activa para poder ordenarla???

muchas gracias como simpre :D :) :p

Bacterion 24-06-2003 18:43:49

¿hay alguna funcion que me devuelva la TTable que esta activa para poder ordenarla???
¿Quieres saber que TTable estás usando en ese momento?

Tu mismo dices que, en principio, se supone que tu DBGrid está apuntado (a través del Datasource) a una TTable... pues para saber a que TTable está apuntando basta con que se lo preguntes...
if DBGrid.Datasource.Dataset.Name = 'Table1' then
o
if DBGrid.Datasource.Dataset = MiDataset then

Luego es cosa de aplicar el indice que toque según el TTable por el que te muevas...

Por cierto, cuando dices "no me permite"... ¿Que error te da?

seken 24-06-2003 21:09:17

antes que nada gracias por la respuesta.

entiendo tu respuesta con todo con dbgrid.datasource.dataset se que tabla estoy usando pero si a eso le pongo:
.indexname

pense que me ordenaba la tabla, pero me da el error de que no existe el atributo indexname, pense que con todos los enganches llegaba a estar parado en la TTable y podría usar el indexname.

Tu solución me serviría si obteniendo el Name de la TTable la pudiere ordenar. Pero como tengo 20 TTable tengo que hacer 20 if o algun case y ademas tengo 2 indices posibles.
Puedo pasar de string a TTable?? o algo que me referencie la tabla para poder ordenarla?

muchas gracias
:) :D

__cadetill 24-06-2003 21:45:03

lo que pasa es que estas accediendo a un Dataset, el cual no tiene esta propropiedad. Si aseguras de que es un TTable al que esta enganchado, puedes hacer un "casteo"

Código:

if DBgrid.DataSource.DataSet is TTable then
  TTable(DBgrid.DataSource.DataSet.indexname) := 'indice';


seken 24-06-2003 21:55:03

funciono correctamente, esta era la función que me hacía falta.
No sabia que poniendo TTable podía referenciar la tabla que me hace falta.

muchas gracias nuevamente a todos

:D :D :D :D

Bacterion 25-06-2003 14:05:52

Recuerda, lo que indica el ejemplo de Cadetill es que una referencia a objeto siempre puedes "castearla" a otro tipo de objeto.
Lo que debes es, siempre, de estar seguro de que el "casteo" que haces es valido...
...por eso Cadetill hace la comprobación anterior usando el operador IS. Se asegura así de que esun TTable.
(aunque ha metido la pata en
TTable(DBgrid.DataSource.DataSet.indexname, que debería ser
TTable(DBgrid.DataSource.DataSet).IndexName)

Vamos, el TDatasource apunta a un TDataset cualquiera por medio de su propiedad Dataset.
Pero un TDataset puede ser el TTable, el TQuery, y otros... (echale un vistazo a la ayuda).
Luego, por ejemplo, si usas una TQuery y haces el casteo a TTable, al compilar no dará error, pero al ejecutarse te dará un access violation con casi toda seguridad (al intentar usar algún método o propiedad del TTable)

Te recomendaría que le echases un vistazo a algún libro o manual de Delphi, a la orientación de objetos.

__cadetill 25-06-2003 15:19:47

Cita:

Posteado originalmente por Bacterion
(aunque ha metido la pata en
TTable(DBgrid.DataSource.DataSet.indexname, que debería ser
TTable(DBgrid.DataSource.DataSet).IndexName)
Cierto, me cole al poner el parentesis terminador :o

Gracias por la rectificacion :)

La forma correcta de toda la instrucción seria

Código:

TTable(DBgrid.DataSource.DataSet).IndexName := 'NombreIndice';


La franja horaria es GMT +2. Ahora son las 08:31:42.

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