Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Pablo.

Ahora viendo el gráfico pude entender lo que buscas hacer. La fecha a comparar entre las del archivo es la que esta en la fila cero del StringGrid y el nombre a buscar en la tabla está en la columna cero de la misma.

Entonces, esta es la prueba que realicé y funciona bién:
Código:
...
#include <DateUtils.hpp>
...
void __fastcall TForm1::FormCreate(TObject *Sender) {

  TStringGrid *sg = static_cast<TStringGrid*>(StringGrid1);
  TDate dt = Date();
  AnsiString s;
  sg->ColCount = 31;
  sg->Cells[0][1] = "Renuevate";
  sg->Cells[0][2] = "Navidades";
  sg->Cells[0][3] = "Ocasion";
  for(int c =DayOf(Date()); c<= DaysInMonth(Date()); c++) {
      sg->Cells[c-DayOf(Date())+1][0] = DateToStr(dt);
      dt=IncDay(dt,1);
  }
  sg->Col = 1;
  sg->Row = 1;
  /* Asignar evento OnSelectCell por código */
  sg->OnSelectCell = StringGrid1SelectCell; 
}

void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State) {
  TStringGrid *sg = static_cast<TStringGrid*>(StringGrid1);

  if (ACol > 0 && ARow > 0 && sg->Cells[ACol][ARow] != "") {
    QryTmp->Close();
    QryTmp->SQL->Clear();
    QryTmp->SQL->Add("SELECT * FROM CATALOG");
    QryTmp->SQL->Add("WHERE NOMBRE_CATALOGO = :PNOMBRE");
    QryTmp->SQL->Add("AND :PFECHA >= FECHA_DESDE AND :PFECHA <= FECHA_HASTA");
    // En columna 0 estan los nombres
    QryTmp->ParamByName("PNOMBRE")->AsString = sg->Cells[0][ARow];
    // En fila 0 estan las fechas
    QryTmp->ParamByName("PFECHA")->AsString  = sg->Cells[ACol][0];
    QryTmp->Open();
    if (!QryTmp->IsEmpty()) {
      sg->Canvas->Brush->Color = clLime;
      sg->Canvas->FillRect(Rect);
      sg->Canvas->TextOut(Rect.Left+1 ,Rect.top+1, sg->Cells[ACol][ARow]);
    }
  }
}

/* Impedir que seleccionen columna 0 o fila 0 */
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
      int ARow, bool &CanSelect) {
 CanSelect = ACol > 0 && ARow > 0;
}

...

void __fastcall TForm1::FormDestroy(TObject *Sender) {
 StringGrid1->OnSelectCell = NULL;
}
La tabla que cree para la prueba tiene el siguiente formato:
Código:
NOMBRE_CATALOGO | FECHA_DESDE | FECHA_HASTA
----------------+-------------+------------
Renuevate       | 07.11.2012  | 08.11.2012
Navidades       | 09.11.2012  | 10.11.2012
Ocasion         | 08.11.2012  | 10.11.2012
Los valores son iguales a los de tu imágen.

Como verás en el resultado, el pintado considera las fechas límites de la tabla en relación a la columna y de acuerdo al nombre de la fila:


No olvides quitar el evento OnSelectCell desde el Object Inspector, lo asigno por código para que permita el posicionamiento en Col = 1, Row = 1.

Saludos.

Edito: Me olvidaba... Y si deseas que se pinten las celdas aún estando vacías, cambiá:
Código:
  if (ACol > 0 && ARow > 0 && sg->Cells[ACol][ARow] != "") {
  // por:
  if (ACol > 0 && ARow > 0) {
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 07-11-2012 a las 15:55:12. Razón: agregar comentario
Responder Con Cita
  #2  
Antiguo 08-11-2012
borlandpablo borlandpablo is offline
Miembro
NULL
 
Registrado: oct 2012
Posts: 37
Poder: 0
borlandpablo Va por buen camino
Qué maquina ecfisa! Muchísimas gracias! es lo que ando buscando! Yo lo acabo de hacer de otra manera, sin utilizar consulta. Lo hago con bucles y pienso que es mucho mas lento que como tu lo tienes. Voy a cambiarlo!

Un saludo!
Responder Con Cita
  #3  
Antiguo 08-11-2012
borlandpablo borlandpablo is offline
Miembro
NULL
 
Registrado: oct 2012
Posts: 37
Poder: 0
borlandpablo Va por buen camino
Buenas ecfisa, acabo de cambiarlo y no me lo pinta. Parece extraño porque compila bien. He copiado el código tal cual está y solo he modificado el nombre de la query y los campos. Creo que la consulta no me lo está haciendo bien. En la consulta en vez ->Add no sería ->Text = "consulta"; ? No que sea de otro error.

Un saludo.
Responder Con Cita
  #4  
Antiguo 08-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por borlandpablo Ver Mensaje
En la consulta en vez ->Add no sería ->Text = "consulta"; ? No que sea de otro error.
No Pablo, no hay ninguna diferencia en asignar la cadena a la propiedad Text o hacerlo mediante el método Add aunque de este modo previamente hay que utilizar el método Clear para eliminar posible texto residual.

El problema debe estar en otro lado, seguramente en la sintáxis SLQ. Lo que nos lleva a lo que te pregunté mensajes atras: ¿ Que manejador de base de datos y que componentes utilizas ?

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 09-11-2012
borlandpablo borlandpablo is offline
Miembro
NULL
 
Registrado: oct 2012
Posts: 37
Poder: 0
borlandpablo Va por buen camino
Utilizo un ADO para la conexión a la base de datos creada en access y ADOQuerys para los campos de las tablas

Un saludo.
Responder Con Cita
  #6  
Antiguo 13-11-2012
borlandpablo borlandpablo is offline
Miembro
NULL
 
Registrado: oct 2012
Posts: 37
Poder: 0
borlandpablo Va por buen camino
Buenas ecfisa, alguna solución a mi problema? Perdona por mi impaciencia.

Un saludo
Responder Con Cita
  #7  
Antiguo 13-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por borlandpablo Ver Mensaje
Buenas ecfisa, alguna solución a mi problema? Perdona por mi impaciencia.

Un saludo
Hola Pablo.

El problema es que no uso Ms Office y me encuentro impedido de realizar una tabla con esa estructura en en Access, eso me permitiría realizar las pruebas necesarias para reacomodar la sentencia SQL.

Tál como está el código, funciona correctamente en Firebird. Quizá una solución sea que pongas la sentencia SQL en el foro Tablas planas y ver si algún compañero que use Access pueda decirte si existe alguna irregularidad de sintáxis con respecto a ese manejador.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Conectar base de datos Firebird con base de datos Oscommerce 2.3.3 Adriadob Firebird e Interbase 11 31-10-2012 12:28:46
Ordenar datos en un StringGrid gilberto_1126 Varios 2 22-12-2010 19:34:29
StringGrid rellenar rapidamente. byfali Varios 10 25-03-2008 01:25:19
Rellenar una grilla con datos generados por el usuario maco2007 .NET 11 05-12-2007 03:53:00
Rellenar datos de tablas sur-se Firebird e Interbase 1 11-11-2004 12:14:44


La franja horaria es GMT +2. Ahora son las 12:04:03.


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