Ver Mensaje Individual
  #1  
Antiguo 22-07-2005
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Reputación: 21
jzginez Va por buen camino
Question Se borra mi sentencia select

Hola amigos, buenas tardes desde la lluviosa ciudad de Puebla, México

No se si este hilo este bien puesto en este foro o vaya en otro pero como estoy usando firebird 1.5 y lo que pierdo son sentencias de sql lo pongo aqui.

ademas de firebird uso las fibplus y delphi 7

el problema que tengo es el siguiente:

uso un TpFIBDataSet con la siguente sentencia:
Código SQL [-]
SELECT
    proveedores.ID,
    SIGLAS,
    NOMBRE,
    RFC,
    CURP,
    NACIONAL,
    DIRECCION,
    COLONIA,
    Proveedores.ID_MUNICIPIO,
    MUNICIPIOS.MUNICIPIO,
    ESTADOS.ID,
    ESTADOS.ESTADO,
    estados.Abreviatura,
    OTRA,
    CP,
    REPRESENTANTE,
    Proveedores.LADA,
    TELEFONO_1,
    TELEFONO_2,
    TELEFONO_3,
    FAX,
    EXTENSION,
    EMAIL,
    HTTP,
    COMENTARIOS,
    COI
FROM
    PROVEEDORES 
inner join municipios on (municipios.id = Proveedores.id_municipio)
inner join estados on (municipios.id_estado = estados.id)

Esta no contiene la sentencia orde by, y como este tengo varios TpFIBDataSet para otras tablas, para mostrar los datos uso un dbgrid, botones y menus (nada del otro mundo first, prior, next, last), como son varias tablas y muchas funciones similares cree un formato base (FrmBaseGrid) y estoy crendo formatos herredados (FrmProveedores).

En el formato base tengo un procedimiento que cuando haces click en el titulo del campo del dbgrid este se pone en negritas y ordena la tabla en base a este campo:
Código Delphi [-]
procedure TFrmBaseGrid.DBGrid1TitleClick(Column: TColumn);
{$J+}
const
  PreviousColumnIndex : integer = -1;
{$J-}
Var
  Campo: String;
  I: Integer;
begin
 try
  DBGrid1.Columns[PreviousColumnIndex].title.Font.Style :=
  DBGrid1.Columns[PreviousColumnIndex].title.Font.Style - [fsBold];
 except
 end;
 Column.Title.Font.Style:= Column.Title.Font.Style + [fsBold];
 PreviousColumnIndex := Column.Index;
 {la parte anterior la consegui gracias a una liga del club
  la siguiente parte es la que ordena}
  for I := 0 to CodigoSQL.Count - 1 do
  begin
    Campo:= CodigoSQL.Strings[i];
    if Pos ('Order', Campo) > 0
     then break;
  end;
  Campo:= CodigoSQL.Strings[Column.Field.Index+1];
  Delete(Campo,Pos(',',Campo),1);
  if I < CodigoSQL.Count
   Then CodigoSQL.Delete(I);
  If Orden
   Then Begin
    CodigoSQL.Add('Order by '+Campo);
    Orden:= False;
   End
   Else Begin
    CodigoSQL.Add('Order by '+Campo +' desc');
    Orden:= True;
   End;
end;
*nota las variables faltantes estan declaradas como publicas, codigoSQL es TStrings.

para ordenar la tabla en el formato herredado (Frmproveedores) hago lo siguiente:

Código Delphi [-]
procedure TFrmProveedores.DBGrid1TitleClick(Column: TColumn);
Begin
  CodigoSQL:= DtmDatos.pFIBproveedores.SelectSQL;
  DtmDatos.pFIBproveedores.Active:= False;
  inherited; //llama procedimiento heredado
  DtmDatos.pFIBproveedores.SelectSQL:= CodigoSQL;
end;

al ejecutar la aplicación e intentar ordenar la tabla me da error de que la propiedad SelectSQL esta bacia, para comprovar que estaba pasando con el contenido de "CogigoSQL" inserte un componente memo y el codigo siguiente:
Código Delphi [-]
procedure TFrmProveedores.DBGrid1TitleClick(Column: TColumn);
Begin
  CodigoSQL:= DtmDatos.pFIBproveedores.SelectSQL;
  DtmDatos.pFIBproveedores.Active:= False;
  inherited;
  memo1.Lines:= CodigoSQL;
  DtmDatos.pFIBproveedores.SelectSQL:= CodigoSQL;
  DtmDatos.pFIBproveedores.Active:= True;
end;

y en el memo si me mostro bien la sentecia sql (select .....) y sigue el mismo error, probe con:
Código Delphi [-]
procedure TFrmProveedores.DBGrid1TitleClick(Column: TColumn);
Begin
  CodigoSQL:= DtmDatos.pFIBproveedores.SelectSQL;
  DtmDatos.pFIBproveedores.Active:= False;
  inherited;
  DtmDatos.pFIBproveedores.SelectSQL:= CodigoSQL;
  memo1.Lines:= CodigoSQL;
  DtmDatos.pFIBproveedores.Active:= True;
end;

y en este caso tambien el memo esta en blaco, termine ocultando el memo y con el siguente codigo
Código Delphi [-]
procedure TFrmProveedores.DBGrid1TitleClick(Column: TColumn);
Begin
  CodigoSQL:= DtmDatos.pFIBproveedores.SelectSQL;
  DtmDatos.pFIBproveedores.Active:= False;
  inherited;
  memo1.Lines:= CodigoSQL;
  DtmDatos.pFIBproveedores.SelectSQL:= memo1.lines;
  DtmDatos.pFIBproveedores.Active:= True;
end;
y el procedimiento funciona bien al parecer la linea
Código Delphi [-]
  DtmDatos.pFIBproveedores.SelectSQL:= CodigoSQL;
en lugar de asignar a selectsql el contenido de CodigoSQL esta borrando el valor de CodigoSQL alguien sabe por que y que puedop hacer para no tener un componente memo oculto que solo sirve de enlace.

gracias
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Responder Con Cita