AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi 400kB Limit bei SQL Server (z.B. Blob)

400kB Limit bei SQL Server (z.B. Blob)

Ein Thema von Karsten der Kelte · begonnen am 4. Jul 2015 · letzter Beitrag vom 28. Apr 2020
Antwort Antwort
Karsten der Kelte

Registriert seit: 16. Mai 2006
7 Beiträge
 
#1

400kB Limit bei SQL Server (z.B. Blob)

  Alt 4. Jul 2015, 02:42
Datenbank: SQL Server • Version: 2014 • Zugriff über: FireDAC/ Firemonkey
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.
Ciao

Karsten

Geändert von Karsten der Kelte ( 4. Jul 2015 um 13:10 Uhr) Grund: im Procedureaufruf hat der Paramter Tabelle gefehlt
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.867 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: 400kB Limit bei SQL Server (z.B. Blob)

  Alt 4. Jul 2015, 07:41
Mag ja sein, dass ODBC wieder angesagt ist, aber vielleicht hilft es, darauf zu verzichten.
Gruß, Jo
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: 400kB Limit bei SQL Server (z.B. Blob)

  Alt 4. Jul 2015, 08:20
Und was soll er dann nehmen?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer
Online

Registriert seit: 13. Aug 2002
16.681 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: 400kB Limit bei SQL Server (z.B. Blob)

  Alt 4. Jul 2015, 08:33
Und was soll er dann nehmen?
Wie in der Doku (http://docwiki.embarcadero.com/RADSt...erver_(FireDAC)) empfohlen den Native Client.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.867 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: 400kB Limit bei SQL Server (z.B. Blob)

  Alt 4. Jul 2015, 09:10
Und was soll er dann nehmen?
Ich kenne mich leider mit Firedac und dessen Möglichkeiten gar nicht aus. Eine naheliegende Anwort hat Bernhard Geyer ja gegeben, ADO würde vermutlich auch funktionieren.
Gruß, Jo
  Mit Zitat antworten Zitat
Karsten der Kelte

Registriert seit: 16. Mai 2006
7 Beiträge
 
#6

AW: 400kB Limit bei SQL Server (z.B. Blob)

  Alt 4. Jul 2015, 13:38
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:
   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
Ein kleines Testprogramm hat jetzt geholfen. (wenn ich etwas Zeit hab pack ich das mal in ein Tut für Blob's)

Der Native Client ist die richtige Wahl. Dann klappts auch mit großen Dateien.

Vielen Dank an alle und ein schönes, warmes, Wochenende
Ciao

Karsten

Geändert von Karsten der Kelte ( 4. Jul 2015 um 13:41 Uhr)
  Mit Zitat antworten Zitat
Karsten der Kelte

Registriert seit: 16. Mai 2006
7 Beiträge
 
#7

AW: 400kB Limit bei SQL Server (z.B. Blob)

  Alt 28. Apr 2020, 01:12
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:

Installieren von SQL Server Native Client

Microsoft® SQL Server® 2012 Native Client (x86)
Microsoft® SQL Server® 2012 Native Client (x64)
Ciao

Karsten
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf