PDA

Ver la Versión Completa : Cómo bloquear un documento


Leviatan
08-01-2008, 16:32:24
Hola amigos:

Les planteo el siguiente código:


procedure TForm2.Button3Click(Sender: TObject);
var
Blob: TStream;
begin
Screen.Cursor := crHourGlass;

with ADOQuery1 do begin
Close;
SQL.Clear;
SQL.Add('select * from tabla');
Open;
end;

ADOQuery1.Edit;
blob := ADOQuery1.CreateBlobStream(ADOQuery1.FieldByName('archivo'), bmRead);

try
blob.Seek(0, soFromBeginning);

Ruta := 'C:\temp\' + ADOQuery1['nombre_archivo'];

with TFileStream.Create(Ruta, fmCreate) do
try
CopyFrom(blob, blob.Size);
finally
Free
end;
ShellExecute(0, 'open', PChar(Ruta), nil, nil, SW_SHOWNORMAL);
finally
blob.Free
end;

Screen.Cursor := crDefault;

end;


Aquí lo que hago es recuperar un archivo guardado en una base de datos en una columna de tipo "Image" de SQL Server, luego crearlo en un directorio temporal y luego mostrarlo con la aplicación correcta.

La consulta es la siguiente: si por ejemplo "Juan Pérez" creó el documento entonces debería poder leer y escribir en él. En cambio "Juan González" solamente debería poder leer el archivo y no escribir en él. ¿Cómo puedo lograr eso?

Gracias anticipadas.

Leviatan
08-01-2008, 19:57:03
Encontré solución a cómo bloquear un documento a pesar de que nadie me haya respondido :D. Quizás a alguien le interese la misma:

procedure TForm3.Button1Click(Sender: TObject);
var
Handle: Integer;
Ruta: String;
begin
Ruta := 'C:\Documents and Settings\NGRI\Escritorio\Archivo.doc';
Handle := FileOpen(Ruta, fmShareDenyWrite);
ShellExecute(Handle, 'open', PChar(Ruta), nil, nil, SW_SHOWNORMAL);
end;

Ahora el problema es el siguiente:

¿Cómo puedo hacer para evitar que el usuario, que no es el creador original, imprima el documento?


Ojalá ahora sí pueda conseguir una respuesta :)

Saludos.