![]() |
Datenbank: MSSQL • Version: 2005 SP2 • Zugriff über: ADO und direkt
Problem: Dokument in Datenbank speichern
Moin,
noch ein kleines Problem. Ich habe ein DB-Feld mit der Bezeichnung dokument (varchar(max)). In dieses soll ein Word/RTF Dokument gespeichert werden. Da dieses ohne Kodierung nicht funzt, arbeite ich mit base64en/decode. Allerdings ist das DB-Feld immer leer. Lasse ich das base64 weg, klappt das Speichern soweit. Allerdings gibts Probleme, wenn was anderes als Plain Text kommt.
Delphi-Quellcode:
Hat auch jemand da einen Tipp?`
function unterlagen_indb : boolean;
var datei : string; lfdnr : string; _text64 : string; fstream : Tfilestream; sstream : Tstringstream; erg : integer; begin lfdnr := AktenManager.grid_unterlagenverwaltung.cells[0,AktenManager.grid_unterlagenverwaltung.selectedrow]; if AktenManager.OpenDialog1.Execute then begin datei := aktenmanager.opendialog1.FileName; try fstream := tfilestream.Create(datei,fmopenread); sstream := tstringstream.create(''); fstream.position := 0; sStream.CopyFrom(fstream,fstream.size); sStream.Position := 0; _text64 := base64encode(sSTream.DataString); erg := update_unterlagen(lfdnr, _text64); showmessage('Result: '+inttostr(erg)); _text64 := ''; finally freeandnil(fstream); freeandnil(sStream); end; end; end; function update_unterlagen(lfdnr, inhalt : string) : integer; var _stmp : string; _query : TAdoquery; begin result := 0; _query := TADOquery.Create(nil); with _query do begin datasource := AktenManager.Datasource_fdd; connection := AktenManager.ADOConnFDD; try _stmp := 'update vertragswerk set dokument = '''+inhalt+ ''' where lfdnr = '+lfdnr; sql.Add(_stmp); result := ExecSQL; except result := 99; end; end; freeandnil(_query); end; Gruss EL |
Re: Problem: Dokument in Datenbank speichern
Hallo,
das Problem muss wohl in der DB beseitigt werden. Textfelder, z.B. varchar(max), können natürlich nur "plain text" speichern; RTF dürfte also kein Problem sein. Für binäre Felder steht BLOB zur Verfügung (ob auch in MySQL, weiß ich nicht, nehme es aber an). Gruß Jürgen |
Re: Problem: Dokument in Datenbank speichern
Hallo Emsländer,
entferne die Zeile 36 aus deinem Quelltext - oder erkläre mir, welchen Wert AktenManager.Datasource_fdd.Dataset hat.
Delphi-Quellcode:
Grüße vom marabu
// ...
with _query do begin // datasource := AktenManager.Datasource_fdd; connection := AktenManager.ADOConnFDD; // ... |
L
Zitat:
bei MYSQL ist es blob. Ich arbeite aber mit MSSQL 2005. Dort gibts kein BLOB. Gruss EL |
Re: Problem: Dokument in Datenbank speichern
Zitat:
AktenManager.Datasource_fdd.Dataset hat den Wert ADOTable_fdd daran scheint es wahrscheinlich nicht zu liegen, denn gebe ich nur reinen Text ein, klappts. Ich bin inzwischen etwas weiter. Habe aus dem varchar(max) image gemacht. Nur kommt beim Wiedereinlesen nur Blödsinn bei rum. Das wird nicht sauber decodiert *fluch* Gruss EL |
Re: Problem: Dokument in Datenbank speichern
Sorry, ich habe nicht genau genug hingeschaut. Bei MSSQL wird varbinary angeboten. Aber wenn Du einen Fachmann für MSSQL und/oder ADO bekommst, bist Du natürlich besser dran. Jürgen
|
Re: L
Zitat:
Mssql kennt sehr wohl den Datentyp Blob Genau nennt der sich Blob:Image |
Re: L
Zitat:
das habe ich inzwischen auch herausgefunden ;-) Allerdings gibts immer noch Gezicke. Rein <> Raus *grummel* Gruss EL |
Re: Problem: Dokument in Datenbank speichern
Seit wann heiß ich denn Jürgen... :-)
Um binäre daten in ein Blob-fled zu schieben, mußt Du sie über einen Stream ansprechen, dann klappts auch. Such doch einfach mal im forum nach Blob + Stream Moin |
Re: Problem: Dokument in Datenbank speichern
Hallo,
es ist sehr selten, dass eine Query, welche du nur zum Aktualisieren eines Datensatzes dynamisch instanzierst, in eine Master-Detail-Beziehung eingebunden wird. Ich bleibe dabei: Lasse die DataSource-Eigenschaft der Query leer oder erkläre mir mal was du damit erreichen willst. Zu deinem Speicherproblem: Text ist Text und ein Speichern von RTF sollte ein einem Feld vom Typ NVARCHAR eigentlich keine Probleme machen.
Delphi-Quellcode:
Freundliche Grüße
function update_unterlagen(lfdnr, inhalt : string) : integer;
begin with TADOquery.Create(nil) do begin try connection := AktenManager.ADOConnFDD; SQL.Text := 'update vertragswerk set dokument = :rtf where lfdnr = :lfdnr'; Parameters.ParamValues['rtf'] := inhalt; Parameters.ParamValues['lfdnr'] := lfdnr; Result := ExecSQL; except Result := 99; // das geht aber auch besser ... end; Free; end; end; |
Re: Problem: Dokument in Datenbank speichern
Hi,
zu dem Thema Stream habe ich nun folgendes hier im Forum gefunden:
Delphi-Quellcode:
Die Frage ist, wo oder wie bekommt die Datenbank mit, WELCHER Datensatz gemeint ist.
procedure ThisEdit;
var aBS:TADOBlobStream; begin try T_.edit; aBS:=TADOBlobStream.Create(T_BLOB,bmwrite); aBS.LoadFromFile(F_NAME); finally aBS.Free; end; T_.post; end; Info: Bisher hab ich nur mit MYSQL und der MYSQL.PAS gearbeitet. Der Kram mit ADO etc. ist für mich Neuland. Gruss EL |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:49 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