jzginez
22-07-2005, 19:45:13
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:
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:
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:
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:
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:
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
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
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
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:
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:
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:
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:
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:
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
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
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