FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
|||
|
|||
¿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? |
#3
|
|||
|
|||
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 |
#4
|
|||
|
|||
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'; |
#5
|
|||
|
|||
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 |
#6
|
|||
|
|||
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. |
#7
|
|||
|
|||
Cita:
Gracias por la rectificacion La forma correcta de toda la instrucción seria Código:
TTable(DBgrid.DataSource.DataSet).IndexName := 'NombreIndice'; |
|
|
|