Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Datein in MS SQL speichern (https://www.delphipraxis.net/176533-datein-ms-sql-speichern.html)

Andidreas 12. Sep 2013 12:06

Datenbank: MS SQL Server • Version: 2008 • Zugriff über: UniDac

Datein in MS SQL speichern
 
Hallo zusammen,

ich beschäftige mich gerade damit wie man Dateien (PDF, CSV, XLSX, usw.) in einer MS SQL Datenbank speichert.

Bis jetzt habe ich nur einen Weg gefunden, nämlich die Verwendung eines varbinary(max) Feldes.
In diesem Falle werden die Dateien nicht in der Tabelle direkt gespeichert, sondern im NTFS.

Gibt es bei einer MS SQL Datenbank auch die möglichkeit die Daten direkt in einer Tabelle mit zu speichern, ohne das etwas im NTFS gespeichert wird?

mkinzler 12. Sep 2013 12:13

AW: Datein in MS SQL speichern
 
Ja nennt sich BLOB.

Andidreas 12. Sep 2013 12:23

AW: Datein in MS SQL speichern
 
Ist das dann der Feldtyp "BLOB"?

Uwe Raabe 12. Sep 2013 12:42

AW: Datein in MS SQL speichern
 
Zitat:

Zitat von Andidreas (Beitrag 1228145)
Bis jetzt habe ich nur einen Weg gefunden, nämlich die Verwendung eines varbinary(max) Feldes.
In diesem Falle werden die Dateien nicht in der Tabelle direkt gespeichert, sondern im NTFS.

Soweit ich weiß, wird ein
Delphi-Quellcode:
varbinary(max)
Feld genauso in der Datenbank gespeichert, wie jedes andere Feld. Als separate Datei wird es nur dann abgelegt, wenn du
Delphi-Quellcode:
FILESTREAM varbinary(max)
nimmst.

Bernhard Geyer 12. Sep 2013 12:50

AW: Datein in MS SQL speichern
 
Zitat:

Zitat von Andidreas (Beitrag 1228145)
ich beschäftige mich gerade damit wie man Dateien (PDF, CSV, XLSX, usw.) in einer MS SQL Datenbank speichert.

Bis jetzt habe ich nur einen Weg gefunden, nämlich die Verwendung eines varbinary(max) Feldes.
In diesem Falle werden die Dateien nicht in der Tabelle direkt gespeichert, sondern im NTFS.

Hä? Das wäre mir neu. ein BLOB (varbinary(max) speichert die Daten nur nicht direkt in der row sondern in einem speziellen DB/Tabellenbereich der nicht der 8060-Byte maximale Zeilengröße des MS SQL-Server unterliegt. Der neue Typ varbinary(max) hat gegenüber dem alten Typ (n)text einige Vorteile was Performance und diverse SQL-Möglichkeiten betrifft.

Andidreas 12. Sep 2013 13:00

AW: Datein in MS SQL speichern
 
Ich merke gerade das ich das Falsch verstanden habe...

Es ist so wie Uwe Raabe es sagt...
Mit dem Attribut "Filestream" speicher ich es im NTFS, ohne in der DB...:oops:

Furtbichler 12. Sep 2013 13:14

AW: Datein in MS SQL speichern
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1228152)
Soweit ich weiß, wird ein
Delphi-Quellcode:
varbinary(max)
Feld genauso in der Datenbank gespeichert, wie jedes andere Feld. Als separate Datei wird es nur dann abgelegt, wenn du
Delphi-Quellcode:
FILESTREAM varbinary(max)
nimmst.

Gilt doch erst ab SQL 2012, oder?

Zitat:

Zitat von Bernhard Geyer (Beitrag 1228153)
Ein BLOB (varbinary(max) speichert die Daten nur nicht direkt in der row sondern in einem speziellen DB/Tabellenbereich

Das ist korrekt, aber da das vollkommen transparent geschieht, ist es 'eigentlich' so, als ob die Daten in der Spalte stehen.

Zitat:

...der 8060-Byte maximale Zeilengröße des MS SQL-Server...
Das ist so nicht ganz korrekt. Die Grenze gilt für fixe Größen (also auch nicht für VARCHAR).
Zitat:

Zitat von MSDN
SQL Server supports row-overflow storage which enables variable length columns to be pushed off-row. Only a 24-byte root is stored in the main record for variable length columns pushed out of row; because of this, the effective row limit is higher than in previous releases of SQL Server. For more information, see the "Row-Overflow Data Exceeding 8 KB" topic in SQL Server Books Online.

Gilt seit mindestens SQL 2005.

Bernhard Geyer 12. Sep 2013 13:49

AW: Datein in MS SQL speichern
 
Zitat:

Zitat von Furtbichler (Beitrag 1228160)
Zitat:

...der 8060-Byte maximale Zeilengröße des MS SQL-Server...
Das ist so nicht ganz korrekt. Die Grenze gilt für fixe Größen (also auch nicht für VARCHAR).

Das sagen mir die Fehlermeldungen die ich schon gesehen habe was anderes.
Der unterschied zwischen varchar und char ist nur das der String nicht mit leerzeichen gefüllt wird.

Andidreas 12. Sep 2013 13:59

AW: Datein in MS SQL speichern
 
Ich hab leider noch kein Beispiel gefunden das mir verständlich erklärt wie ich eine Datei in die MS SQL Spalte bekommen...
Habt Ihr ein solches Beispiel?

Btw. das Filestream Attribut gibt es glaub ab SQL Server Version 2008...

Uwe Raabe 12. Sep 2013 15:39

AW: Datein in MS SQL speichern
 
Ich weiß jetzt nicht, ob es das schon in XE gab, aber in XE3 hat ein
Delphi-Quellcode:
TBlobField
eine Methode
Delphi-Quellcode:
LoadFromFile
.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:54 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz