Piet-X Geschrieben 8. März 2012 Teilen Geschrieben 8. März 2012 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
rny Geschrieben 8. März 2012 Teilen Geschrieben 8. März 2012 Eventuell versteht ich das Problem so früh am Morgen noch nicht, aber was spricht gegen ein extra Verzeichnis für die pdfs und einen link darauf in der DB (den du dann ja für deine Oberfläche verarbeiten kannst)? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 8. März 2012 Teilen Geschrieben 8. März 2012 Ich schließe mich im Grunde @rny an, in die Datenbank einen Link (relativer Pfad) setzen und dann mit Hilfe der Anwendung entsprechend die Datei ausliefern, als Alternative ginge auch ein Binary Large Object Feld in die Tabelle aufzunehmen, sollte aber wohl überlegt werden Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Piet-X Geschrieben 8. März 2012 Autor Teilen Geschrieben 8. März 2012 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??? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thelvan Geschrieben 8. März 2012 Teilen Geschrieben 8. März 2012 Du hast dann in der Tabelle einfach ein Varchar Feld mit dem Pfad zur PDF, die Anwendung muss dann diesen Pfad aufrufen um die PDF anzuzeigen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Piet-X Geschrieben 8. März 2012 Autor Teilen Geschrieben 8. März 2012 Ok, dann danke ich schon mal bis hier hin, und bin natürlich noch für weitere Ideen offen... :D:D Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pixie Geschrieben 8. März 2012 Teilen Geschrieben 8. März 2012 Ok, dann danke ich schon mal bis hier hin, und bin natürlich noch für weitere Ideen offen... :D:D Eine weitere Idee wäre, die Datei als Binary abzulegen... Welche Variante die bessere ist, hängt von den Anforderungen an Deine Lösung ab. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Piet-X Geschrieben 8. März 2012 Autor Teilen Geschrieben 8. März 2012 Wie funktioniert es denn genau??? Ich habe die Spalte "Datei" jetzt zu "Binary" umgewandelt, wie kann ich da jetzt die Datei einbinden??? Oder geht das dann auch nur über ein extra Verzeichnis??? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thelvan Geschrieben 8. März 2012 Teilen Geschrieben 8. März 2012 (bearbeitet) 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 8. März 2012 von Thelvan Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thelvan Geschrieben 8. März 2012 Teilen Geschrieben 8. März 2012 Dann sollten die PDFs aber auch in einer eigenen Tabelle sein, da die sonst bei jedem Zugriff auf Kunde/Auftrag/Rechnung oder was auch immer von der Platte gelesen wird, auch wenn sie gar nicht gebraucht wird. (oder?:confused:) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
rny Geschrieben 8. März 2012 Teilen Geschrieben 8. März 2012 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). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
streffin Geschrieben 11. März 2012 Teilen Geschrieben 11. März 2012 (bearbeitet) 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 11. März 2012 von streffin Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Piet-X Geschrieben 12. März 2012 Autor Teilen Geschrieben 12. März 2012 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??? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 12. März 2012 Teilen Geschrieben 12. März 2012 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 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Piet-X Geschrieben 12. März 2012 Autor Teilen Geschrieben 12. März 2012 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;) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 12. März 2012 Teilen Geschrieben 12. März 2012 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;) otn.oracle.com Lediglich eine Registrierung ist nötig. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Piet-X Geschrieben 12. März 2012 Autor Teilen Geschrieben 12. März 2012 Ich hab mir jetz Oracle 11g geladen... nur habe ich keinen benutzernamen bekommen und über die e-mail-adresse funzt es nicht... wo bekomme ich jetz meinen benutzernamen her, sodass ich damit arbeiten kann??? ich bin grad fast am verzweifeln... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 12. März 2012 Teilen Geschrieben 12. März 2012 Was genau hast Du denn gemacht, nachdem Du die Software runtergeladen hast? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Piet-X Geschrieben 12. März 2012 Autor Teilen Geschrieben 12. März 2012 ich habe installiert, mein admin-passwort eingetragen und fertig gestellt... es gab keine abfrage nach benutzernamen oder ähnlichem, also bin ich davon ausgegangen, dass es über die angegebene e-mail läuft, aber fehlanzeige... :( Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 12. März 2012 Teilen Geschrieben 12. März 2012 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Piet-X Geschrieben 12. März 2012 Autor Teilen Geschrieben 12. März 2012 Über den Nutzernamen system ging es jetzt... thx... ich werde euch auch über den weiteren werdegang informieren und bei fragen und problemen auf euch zurück kommen... vielleicht kann ich mich ja auch mal revengieren... ^^ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.