Ver Mensaje Individual
  #14  
Antiguo 21-03-2023
tiqui_loquito tiqui_loquito is offline
Miembro
 
Registrado: oct 2013
Posts: 56
Reputación: 11
tiqui_loquito Va por buen camino
Gracias por la orientación Neftali y Casimiro

Por si alguien puede interesarle, realice lo siguiente:

Es un código para probar lo que necesito

Código Delphi [-]
procedure Form1.btn1Click(Sender: TObject);
var
  hInst: Cardinal;
  Paramt,path: string;

  BlobField: TBlobField;
begin
  Paramt := 'HC';
  path := ExtractFilePath(Application.ExeName) + 'Ecograma.exe';

  // Verifica si el archivo existe en la ubicación especificada
  if not FileExists(path) then
  begin
    ShowMessage('El archivo "Ecograma.exe" no se encuentra en la ubicación especificada.');
    Exit;
  end;

  //Aquí envío un parametro para poder ejecutar Ecograma.exe desde mí aplciativo
  //y no cuando le den clic directamenbet a Ecograma.exe
  hInst :=ShellExecute(0, 'open', PChar(path), PChar(Paramt), nil, SW_SHOWNORMAL);


  //Por si no se pudo abrir Ecograma.exe se informa al usuario
  if hInst <= 32 then
  begin
    case hInst of
      ERROR_FILE_NOT_FOUND:
        ShowMessage('El archivo no se encontró.');
      ERROR_PATH_NOT_FOUND:
        ShowMessage('La ruta especificada no se encontró.');
      ERROR_BAD_FORMAT:
        ShowMessage('El formato del archivo no es válido.');
      else
        ShowMessage('Se produjo un error al ejecutar el archivo.');
    end;
  end;

  //Se creo el campo ECOGRAMA en la BD
 IBQuery1.Close;
 IBQuery1.ParamByName('ECOGRAMA').DataType := ftGraphic;
 IBQuery1.ParamByName('ECOGRAMA').LoadFromFile('D:\mychart.sgp', ftBlob);
 IBQuery1.Open;

 IBQuery1.Transaction.CommitRetaining;

 IBQuery2.Close;
 IBQuery2.Open;

 BlobField := TBlobField(IBQuery2.FieldByName('ECOGRAMA'));
 SaveBlobToFile(BlobField, 'C:\mychart.sgp');

end;


//Procedimeinto para guardar el archivo que se descarga de BD
procedure form1.SaveBlobToFile(Blob: TBlobField;
  const FileName: string);
var
  Stream: TFileStream;
begin
  Stream := TFileStream.Create(FileName, fmCreate);
  try
    Blob.SaveToStream(Stream);
  finally
    Stream.Free;
  end;
end;


Con ese trozo de código hago lo siguiente:

Llamo a Ecograma.exe desde mi aplicativo y no permito que se ejecute si le doy doble click a Ecograma.exe, ya que este va a estar en la misma carpeta de mi aplicativo, además si quieren llevarlo
a otro pc y abrirlo no lo podrán hacer.

Código Delphi [-]
  Paramt := 'HC';  //en simplegra

  hInst :=ShellExecute(0, 'open', PChar(path), PChar(Paramt), nil, SW_SHOWNORMAL);

Una vez se abra Ecograma.exe, se guarde el diagrama (aquí debo modificar para que guarde el diagrama con ciertas condiciones), se guarda el fichero en BD(debo modificarlo para que lo guarde cuando le de guardar desde mi aplicativo, ingresando a la ubicación donde se guarda el diagrama ).

Código Delphi [-]
 IBQuery1.Close;
 IBQuery1.ParamByName('ECOGRAMA').DataType := ftGraphic;
 IBQuery1.ParamByName('ECOGRAMA').LoadFromFile('D:\mychart.sgp', ftBlob);
 IBQuery1.Open;

 IBQuery1.Transaction.CommitRetaining;


Finalmente se consulta el campo donde se guardo el fichero y se descarga en C: (aquí también debo hacer varios ajustes).

Código Delphi [-]
 IBQuery2.Close;
 IBQuery2.Open;

 BlobField := TBlobField(IBQuery2.FieldByName('ECOGRAMA'));
 SaveBlobToFile(BlobField, 'C:\mychart.sgp');



//Procedimeinto para guardar el archivo que se descarga de BD
procedure form1.SaveBlobToFile(Blob: TBlobField;
  const FileName: string);
var
  Stream: TFileStream;
begin
  Stream := TFileStream.Create(FileName, fmCreate);
  try
    Blob.SaveToStream(Stream);
  finally
    Stream.Free;
  end;
end;

Probé abrir el fichero descargado y me abre normal y lo puedo editar.


Aun hay trabajo por hacer, pero por ahora va todo viento en popa

Gracias por su colaboración
Responder Con Cita