Ver Mensaje Individual
  #2  
Antiguo 21-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 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, tengo creado 2 campos calculado en una tabla DBGrid. En el evento OnCellTitle del DBGrid, lo tengo programado para que me ordene por campos, pero cuando lo ordeno por un campo calculado me da error. Os dejo lo que tengo de código:

Código:
void __fastcall TXCatalogos::DBGrid1TitleClick(TColumn *Column)
{
  AnsiString FName = Column->FieldName;
  XDatos->QCatalogos->Close();
  XDatos->QCatalogos->SQL->Text = "SELECT * FROM Catalogo ORDER BY " + FName;
  XDatos->QCatalogos->Open();
}
Hola borlandpablo.

Y es totalmente lógico ya que el campo no existe en la tabla contra la que efectuas la consulta SQL. Una solución, pero que depende de si tu RDBMS lo permite, es declarar el campo calculado en la creación de la tabla.

Por ejemplo en Firebird:
Código SQL [-]
CREATE TABLE CLIENTES (
  ID        INTEGER NOT NULL,
  APELLIDO  VARCHAR(15)
  NOMBRE    VARCHAR(15),
  APELNOM   COMPUTED BY (APELLIDO || ' ' || NOMBRE),
  ...

Así creada, no tendrías ningún problema en ejecutar la sentencia:
Código SQL [-]
SELECT * FROM CLIENTES
WHERE APELLIDO LIKE 'A%'
ORDER BY APELNOM
Pero desconozco que manejador de bd estés usando y si ofrece esa característica.

Saludos.
__________________
Daniel Didriksen

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