Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-09-2007
Susanna Susanna is offline
Registrado
 
Registrado: sep 2007
Posts: 6
Poder: 0
Susanna Va por buen camino
TTable: desplazar el contenido de los campos

Hola,

tengo un objeto TTable enlazado con una tabla de DBase.
La tabla tiene 60 campos, igual que el TTable.
Quiero mover el contenido de los campos del TTable:
el primer campo coja los valores del segundo campo,
el segundo los valores del tercero,
y así hasta el último campo, que tiene que contener nuevos valores.

A más a más, la operación tiene que ser muy rápida porqué hay un grid vinculado al TTable.

Gracias por adelantado.
Responder Con Cita
  #2  
Antiguo 14-09-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Pues sólo se me ocurre haciéndolo "a mano".
Puedes acceder por índice a los campos de una tabla, algo así como:

Código Delphi [-]
  Table.Fields[0].AsString....

Así que se puede solucionar con un for que haga un recorrido para todos los campos menos el último y que asigne el del índice [i] al [i+1].

Espero haberme explicado mínimamente...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 14-09-2007
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Para acelerar el tema :

Código Delphi [-]
Table.DisableControls;
for i := 0 to Table.FieldsCount -1 do
   Table.Fields[i].AsString := Table.Fields[i+1].AsString;
Table.EnableControls;

DisableControls deshabilita la parte visual (que se refresquen con los datos nuevos que van tomando)
EnableControls habilita nuevamente la parte visual.
Creo que ni siquiera es necesario hacer un refresh.
Responder Con Cita
  #4  
Antiguo 14-09-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por duilioisola Ver Mensaje
Para acelerar el tema...
Pues más o menos era eso, pero estaba un poco "flojo" para escribir código.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 14-09-2007
Susanna Susanna is offline
Registrado
 
Registrado: sep 2007
Posts: 6
Poder: 0
Susanna Va por buen camino
Gracias por vuestra idea.

El problema está en hacerlo con todos los registros de la tabla, uno a uno.
¿No se puede hacer con todos a la vez?

¿Quizás cambiando la estructura de la tabla en tiempo de ejecucción,
quitando la primera columna y añadiendo una nueva al final?

Lo siento si antes no he explicado bien mi duda
Responder Con Cita
  #6  
Antiguo 14-09-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Puedes probarlo.
Habría que eliminar una columna, añadir otra y modificar el resto de nombre.
Es un poco extraño y peligroso me parece a mi, pero no tiene porqué funcionar.

Como mínimo se me ocurre que deberás cerrar la tabla y además nadie más podrá estar utilizándola (ya que no podrías cambiar la estructura); Suponiendo que todo haya ido bien, luego volver a abrirla.
Si tienes controles visuales y mantienes la nomenclatura de campos no deberás tener problemas.
No se si todas las BD van a permitirte hacer esto.

De todas formas todo eso no me parece en absoluto rápido.

Tal vez si nos explicas con detalle qué deseas hacer, exista otra forma si necesidad de hacer esto.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 15-09-2007
Susanna Susanna is offline
Registrado
 
Registrado: sep 2007
Posts: 6
Poder: 0
Susanna Va por buen camino
Éste es el caso que quiero resolver:

Tenemo tres tablas distintas (A, B y C), y una cuarta tabla (D) que contiene
información obtenida a partir de realizar consultas y cálculos con A, B y C.

Las tablas A, B y C contienen información para todo el año, pero la tabla D
sólo contiene información para 90 días (así agilizamos la generación de la
tabla y ahorramos memoria).

La tabla D tiene vinculado un grid, que nos muestra la informació de 30 días,
y guardamos 30 campos sin mostrar a la izquierda y 30 campos más a la derecha.

Supongamos que el usuario mueve el grid 10 columnas a la derecha.
Ahora vemos 10 campos que estaban ocultos y ocultamos 10 campos que antes se veían.

El problema es: ¿cómo hay que tratar la tabla D para que, después de movernos
10 columnas a la derecha, respete tener 30 días visibles, más 30 días anteriores calculados,
más 30 días posteriores calculados?

Gracias por adelantado.
Responder Con Cita
  #8  
Antiguo 17-09-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
OK, ahora ha quedado un poco más claro.

En este caso, Seguramente yo no hubiera utilizado un DBGrid; Seguramente no es el más acertado para mostrar estos datos segun la estructura que tienen. Tiene demasiada dependencia con la tabla.
Por lo pronto creo que te será más fácil utilizar un StringGrid con el que tienes más facilidad para tratamiento de columnas.

Por otro lado, antes de seguir, yo revisaría posibles componentes que te puedan servir para esto; Alguno que ya esté pensamos para mostrar alendarios (meses en concreto) o similares.
No cuesta nada pararse un momento y revisar.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 17-09-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola Susanna,
Me llama la atención de que mencionas TTables... viendo esta dependencia... y de lo estoy entendiendo... ¿No sería mejor emplear querys? No conviene emplear los TTables sabiendo que traen toda la información a memoria. Con TQuerys se agiliza y ofrece más libertad.

Y con respecto a lo que dice Neftali de usar un componente del tipo calendario... creo que sería lo mejor.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #10  
Antiguo 19-09-2007
Susanna Susanna is offline
Registrado
 
Registrado: sep 2007
Posts: 6
Poder: 0
Susanna Va por buen camino
Gracias por vuestras sugerencias.

He replanteado el problema de raíz, y he encotrado una solución que funciona.
Con el TTable que tenia antes y el grid vinculado, añado una variable de tipo entero.
Esta variable guarda el índice del campo que contiene el primer día calculado.
Si quiero calcular diez días posteriores, incremento en diez dicha variable.

En el grid, en vez de mostrar los campos m..n, muestro los campos m+10 .. n+10.
Y cuando llego al último campo, en el grid añado el primero y los siguientes.

El grid muestra una parte de la tabla, y la variable entera guarda donde "empieza" la tabla.

No sé si ha sido muy clara la explicación
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Limitar los campos en un TTable Coco_jac Varios 1 25-12-2005 06:02:44
Unir contenido de campos omitiendo los null el-otro SQL 2 28-09-2004 08:39:23
Unir contenido de campos en sql o en la tabla el-otro SQL 3 16-09-2004 17:16:12
Borrar el contenido de uno o mas campos karocs SQL 3 09-08-2004 09:18:13
como hago para que un TQRExpr de Qreport me tome campos de un ttable en un Datamodulo perico OOP 12 09-12-2003 19:51:43


La franja horaria es GMT +2. Ahora son las 11:15:40.


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