Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Previsualizar/Imprimir un informe - listado - de una BD MS Access directamente desde Delphi - Delphi
Lenguaje de programación Borland Delphi


Con este "truco" se abrirá/imprimirá un informe/listado/report existente en una base de datos Microsoft Access desde una aplicación desarrollada con Delphi. Para ello deberá existir la base de datos Access, el informe y la tabla a la cual apunte dicho informe (puede ser una tabla vinculada a cualquier BD que admita Access, con lo cual, con este "truco", podría accederse a casi cualquier tipo de BD). El código fuente del "truco" sería:

uses
  ComObj

...


procedure TFormTotalesVales.actImprimirExecute(
  Sender: TObject);
var
  bdAccess, informe : string;
  Access: Variant;
const
  acViewNormal = $00000000;
  acViewDesign = $00000001;
  acViewPreview = $00000002;
  acQuitPrompt = $00000000;
  acQuitSaveAll = $00000001;
  acQuitSaveNone = $00000002;
begin
  MessageDlg('Este informe se generará en MS Access, con lo cual es conveniente ' +
      'que esté cerrado antes de continuar. Cuando lo haya cerrado (si está abierto) ' +
      'pulse en Aceptar para generar el informe.', mtInformation, [mbok], 0);

  informe := 'infTotalesValesFinca';
  bdAccess := ExtractFilePath(Application.ExeName) + 'Temp\impresion.mdb';
  //Abrimos access
  try
    //si ya está abierta la instancia de MS Access la asignamos a la variable
    Access := GetActiveOleObject('Access.Application');
  except
    //si no estaba abierta dará error, capturamos el mismo y la creamos
    Access := CreateOleObject('Access.Application');
  end;
  try
    //intentamos visualizar MS Access
    Access.Visible := True;
  except
    MessageDlg('MS Access no se ha podido abrir, asegurése que no esté ' +
        'abierto ya, si es así ciérrelo e inténtelo de nuevo.', mterror, [mbok], 0);
  end;
  //abrimos la BD en modo NO exclusivo (false), para exclusivo: True
  Access.OpenCurrentDatabase(bdAccess, false);
  //ejecutamos el informe, a este se le puede pasar un filtro como parámetro
  Access.DoCmd.OpenReport (informe, acViewPreview, EmptyParam, EmptyParam);
  MessageDlg('El informe ha sido generado correctamente en MS Access. ' +
      'Cuando lo haya imprimido pulse en Aceptar y la ' +
      'aplicación cerrará MS Access automáticamente.', mtInformation, [mbok], 0);
  //cerramos la BD si no la ha cerrado el usuario
  try
    Access.CloseCurrentDatabase;
  except
    //silenciosa, pues si se produce este error es porque el usuario ha cerrado Access
  end;
  //Cerramos Access si no lo ha cerrado el usuario
  try
    //cerramos MS Access guardando los cambios
    Access.Quit(acQuitSaveAll);
  except
    //silenciosa, pues si se produce este error es porque el usuario ha cerrado Access
  end;
end;
Nota: debido a que estamos trabajando con MS Access directamente, éste debe estar instalado.




Publicado el: 2004-08-30

Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A