Ver Mensaje Individual
  #4  
Antiguo 15-02-2007
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Reputación: 24
vtdeleon Va por buen camino
Saludos

Bueno...despues de quemarme las pestañas, no he visto la causa por el que te dá ese error de memoria, pero te puedo ayudar a que reduzca considerablemente el codigo, ademas de aconsejarte a que Identes el mismo, porque es dificilisimo leerlo.

Comencemos, veo que hay codigo repetidos, dependiendo del RadioGruop que esté marcado, el cual asigna y query 'X'. Esto lo puedes reducir con la declaracion de una variable (por ejemplo) con la clase Tquery

Declaramos la variable
Código Delphi [-]
var
  DbUso:Tquery;//Un TQuery Por Ejemplo u otra clase Padre
Comenzamos a reducir y reutilizar el codigo
Código Delphi [-]

//Partire de la zona que está en rojo
case radiogroup2.ItemIndex of 
 0: DbUso:=qryPrimerSemestre;
 1: DbUso:=qrySegundoSemestre;
End;
//Asignamos el Query a DbUso, dependiendo del valro de Radiogroup
//entonces cambiamos qrySemestreprincipal y qrySegundosemetre por DbUso

with SaveDialog1 do
begin
 FileName := '';
 Filter := 'Excel files|*.XLS;All Files|*.*';
 DefaultExt := 'xls';
 Title := 'Exportando a Excel';
 if execute then
 begin
  DbUso.Open;
  LCID := GetUserDefaultLCID;
  with ExcelApplication1 do
  begin
   connect;
   try
    visible[LCID] := true;
    Workbooks.Add(EmptyParam,LCID);
    Range['A1','R1'].Value2 := VarArrayOf(['Codigo APS','Mes','Documento','Apellido y Nombre','Rama Enza.','Código del Cargo','Carga Horaria', 'Tipo de Cargo', 'Sit. Revista','Subvención','Asist.','Clave identif.','Años de Antiguedad','O. social',
'Sexo','Cuil','CUE','Nivel']);
    // se definen formatos de las celdas
    with Range['A1','R1'] do
    begin
     HorizontalAlignment := xlcenter;
     VerticalAlignment := xlBottom;
     Wraptext := false;
     orientation := 0;
     ShrinkTofit := false;
     MergeCells := false;
     font.Bold := true;
    end;
    DbUso.First;
    LineNumber := 1;
    //envia datos a excel
    while not DbUso.Eof do
    begin
     // horas del cargo
     if (DbUso.FieldByName('Carga_horaria').IsNull) and (DbUso.FieldByName('Carga_C').IsNull) then
      hsTotal := 'Nulo' else
     begin
      if DbUso.FieldByName('carga_horaria').AsInteger <= 0 then
       hstotal := DbUso.FieldByName('carga_c').AsString
      else
       hstotal := DbUso.FieldByName('carga_horaria').AsString;
     end;
  //DNI
     if strtoint(trim(DbUsodni.Value)) < 10000000 then
      dni := DbUso.FieldByName('sexodni').Value
     else
      dni := DbUso.FieldByName('dni').AsString;
         //antiguedad
     if DbUso.FieldByName('totalantig').IsNull then
      antiguedad := DbUso.FieldByName('Antig').Value
     else
      antiguedad := DbUso.FieldByName('totalAntig').Value;
    //RAMA ENZA.
   if DbUso.FieldByName('rama2').IsNull then
    ramaEnza := DbUso.FieldByName('rama').Value
   else
    ramaEnza := DbUso.FieldByName('Rama2').Value;
    //Asistencia
   if DbUso.FieldByName('asist').IsNull then
    asist := DbUso.FieldByName('asist1').AsInteger
   else
    asist := DbUso.FieldByName('asist').AsInteger;
    //mayores a 30
   if asist > 30 then
    asist := 30;
   Inc(LineNumber);
   LineString := IntToStr(LineNumber);
   Range['A'+LineString,'R'+LineString].Value2:=
   VarArrayOf([DbUso.FieldByName('enrollment_code').value,DbUso.FieldByName('period').Value,dni,   DbUso.FieldByName('name_full').Value, ramaEnza,DbUso.FieldByName('cod_cargo').Value, hstotal,DbUso.FieldByName('personal').Value,DbUso.FieldByName('sitRev').Value, DbUso.FieldByName('subv').Value,asist,DbUso.FieldByName('clave').Value,antiguedad, DbUso.FieldByName('obra_social').Value,DbUso.FieldByName('sexo').Value, DbUso.FieldByName('Cuil').Value,DbUso.FieldByName('Semestrecode_denominational').Value, DbUso.FieldByName('nivel').Value]);
   DbUso.Next;
  end;
    Range['A1','R'+ LineString].AutoFormat(xlRangeAutoFormatList1,true,true,true,true,true,true);
  Range['A1','R'+ LineString].Columns.AutoFit;
  Range['A1','R'+ LineString].HorizontalAlignment := xlcenter;
  ActiveWorkbook.SaveAs(FileName,null,null,null,false,false,xlnochange,
  xlUserResolution,false,null,null,LCID,0);
  Quit;
   finally
  disconnect;
   end;// fin del with Range
  end;//fin del with ExcelApplication1
 end;// fin del if execute
end;
Ya con esto, te has ahorrado la mitad del codigo (La parte azul), DbUso puede contener el 1ro o 2do qry.

Fijate bien, que he realizado algunos cambios , como por ejemplo utilizar FieldbyName(). para asignar valor a los campos.

No soy muy bueno explicando, espero que enteindas. Analizalo un poco

Saludos
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!

Última edición por vtdeleon fecha: 15-02-2007 a las 23:21:07.
Responder Con Cita