Einzelnen Beitrag anzeigen

Herby99

Registriert seit: 7. Aug 2007
3 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: [SQL 2005] Dateienaustausch SQL-Server <-> Client-

  Alt 23. Okt 2007, 10:11
Hallo,

Ich habe das ganze nun so gelöst:

Zunächst der Delphi Code:

Delphi-Quellcode:
  ADOStoredProc1.Close;
  ADOStoredProc1.Parameters.Clear;
  ADOStoredProc1.ProcedureName := 'dbo.GetFile';
  ADOStoredProc1.Parameters.AddParameter.Name := '@ID';
  
  ADOStoredProc1.Parameters.ParamByName('@ID').DataType := ftInteger;
  ADOStoredProc1.Parameters.ParamByName('@ID').Direction := pdInput;
  ADOStoredProc1.Parameters.ParamByName('@ID').Size := MaxInt;
  ADOStoredProc1.Parameters.ParamByName('@ID').Value := ID;

  ADOStoredProc1.Open;
  
  // speichern
  JvSaveDialog1.FileName := ExtractFileName(ADOStoredProc1.fields.FieldByName('FileName').Value);
  if JvSaveDialog1.Execute = True then
  begin
    TBlobField(ADOStoredProc1.fields.FieldByName('BinaryData')).SaveToFile(JvSaveDialog1.FileName);
  end;
Wie man sieht, greife ich nun auf das Ergebnis per Recordset zu, welches ich am Ende der SP herausgebe:

SQL-Code:
CREATE PROCEDURE GetFile (
  @ID int)
AS
BEGIN

  DECLARE @fstream varbinary(max);
  DECLARE @fname varchar(50);
  DECLARE @path_to_fname varchar(1000);
  DECLARE @updatequery varchar(2000)
  SET @path_to_fname = 'D:\temp2\myDBFolder\';
  
  -- prüfen, ob fstream geladen werden muss
  SELECT @fstream = fstream FROM FileTable WHERE ID=@ID;
  IF @fstream IS NULL
  BEGIN
    -- OPENROWSET unterstützt keine variablen, daher der umweg:
    SELECT @fname = fname FROM FileTable WHERE ID = @ID;
    SET @updatequery = '
UPDATE FileTable
SET fstream = (SELECT * FROM OPENROWSET(BULK
''' + @path_to_fname + @fname + ''', SINGLE_BLOB) AS x)
WHERE ID=
'+ @ID +';';

    --print @updatequery;
    EXEC (@updatequery);
  END;
  
  SELECT @fstream = fstream, @fname = fname FROM FileTable WHERE ID=@ID;
  
  SELECT @fstream as BinaryData, @fname as FileName;
  
  
END
Falls jemand interessiert ist, ich habe auch noch Code für das abspeichern einer Clientdatei auf dem Server...

Gruß,
Jan
  Mit Zitat antworten Zitat