[Lazarus] View Graphic File
Allan E. Registos
allan.registos at smpc.steniel.com.ph
Fri Feb 21 01:11:42 CET 2014
On Thursday, 20 February, 2014 05:07 PM, Antonio Fortuny wrote:
>
> Le 20/02/2014 07:43, Allan E. Registos a écrit :
>> Hi all,
>>
>> A noob question, I have trouble trying to port an existing vb.net
>> snippet to pascal.
>> Can anyone provide a code snippet where we can download and view a
>> file from a Database? A binary(jpeg/pdf file) was uploaded to a
>> database table. The code will just download the file uploaded and
>> view it.
>>
>> In vb.net this can be done:
>>
>> / if conn.State = ConnectionState.Closed Then conn.Open()//
>> // sql = "Select binfile from graphicfiles WHERE id=" & id//
>> //
>> // cmd = New NpgsqlCommand(sql, conn)//
>> //
>> // Dim fileData As Byte() =
>> DirectCast(cmd.ExecuteScalar(), Byte())//
>> //
>> // Dim sTempFileName As String = Path.GetTempPath & "\" &
>> sFileName//
>> //
>> // If Not fileData Is Nothing Then//
>> //
>> // 'Read image data into a file stream //
>> // Using fs As New FileStream(sTempFileName,
>> FileMode.OpenOrCreate, FileAccess.Write)//
>> // fs.Write(fileData, 0, fileData.Length)//
>> // 'Set image variable value using memory stream. //
>> // fs.Flush()//
>> // fs.Close()//
>> // End Using//
>> //
>> // Process.Start(sTempFileName) 'Open file//
>> //
>> // End If//
>> /
> Sounds quite easy to translate:
> 1. install the sqldblaz package if not yet done
> 2. onto a form or a datamodule drop a connection named DB
> (correcpondig to your DB) and a transaction named TR; link them
> 3. drop a TSqlQuery, link it to the connection and the transacton just
> dropped (name Q)
> 4. fill in the Sql property/. /I assume that the column binfile is a
> binay blob
> ...
> var
> fs: TMemoryStream;
> begin
> ...
> fs := TMemoryStream.Create;
> try
> DB.DatabaseName := 'whatever connection could be';
> DB..UserName := 'sysdba';
> DB.Password := 'your password';
> DB.Connected := True;
> Q.Sql.Text := Format('Select binfile from graphicfiles WHERE
> id=%d/'/, [id]);/ // assuming id is an integer, adapt the
> format otherwise/
> TR.StartTransaction;
> Q.Prepare;
> Q.Open;
> if Q.Eof = False then begin
> fs.Position := 0;
> TBlobField(Q.FieldByName('binfile')).SaveToStream(fs);
> ...
> fs.Position := 0; // reset position to beginning of
> stream
> do whatever you need to do with the stream "fs"
> use stream length by fs.Size
> fs.SaveToFile('any file name');
> // for an image dropped onto a form:
> Image.Picture.LoadFromStream(fs);
> ... etc...
>
> ...
> end;
> Q.Close;
> finally
> TR.Commit
> fs.Free
> end
>
> This should work as it is a code snippet used in one of my programs
> (cleaned and simplified). In my case the DBMS is Firebird but this
> should work with any other supported by SqlDbLaz package.
Many Thanks! Antonio. I will use and save your code for future use.
Regards,
Allan
>
> Antonio.
>
> Thanks,,
>> Allan
>>
>>
>> --
>> _______________________________________________
>> Lazarus mailing list
>> Lazarus at lists.lazarus.freepascal.org
>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
>
>
>
> ---
> Ce courrier électronique ne contient aucun virus ou logiciel
> malveillant parce que la protection avast! Antivirus est active.
> http://www.avast.com
>
>
>
> --
> _______________________________________________
> Lazarus mailing list
> Lazarus at lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4267 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20140221/197bd2c7/attachment-0003.bin>
More information about the Lazarus
mailing list