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.
Antonio.
Thanks,,
Allan
--
_______________________________________________
Lazarus mailing list
[email protected]
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
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus