![]() |
Datenbank: SQL Server • Version: 2014 • Zugriff über: FireDAC/ Firemonkey
400kB Limit bei SQL Server (z.B. Blob)
Hallo,
ich lade Dateien (z.B. PDF) in ein Blob Feld. Wenn die Dateien 400kB (409600 Bytes) überschreiten, kommt die Fehlermeldung: [FireDAC][Phys][ODBC][Microsoft][ODBC SQL Server Driver]Warnung: Partielles Einfügen/Update. Das Einfügen/Update von Text- oder Bildspalte(n) war nicht erfolgreich. Im Internet habe ich schon gefunden, dass es sich wohl um einen Bug im ODBC handelt. Da die Meldungen aber schon alt sind, vermute ich entweder eine falsche Einstellung oder eine ungünstige Installationsumgebung meinerseits. Vielleicht hat jemand das Problem schonmal gelöst... Vielen Dank. Karsten, der Kelte Über die Management Console kann ich problemlos 1MB Dateien in den Blob speichern: [SQL] INSERT INTO dePa..Dateien(Dateiname,Datei) SELECT 'Test.pdf' AS Dateiname, * FROM OPENROWSET(BULK N'd:\Temp\0000000005.pdf', SINGLE_BLOB) AS Datei [/SQL] In Delphi funktioniert der folgende Code (zusammenkopiert) bis 400kB:
Delphi-Quellcode:
// DB Verbindung herstellen
FDConnection.DriverName :='MSSQL'; FDConnection.LoginPrompt:=False; FDConnection.Params.Clear; FDConnection.Params.Add('DriverID=MSSQL' ); FDConnection.Params.Add('Server=' +Server ); FDConnection.Params.Add('Database='+Datenbank); FDConnection.Params.Add('User_Name='+Benutzer); FDConnection.Params.Add('Password='+Passwort); FDConnection.Params.Add('LoginTimeOut=10'); FDConnection.Params.Add('OSAuthent=No'); FDConnection.Params.Add('Workstation='+Standard.ComputerName);// Client PC FDConnection.Params.Add('ApplicationName=TestApp'); FDConnection.Params.Add('MetaDefSchema=dbo'); FDConnection.Params.Add('MetaDefCatalog='+Datenbank); FDConnection.Connected:=True; ... procedure Datei_in_DB_speichern(Dateiname,Tabelle,ID:string;var FDC:TFDConnection); var FQ_Insert:TFDQuery; begin if FileExists(Dateiname) then begin FQ_Insert:=TFDQuery.Create(FDC.Owner); FQ_Insert.Connection:=FDC; FDC.StartTransaction; try FQ_Insert.SQL.Text := 'update '+Tabelle+' set Datei=:blobdata where ID=:IDval'; FQ_Insert.ParamByName('IDval').AsString:=ID; FQ_Insert.ParamByName('blobdata').LoadFromFile(Dateiname,ftBlob); FQ_Insert.ExecSQL; FQ_Insert.Disconnect; FDC.Commit; except FDC.Rollback; raise; end; FQ_Insert.Destroy; end; end; Installierte Software: Microsoft ODBC Driver 11 for SQL Server 12.1.4100.1 Microsoft SQL Server 2012 Native Client 11.1.3000.0 Microsoft SQL Server 2014 12.1.4100.1 Microsoft SQL Server Management Studio 12.0.4100.1 Microsoft Analysis Services-Clienttools 12.0.4100.1 Office 2013 x64 (mit Access) 15.0.4569.15.06 Access Engine 2010 x32 14.0.6029.1000 (Deinstallation ohne Erfolg) Microsoft Data Access Components (MDAC) 6.3.9600.17415 Microsoft MSXML 3.0 4.0 5.0 6.0 Microsoft Internet Explorer 9.11.9600.17842 Microsoft .NET Framework 4.0.30319.34209 Betriebssystem 6.3.9600 Ich programmiere mit Delphi XE8, Firemonkey, FireDAC. |
AW: 400kB Limit bei SQL Server (z.B. Blob)
Mag ja sein, dass ODBC wieder angesagt ist, aber vielleicht hilft es, darauf zu verzichten.
|
AW: 400kB Limit bei SQL Server (z.B. Blob)
Und was soll er dann nehmen?
|
AW: 400kB Limit bei SQL Server (z.B. Blob)
Zitat:
![]() |
AW: 400kB Limit bei SQL Server (z.B. Blob)
Zitat:
|
AW: 400kB Limit bei SQL Server (z.B. Blob)
Danke. Der Tip ODBC war schon die richtige Richtung.
Im FDPhysMSSQLDriverLink funktionierte nur ODBCDriver=SQL Server. Grund ist eine Inkonsistenz der Parameterbezeichnung zwischen ODBC und Native Treiber:
Delphi-Quellcode:
Ein kleines Testprogramm hat jetzt geholfen. (wenn ich etwas Zeit hab pack ich das mal in ein Tut für Blob's)
FDConnection.Params.Add('UserName=' +Benutzer); // ODBCDriver='SQL Server'
FDConnection.Params.Add('User_Name='+Benutzer); // ODBCDriver='SQL Server Native Client 11.0' oder einfach leer lassen Der Native Client ist die richtige Wahl. Dann klappts auch mit großen Dateien. Vielen Dank an alle und ein schönes, warmes, Wochenende 8-) |
AW: 400kB Limit bei SQL Server (z.B. Blob)
Noch ein kleine Ergänzung:
Unter Windows wird der "einfache" SQL Client mitgeliefert. Auch wenn man den Native Client in Delphi auswählt, wird im fall-back ohne installierten Native Client der SQL Client verwendet. Es muss also zwingen der Native Client installiert werden: ![]() ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:31 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