AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Problem: Dokument in Datenbank speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Problem: Dokument in Datenbank speichern

Ein Thema von emsländer · begonnen am 20. Feb 2007 · letzter Beitrag vom 20. Feb 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Problem: Dokument in Datenbank speichern

  Alt 20. Feb 2007, 17:28
Datenbank: MSSQL • Version: 2005 SP2 • Zugriff über: ADO und direkt
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:
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;
Hat auch jemand da einen Tipp?`

Gruss

EL


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#2

Re: Problem: Dokument in Datenbank speichern

  Alt 20. Feb 2007, 18:15
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Problem: Dokument in Datenbank speichern

  Alt 20. Feb 2007, 18:51
Hallo Emsländer,

entferne die Zeile 36 aus deinem Quelltext - oder erkläre mir, welchen Wert AktenManager.Datasource_fdd.Dataset hat.

Delphi-Quellcode:
// ...
    with _query do begin
      // datasource := AktenManager.Datasource_fdd;
      connection := AktenManager.ADOConnFDD;
// ...
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#4

L

  Alt 20. Feb 2007, 18:52
Zitat von Jürgen Thomas:
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
Hi Jürgen,

bei MYSQL ist es blob. Ich arbeite aber mit MSSQL 2005. Dort gibts kein BLOB.


Gruss

EL


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  Mit Zitat antworten Zitat
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#5

Re: Problem: Dokument in Datenbank speichern

  Alt 20. Feb 2007, 18:56
Zitat von marabu:
Hallo Emsländer,

entferne die Zeile 36 aus deinem Quelltext - oder erkläre mir, welchen Wert AktenManager.Datasource_fdd.Dataset hat.

Delphi-Quellcode:
// ...
    with _query do begin
      // datasource := AktenManager.Datasource_fdd;
      connection := AktenManager.ADOConnFDD;
// ...
Grüße vom marabu
Hi Marabu,

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


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#6

Re: Problem: Dokument in Datenbank speichern

  Alt 20. Feb 2007, 18:57
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
379 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: L

  Alt 20. Feb 2007, 18:58
Zitat von emsländer:
Hi Jürgen,

bei MYSQL ist es blob. Ich arbeite aber mit MSSQL 2005. Dort gibts kein BLOB.


Gruss

EL
Da täuscht Du dich aber,
Mssql kennt sehr wohl den Datentyp Blob
Genau nennt der sich Blob:Image
  Mit Zitat antworten Zitat
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#8

Re: L

  Alt 20. Feb 2007, 18:59
Zitat von stifflersmom:
Zitat von emsländer:
Hi Jürgen,

bei MYSQL ist es blob. Ich arbeite aber mit MSSQL 2005. Dort gibts kein BLOB.


Gruss

EL
Da täuscht Du dich aber,
Mssql kennt sehr wohl den Datentyp Blob
Genau nennt der sich Blob:Image
Hi Jürgen,

das habe ich inzwischen auch herausgefunden

Allerdings gibts immer noch Gezicke. Rein <> Raus *grummel*


Gruss

EL


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
379 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: Problem: Dokument in Datenbank speichern

  Alt 20. Feb 2007, 19:04
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Problem: Dokument in Datenbank speichern

  Alt 20. Feb 2007, 19:18
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:
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;
Freundliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01:49 Uhr.
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