AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [SQL 2005] Dateienaustausch SQL-Server <-> Client-Anwendung
Thema durchsuchen
Ansicht
Themen-Optionen

[SQL 2005] Dateienaustausch SQL-Server <-> Client-Anwendung

Ein Thema von Herby99 · begonnen am 19. Okt 2007 · letzter Beitrag vom 23. Okt 2007
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz