Ver Mensaje Individual
  #1  
Antiguo 24-04-2007
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Reputación: 23
jzginez Va por buen camino
Stack overflow al reabrir una tabla

Hola amigos estoy usando Delphi 7, FireBird 1.5 y las FibPlus 5.3

Tengo una forma general (o base por así llamarla) con un dbgrid, toolBar (sus respectivos botones) un actionlist, statusbar, un memo (para verificar sentencias), un datasource, etc.

Esta forma a grandes rasgo me permite ver el contenio de la tabla, moverme en ella, ocultar columnas, cambiar el orden en que se muestran los campos, ordenar en base a un campo (me falta lograr que ordene por mas de un campo), buscar un registro especifico y crear y aplicar un filtro.

Esta forma la tengo en una carpeta general, cuando realizo un nuevo proyecto incluyo esta forma y creo formas hijas escribo un aproximado de 63 lineas de código y listo, hasta el momento funciona bien (apenas llevo 4 proyectos usando esta forma) pero en el que estoy haciendo actualmente al quitar el filtro me da el siguiente error:

Proyect Eikou.exe. raised exception class EstackOverFlow whit message 'Stack overflow', process stopped

Alguien me puede ayudar.

Segun entiendo el error no tiene nada que ver con las sentencias SQL, por eso el rollo de que hace la forma, el código del botón que pone y quita el filtro es el siguiente:

Código Delphi [-]
procedure TFrmGBClientes.SpeedButton1Click(Sender: TObject);
Var
  i: Integer;
  Registro: Integer;
begin
  If not dataSource1.DataSet.Eof
    Then Registro:= DataSource1.DataSet.FieldByName('ID').Value;
  Directorio := ExtractFilePath(ParamStr(0));
  Directorio:= Directorio + 'SQL\';
  If SpeedButton1.Down
    Then begin
      SqlAnterior:= DtmDatos.A_pDstClientes.SelectSQL.Text;
      Insertar:= DtmDatos.A_pDstClientes.InsertSQL.Text;
      Actualizar:= DtmDatos.A_pDstClientes.UpdateSQL.Text;
      Borrar:= DtmDatos.A_pDstClientes.DeleteSQL.Text;
      Releer:= DtmDatos.A_pDstClientes.RefreshSQL.Text;
      DtmDatos.porFiltro:= False;
    End
    Else Begin
      CodigoSQL:= SQLAnterior;
      TSpeedButton(Sender).Enabled:= False;
      DtmDatos.PorFiltro:= True;
    End;
  DataSource1.DataSet.Close;
  if CodigoSql <> SQLAnterior
    Then DtmDatos.A_pDstClientes.SelectSQL.SaveToFile(Directorio+DtmDatos.A_pDstClientes.Name+'.sql')
    Else DeleteFile(pChar(Directorio+DtmDatos.A_pDstClientes.Name+'.sql'));
  DtmDatos.A_pDstClientes.InsertSQL.Text:= Insertar;
  DtmDatos.A_pDstClientes.UpdateSQL.Text:= Actualizar;
  DtmDatos.A_pDstClientes.DeleteSQL.Text:= Borrar;
  DtmDatos.A_pDstClientes.RefreshSQL.Text:= Releer;
  For i:= 0 to Length(Valores) - 1 do
    DtmDatos.A_pDstClientes.ParamByName(DtmDatos.A_pDstClientes.ParamName(i)).Value:= Valores[i];
//  memo1.Lines.Clear;
//  memo1.Lines.Add(DtmDatos.A_pDstClientes.SelectSQL.Text);
  DataSource1.DataSet.Open;
  DataSource1.DataSet.Last;
  DataSource1.DataSet.Locate('ID',Registro,[]);
  inherited;
end;
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Responder Con Cita