AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken PDF in Blob speichern mit seltsamen Effekten
Thema durchsuchen
Ansicht
Themen-Optionen

PDF in Blob speichern mit seltsamen Effekten

Ein Thema von Jumpy · begonnen am 6. Dez 2013 · letzter Beitrag vom 10. Dez 2013
Antwort Antwort
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.222 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: PDF in Blob speichern mit seltsamen Effekten

  Alt 6. Dez 2013, 16:38
Bei Oracle und Ado muss man eigentlich fragen welcher Provider verwendet wird. Die von MS haben bekanntlich ja so ihre Fehler.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: PDF in Blob speichern mit seltsamen Effekten

  Alt 6. Dez 2013, 17:42
Nicht nur, die Oracles sind auch manchmal Zickig, und es kommt auf die genaue Version an!

Wenn Du keine vernünftige Doku hast, hilft wohl nur ausprobieren.
Ohne Gewähr: (mir ist bekannt, daß der Oracle Provider keine Memos mag. u.u mußt Du noch ODBC dazwischen packen, da war mal was, die Details sind mir aber entschwunden.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#3

AW: PDF in Blob speichern mit seltsamen Effekten

  Alt 9. Dez 2013, 09:32
Hallo,

der Zugriff erfolgt mit den ADO-Komponenten, die bei Delphi (diesmal D2010) dabei sind. Es ist aber noch Oracles ODBC dazwischen, d.h. ADO->ODBC->Oracle.

Hier mal die Funktion wie ich sie jetzt benutze, wo ich nur noch evtl. schon vorhandene Einträge lösche (die Funktion ist jetzt nicht hier dabei, da einfach nur ein Delete) und dann neu einfüge.
Vorher stand da anstatt q.Insert sowas ala "If IDExists(ID) then q.Edit else q.Insert;"

Delphi-Quellcode:
procedure TBL.PutFileInDB(const id,Typ,fname:String; var filesize:integer);
var q:TADOTable;
    s:TStream;
    f:TFileStream;
begin
  q:=TADOTable.Create(nil);
  q.Connection:=Con;
  q.TableName:=Table(TabDatei);
  q.Open;
  If FileExists(fname) then
    begin
    q.Insert;
    q.FieldByName('ID').AsString:=id;
    q.FieldByName('Typ').AsString:=Typ;
    s:=q.CreateBlobStream(q.FieldByName('Datei'), bmReadWrite);
    f:=TFileStream.Create(fname, fmOpenRead);
    filesize:=s.CopyFrom(f,f.Size);
    f.Free;
    s.Free;
    q.Post;
    end
  else
    filesize:=0;
  q.Free;
end;
@Perlsau: Was du gezeigt hast, war in etwa was ich meinte, aber das war in einem anderen Thread, wo du das noch ausführlicher geschrieben hast, ich kanns aber wie gesagt nicht mehr finden, war auch schon älter. Ich hab deine Funktion dabei nur als Hinweis genommen, wie man in den Blob schreibt/streamt, das aber nicht als eigene Funktion abstrahiert, sondern einfach mit dem Füllen der restlichen Tabellenfelder in einer Funktion gelassen.

Was mir aufgefallen ist, ist, das du in deinem Post von "Append" gesprochen hast, ich aber "Insert" benutzt habe. Könnte das Probleme im Zusammenhang mit Blobs Probleme machen? Der unterschied ist wie ich das verstanden habe ist doch nur, ob sich der Datensatzzeiger vor dem Einfügen ans Ende verschiebt oder nicht und ich dachte, das betrifft nur die clientseitige Anzeige und nicht den Speicherort in der DB oder so.
Ralph
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: PDF in Blob speichern mit seltsamen Effekten

  Alt 9. Dez 2013, 10:28
Du hast noch nicht geschrieben, ob Du Oracle oder MS Oracle Treiber verwendest. Bei BLOB habe ich sehr schlechte Erfahrung mit dem alten MS Treiber gemacht.
Ansonsten musst Du in Deinem Code vielleicht auch den Stream an das Feld schicken.

P.S.: Warum du gleich eine ganze Table für das Update aufmachst, ist mir auch nicht so klar. Gerade bei BLOB Spalten kann das sehr viel kosten.
Insgesamt sieht Dein Code außerdem nicht nach Update, sondern nur Insert aus.
Gruß, Jo
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: PDF in Blob speichern mit seltsamen Effekten

  Alt 9. Dez 2013, 10:50
Hi Jumpy,

meine Funktion hatte ich so gestaltet, daß sie für alle Eventualitäten brauchbar ist. Prüfungen auf z.B. existierende Datei oder Datensatz erfolgen von der aufrufenden Methode. Das kannst du dir natürlich so hinbasteln, wie du es benötigst.

Der Unterschied zwischen Append und Insert besteht darin, daß bei Append ein Datensatz physikalisch am Ende der Tabelle eingefügt wird, bei Insert jedoch an der physikalischen Stelle des Datensatz-Zeigers (ob darüber oder darunter weiß ich nicht). Für die genannte Funktion spielt das jedoch kenie Rolle.

Offenbar hast du es nun geschafft, eine Binärdatei (denn nichts anderes ist ein PDF-Dokument) in einem Blobfeld zu speichern. Deinen Code hab ich mir jetzt aber nicht angeschaut.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#6

AW: PDF in Blob speichern mit seltsamen Effekten

  Alt 9. Dez 2013, 13:22
@Jobo:
Der Code sieht nach Insert aus, weil ich nur noch Inserts mache, nachdem die Updates/Edits nicht geklappt haben. Ursprünglich sah der Code leicht anders aus (siehe Beschreibung davor).

Ich benutze die Oracle-ODBC-Treiber, da (wie ja auch von dir) von den MS-Treibern immer abgeraten wird und diese afaik ja auch nicht mehr gepflegt werden.

Warum ich mir die ganze Tabelle "rüberhole" um einen DS darin zu speichern, hab ich mir ehrlich gesagt noch keine Gedanken drüber gemacht. Das war halt in dem Beispiel so und ich dachte das passt.
Zuvor hab ich das mit einem SQL-Insert-Statement versucht, aber das hab ich gar nicht hinbekommen und auch kein gutes Beispiel gefunden, weswegen ich auf die obige Variante umgeschwenkt bin.
Ich muss mal versuchen, das mit einer TQuery umzusetzten. Vielleicht klappt das ja auch.

@Perlsau
Zitat:
Der Unterschied zwischen Append und Insert besteht darin, daß bei Append ein Datensatz physikalisch am Ende der Tabelle eingefügt wird, bei Insert jedoch an der physikalischen Stelle des Datensatz-Zeigers (ob darüber oder darunter weiß ich nicht). Für die genannte Funktion spielt das jedoch kenie Rolle.
Vielleicht spielt es ja im Falle von Oracle Blobs doch eine Rolle? Sicherheitshalber versuch ich es auch einfach mal mit Append.
Ralph

Geändert von Jumpy ( 9. Dez 2013 um 13:24 Uhr)
  Mit Zitat antworten Zitat
chuckholdt

Registriert seit: 2. Dez 2007
Ort: Hamburg
15 Beiträge
 
Delphi 2009 Professional
 
#7

AW: PDF in Blob speichern mit seltsamen Effekten

  Alt 9. Dez 2013, 15:49
Bin nicht ganz sicher, wie die Felder arbeiten, aber du gibts den Stream vor dem POST frei, das könnte zu komischen Effekten führen.

Chuck
thomas (chuck) holdt
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#8

AW: PDF in Blob speichern mit seltsamen Effekten

  Alt 9. Dez 2013, 16:57
Bin nicht ganz sicher, wie die Felder arbeiten, aber du gibts den Stream vor dem POST frei, das könnte zu komischen Effekten führen.
Was sind denn "komische Effekte"? Davon hab ich noch nie was bemerkt! Wieso sollte es den Eintrag in der Datenbank jucken, wenn der Stream, der ihn geliefert hatte, abkratzt? Genau so gut könntest du in einer lokalen Procedure Zuweisungen an DB-Felder machen und in einer anderen Procedure dann erst mit Post abschließen:
Delphi-Quellcode:
Procedure Zuweisen;
Var
  Feld1 : Integer;
  Feld2 : String;
  Feld3 : Boolean;
Begin
  Feld1 := Self.Tag;
  Feld2 := Application.ExeName;
  Feld3 := Self.WindowState = wsMaximized;
  MyDataSet.FieldByName('Field1').AsInteger := Feld1;
  MyDataSet.FieldByName('Field2').AsString := Feld2;
  MyDataSet.FieldByName('Field3').AsBoolean := Feld3;
End;

Procedure NeuerEintrag;
Begin
  MyDataSet.Append;
  Zuweisen;
  MyDataSet.Post;
End;
Was meinst du: würde das funktionieren oder ergäbe das eine Fehlermeldung?
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#9

AW: PDF in Blob speichern mit seltsamen Effekten

  Alt 9. Dez 2013, 16:48
@Perlsau
Zitat:
Der Unterschied zwischen Append und Insert besteht darin, daß bei Append ein Datensatz physikalisch am Ende der Tabelle eingefügt wird, bei Insert jedoch an der physikalischen Stelle des Datensatz-Zeigers (ob darüber oder darunter weiß ich nicht). Für die genannte Funktion spielt das jedoch kenie Rolle.
Vielleicht spielt es ja im Falle von Oracle Blobs doch eine Rolle? Sicherheitshalber versuch ich es auch einfach mal mit Append.
Mit Sicherheit werde ich das nicht versuchen. Weißt du auch warum nicht? Ganz einfach: Ich habe gar kein Oracle
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#10

AW: PDF in Blob speichern mit seltsamen Effekten

  Alt 9. Dez 2013, 16:51
Zitat:
Sicherheitshalber versuch ich es auch einfach mal mit Append.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:08 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