Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-06-2003
seken seken is offline
Miembro
 
Registrado: jun 2003
Posts: 83
Poder: 21
seken Va por buen camino
Question 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
Responder Con Cita
  #2  
Antiguo 24-06-2003
Bacterion Bacterion is offline
Miembro
 
Registrado: may 2003
Posts: 91
Poder: 21
Bacterion Va por buen camino
¿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?
Responder Con Cita
  #3  
Antiguo 24-06-2003
seken seken is offline
Miembro
 
Registrado: jun 2003
Posts: 83
Poder: 21
seken Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 24-06-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
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';
Responder Con Cita
  #5  
Antiguo 24-06-2003
seken seken is offline
Miembro
 
Registrado: jun 2003
Posts: 83
Poder: 21
seken Va por buen camino
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

Responder Con Cita
  #6  
Antiguo 25-06-2003
Bacterion Bacterion is offline
Miembro
 
Registrado: may 2003
Posts: 91
Poder: 21
Bacterion Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 25-06-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
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

Gracias por la rectificacion

La forma correcta de toda la instrucción seria

Código:
TTable(DBgrid.DataSource.DataSet).IndexName := 'NombreIndice';
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 09:33:16.


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
Copyright 1996-2007 Club Delphi