Zum Inhalt springen

PDF-Dokument in Datenbank einbinden


Piet-X

Empfohlene Beiträge

Bevor ich auf den Punkt komme, erstmal an alle Frauen einen schönen Frauentag... ;););)

So, jetz meine Frage:

Wie kann ich in einer SQL-Datenbank einem Eintrag eine *.pdf-Datei anhängen???

Ziel:

Ich habe in einer grafischen Oberfläche (hinter der eine Datenbank hinterlegt ist) eine Suchmaske, über die ich auf die Datenbank zugreifen kann, und sobald die Suchmaske den Wert gefunden hat, kann ich auf den Link klicken und die Datei öffnet sich...

Ich hoffe, ihr könnt mir da weiterhelfen...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also verstehe ich das richtig:

Ich soll eine Normale Datenbank mit verlinkung auf eine weitere Datenbank (bzw. ein Verzeichnis) erstellen, in der die pdf-Dateien hinterlegt sind???

Wenn ich das richtig verstanden habe, wie verlinke ich das dann???

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die PDF soll wahrscheinlich durch irgendein Programm gespeichert werden, oder? Was benutzt du denn dafür?

Und welches DBMS?

Mit MSSQL und ssms sollte das so gehen:

INSERT INTO Tabelle(Blobfeld) VALUES

(

SELECT * FROM OPENROWSET (BULK 'C:\Test.Pdf', SINGLE_BLOB)

)

Bearbeitet von Thelvan
Link zu diesem Kommentar
Auf anderen Seiten teilen

Wär schon praktisch ja, allerdings sollte man die Vorteile/Nachteile von BLOBs in der DB eh gut abwägen, vor allem Perfomance und Backup-Möglichkeiten leiden da teilweise sehr stark (hängt natürlich von Verwendung/Größe der Datenbank ab).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Entweder ich habs überlesen, oder die wichtigeste information fehlt (mal wieder)... das DBMS mit dem du das umsetzen willst.

Unter MSSQL gäbe es den VARBINARY datentyp, der wäre hier mein Mittel der Wahl. Du solltest dir auch FILESTREAM ansehen. Vereinfacht und stark gekürzt, per Filestream kannst du einrichten, dass die Binärdaten quasi direkt ins Filesystem geschrieben werden, ohne deine Datenbank Filegroups aufzublasen. Du kannst auch getrennt steuern, ob das mit in die DB Backups fließt, oder nicht.

Ich würd nur unter zwingenden Umständen den relativen Pfad zu den dateien in eine spalte schreiben. Da musst du dann wieder dafür sorgen, dass jeder die Rechte auf dem Fileserver hat, dass niemand den es nichts angeht die rechte hat, etc etc. Ist zwar einfach und schnell gemacht, wär für mich aber nicht sauber, und nur ne quick and dirty Lösung des Problems.

Davon abgesehen kannst du die Rechteverwaltung viel schöner im SQL Server betreiben, da du die Tabelle in einer Stoired Proc wrappen kannst, in der du dann die Rechte auf einzelne Dokumente managen kannst (dem Application User rechte auf die SP geben, aber nicht auf die Tabelle drunter).

Dann gibst du ausser den Systemseitigen accounts für die Datenbank, die Backups etc, niemandem Rechte auf den Ordner im Filesystem wo die Dokumente liegen, und voila. Zugriff nur noch über das Backend, Rechtevergabe steuerbar bis runter auf ein einzelnes Dokument.

Dann kannst noch Foreign Keys benutzen, damit dir keiner nen File löscht das noch gebraucht wird, kannst Constraints drauf setzen was die Dateigröße angeht, und andere so hübsche Sachen. Was will man mehr ?

//edit :

Wenn das eine "Suche" mit Ergebnis Link zum File sein soll, würd ich an deiner Stelle auch mal über eine Volltextsuche nachdenken.

Gruß

Sven

Bearbeitet von streffin
Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich habe mir vorerst ein "Vorabmodell" über MySQL gebaut, aber letzten Endes wird es eine Oracle DB...

Ich hoffe zumindest, dass es dann keine Schwierigkeiten beim importieren der Daten gibt... :inno:

Also eure Vorschläge hören sich soweit ziemlich gut und einfach an, jetz is nur die Frage, für welche Variante ich mich entscheide, aber ich glaube die Blob-Variante wäre zunächst die Einfachere, oder???

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich habe mir vorerst ein "Vorabmodell" über MySQL gebaut, aber letzten Endes wird es eine Oracle DB...

Also wenn es um Oracle geht, kann ichja auch mal meinen Senf dazu geben :D

1. Die Uraltaussagen, dass Dokumente in der Datenbank die Performance verschlechtern ist, was Oracle betrifft, schlicht und ergreifend falsch.

Oracle speichert BLOB bzw. CLOB Daten nicht in der Tabelle selbst (bzw. maximal 4000 Byte) sondern legt dort nur einen sog. LOB Locator ab. Dieser ist ein Zeiger, der dann auf die ausgelagerten Daten verweißt.

Ab Oracle 11 gibt es sog. Secure Files, die den BLOB Datentyp ersetzen und einen Zugriff auf die Daten ermöglichen, der praktisch genauso schnell ist, als wenn das Dokument direkt auf der Platte liegt.

2. Der Vorschlag in der DB einen Link zu speichern ist mindestens genaus falsch, denn damit kaufst Du dir direkt folgende Probleme ein:

* Keine Transaktionssicherheit

* Kein einheitliches Backup/Recovery, du musst immer auch das Filesystem mitsichern und mit der DB im Rücksicherungsfall konsistent halten.

* Kein indizierter Zugriff auf die Daten. Oracle indiziert LOBs, und ermöglicht so einen sehr schnellen Zugriff auf z.B. das 1000000 Millionste Byte eines 3GB Dokumentes

* Volltextindizierung der Dokumente durch Oracle Text ist nicht möglich

* Die weiteren, schon von streffin genannten Punkte

Es gibt einige Besonderheiten, die man im Umgang mit BLOBs/SecureFiles wissen muss. Um das Lesen der Doku kommst Du also nicht herum.

Warum baust Du deine Testversion nicht gleich mit Oracle? Du kannst die verwendete Version herunterladen bzw. die Oracle Express verwenden.

Dim

Link zu diesem Kommentar
Auf anderen Seiten teilen

Im Moment habe ich noch keinen Zugriff auf Oracle, der wird mir erst in den nächsten Tagen freigeschaltet, daher war meine Idee, bereits im Vorfeld die Datenbank zu erproben, ob sie mit meinem Quell-Code harmoniert...

Aber wenn du sagst, dass es Oracle zum Download gibt (hoffe doch kostenfrei, da ich momentan kein Geld für Sonderausgaben habe), dann werde ich das einfach mal in Angriff nehmen und es direkt über Oracle bauen und dann einfach nur noch importieren... :D:D;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Aber wenn du sagst, dass es Oracle zum Download gibt (hoffe doch kostenfrei, da ich momentan kein Geld für Sonderausgaben habe), dann werde ich das einfach mal in Angriff nehmen und es direkt über Oracle bauen und dann einfach nur noch importieren... :D:D;)

otn.oracle.com Lediglich eine Registrierung ist nötig.

Dim

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Emailadresse hat damit gar nichts zu tun. Die DB Software die du runtergeladen hast, ist 1:1 die, die Du auch bekommst, wenn Du sie kaufst.

Die Standarduser sind system und sys. Mit denen kannst Du dich via sqldeveloper anmelden und mittels create user (vgl. auch die Oracle Doku) dann deine benötigten User anlegen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...