Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Servers (https://www.clubdelphi.com/foros/forumdisplay.php?f=9)
-   -   Archivar documento Word en BD (https://www.clubdelphi.com/foros/showthread.php?t=65222)

Hugo 28-11-2009 12:01:15

Archivar documento Word en BD
 
Hola.

Estoy realizando una aplicación donde debo abrir una plantilla existente de Word (.dot), reemplazar unos campos con valores de la base de datos y presentar el documento Word.

Hasta aquí sin problema.

El problema que tengo es que quiero que cuando el usuario guarde el archivo Word, se guarde en la base de datos, y no en el disco.

Había pensado en darle un nombre, y despues de que el usuario cierre la aplicación Word, grabar el archivo en la base de datos, pero quería saber si existe la posibilidad de saltar éste paso.

Gracias.

Aleca 28-11-2009 12:49:33

Creo q no hay otra forma o mejor dicho esa es la forma q conozco.:)

Hugo 28-11-2009 13:15:08

Gracias por contestar.

He probado y mas o menos me funciona, salvo que no puedo guardar hasta que el usuario haya terminado, la aplicacion Word no se abre de forma modal, esto es, las líneas de código que siguen a la llamada se ejecutan de todas formas :(, y llamaria a método guardar antes de que el usuario haya terminado.

¿ Hay alguna manera de que Word se abra en modal :confused: ?

Gracias de nuevo.

TheJHorse 03-12-2009 14:05:36

No se como llamas al MSWORD desde tu aplicacion pero yo la llamaria con esta funcion que se detiene la aplicacion host hasta que el Word termine.

Código Delphi [-]
function TForm1.WinExecAndWait32(FileName:String; Visibility:integer):integer;
var 
  zAppName:array[0..512] of char;
  zCurDir:array[0..255] of char;
  WorkDir:String;
  StartupInfo:TStartupInfo;
  ProcessInfo:TProcessInformation;
  Resultado: DWord;
begin 
  StrPCopy(zAppName,FileName);
  GetDir(0,WorkDir);
  StrPCopy(zCurDir,WorkDir);
  FillChar(StartupInfo,Sizeof(StartupInfo),#0);
  StartupInfo.cb := Sizeof(StartupInfo);
 
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := Visibility;
  if not CreateProcess(nil,
    zAppName,                      { pointer to command line string }
    nil,                           { pointer to process security attributes}
    nil,                           { pointer to thread security attributes}
    false,                         { handle inheritance flag }
    CREATE_NEW_CONSOLE or          { creation flags }
    NORMAL_PRIORITY_CLASS,
    nil,                           { pointer to new environment block }
    nil,                           { pointer to current directory name }
    StartupInfo,                   { pointer to STARTUPINFO }
    ProcessInfo) then Result := -1 { pointer to PROCESS_INF }
 
  else begin 
    WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
    GetExitCodeProcess(ProcessInfo.hProcess,Resultado);
    Result := Resultado;
  end; 
end;

Codigo de: Q3 team


La franja horaria es GMT +2. Ahora son las 09:48:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi