Matthias Bohnstedt: PDF's über ASP Seiten in SQL Datenbanken eingeben & auslesen

Hallo

Erstmal die Situation:

Ich habe eine SQL-Datenbank mit ca. 300 Einträgen.

Eine Sammlung von PDF Dokumenten.
Im Moment sind die Dokumente als Link in der Datenbank gespeichert. Sie sieht also ungefähr so aus:

ID  Name  Link  usw.

Nun hab ich ein Datenbank Feld mit dem Namen "Datei".

Hier soll die PDF Datei selbst IN die Datenbank abgespeichert werden.

Folgende Probleme:
Welcher Datentyp wäre der Passende. Der SQL Server bietet mir dafür nur "Image" an was glaub ich dem LONGBLOB Format entsprechen würde.

Ich habe per Dreamweaver eine Zugriffseite erstellt die auch sehr gut funktioniert. Man kann die Daten einfach und bequem ändern, löschen, usw.

Ich arbeite mit ASP mit VBscript. Im Moment sieht das Formular so aus:

Nun will ich das der Nutzer über einen Button "Durchsuchen" eine Datei, bzw ein Dateipfad in eine Eingabeformular übergeben kann.

Das wäre grundlegend schon sehr hilfreich, nicht nur für dieses Problem.

Der nächste Schritt wäre das Anzeigen lassen der Datei. Ich habe PDF Dateien in der Datenbank gespeichert.
Wenn ich aber einfach

<% =(Recordset1.Fields.Item("Datei").Value)%>

Eingebe passiert gar nichts.(Die Syntax stimmt, ich darf nur keine Sonderzeichen verwenden beim posten hier

In ein Textfeld ausgegeben kommt nur Quaderwelsch raus, was aber auch irgendwie einleuchtend ist da es sich um Binäre Daten handelt

<type="text" name="Datei" value="=(Recordset1.Fields.Item("Datei").Value)>" size="32">

Das hab ich nur gemacht um zu sehen ob überhaupt etwas in der Spalte DATEI steht. Antwort =?93534§$%2$&! irgendwas .

Auch als hyperlink macht der Browser zwar irgendwas aber er Zeigt mir nicht das gespeicherte Dokument an.

<a class="Stil1" onClick="location.href='<%=(Recordset1("Datei"))%>

Wie also kann ich das Dokument aus der Datenbank ordentlich auslesen, es sind alles PDF die im Idealfall als Neues Fenster im IE geöffnet werden sollen.

Also nochmal zusammenfassend:

Welche Formate sind für PDF Dateien in einer SQL-Datenbank am besten?

Wie Kann ich diese Über eine ASP-VBscript Abfrage ausgeben?

Wie kann ich über einen "Durchsuchen" Befehl eben solche PDF an die Datenbank übergeben?

Ich wäre über jeden Hinweis zu einer der Fragen dankbar!

Ps: Zur Hintergrund warum und wofür:
Ich will NICHT über Sinn und Unsinn von größeren Binär Dateien in Datenbanken reden.
Von wegen Performance so:
Mir steht ein sehr leistungsstarker SQL-Server zu Verfügung, es geht um ein Lokales Intranet. Es wird also keine zu viele Abfragen geben.

Es geht vor allem darum von den Ewigen "Toten" Links weg zu kommen und die Dateien Zentral verwalten zu können ohne sich durch 100er verschiedene Ordner zu kämpfen, und das Dateien 3-4 mal auftauchen wie es jetzt der Fall ist.

Und im weiteren darum das auch Leute ohne jede Programm oder Datenbankkenntnise neue PDF Dateien im Intranet einbringen können.
Was ein enorme Arbeitserleichterung wäre.

Vielen Dank im Voraus.

  1. Hoi,

    also, wie du das was du versuchst versuchst, ist etwas abenteuerlich.

    Welche Formate sind für PDF Dateien in einer SQL-Datenbank am besten?

    Wenn du die Files unbedingt in der DB abspeichern musst (wozu ich keinen (wirklich überhaupt keinen) Grund sehe), dann solltest du als Datentyp den einzig Richtigen nehmen: image. (ja, es entspricht einem Blob bis 2 GB Grösse).

    Wie Kann ich diese Über eine ASP-VBscript Abfrage ausgeben?

    Warum willst du Binärdaten in einem Script ausgeben? Das wird (hast du ja selbst schon festgestellt) Kauderwelsch. Du möchtest stattdessen doch lieber das PDF-Dokument selbst ausliefern.

    Wie kann ich über einen "Durchsuchen" Befehl eben solche PDF an die Datenbank übergeben?

    Du solltest mit HTTP Verben (PUT, POST) arbeiten um Dokumente auf dem Server abzulegen. Über <input type="file"> o.s.ä. und das abschicken, landet imho der Binärinhalt der Datei plus ein paar Metadaten (wie name, länge, mimetyp) über die Datei im Request Body. Diesen kannst du serverseitig verarbeiten. ASP mit VBS ist dazu allerdings suboptimal bis gar nicht geeignet.

    Ich wäre über jeden Hinweis zu einer der Fragen dankbar!

    Du möchtest wie kurz danach von dir angemerkt aber diese Hinweise vielleicht gar nicht.

    Ich will NICHT über Sinn und Unsinn von größeren Binär Dateien in Datenbanken reden.
    Von wegen Performance so:
    Mir steht ein sehr leistungsstarker SQL-Server zu Verfügung, es geht um ein Lokales Intranet. Es wird also keine zu viele Abfragen geben.

    Das ganze Unterfangen hinkt imho nicht nur auf einem Bein, sondern auf mindestens 3. Was für einen Use Case versuchst du eigentlich genau umzusetzen ("von den Ewigen "Toten" Links weg zu kommen" ist kein Use Case)? PDF Dokumente kann man für gewöhnlich nicht bearbeiten, ausser mit Acrobat, aber das ist sicher nicht dein Use Case.

    Es geht vor allem darum von den Ewigen "Toten" Links weg zu kommen und die Dateien Zentral verwalten zu können ohne sich durch 100er verschiedene Ordner zu kämpfen, und das Dateien 3-4 mal auftauchen wie es jetzt der Fall ist.

    Auch wenn ich Microsoft SharePoint nicht so wirklich mag. Hier wäre es für dich 10x besser geeignet und 100x leichter anzuwenden. Du brauchst nämlich gar keine Programmlogik mehr für den ganzen Dateischmarren selbst zu schreiben. Und Sharepoint benutzt im Hintergrund selbst MS SQL. Dir stehen mit SharePoint sehr viele Möglichkeiten zur Dateiverwaltung offen, von HTML Ansicht, CheckIn/Out, Exploreransicht mit Direkt-Zugriff für speichern und Lesen bis Suche und Personalisierung.

    Und im weiteren darum das auch Leute ohne jede Programm oder Datenbankkenntnise neue PDF Dateien im Intranet einbringen können.
    Was ein enorme Arbeitserleichterung wäre.

    Also dann spar dir die Arbeit, das selbst zu stricken. Wenn ihr Microsoft-Produkte einsetzt, dann sicher auch Windows 2003, wo SharePoint bereits enthalten ist.

    Cheers, Frank

    1. Erstmal danke für die Antwort

      Das Problem dahinter ist das die Dokumente Zentral verwaltet werden sollen. Also Es geht im Prinzip um ein Dokumentenmanagementsystem.

      Da ich eh schon eine Datenbank erstellt hatte in der Alle Dokumente aufgelistet sind war dies für mich nah liegen sie auch dort für die zentrale Verarbeitung abzulegen.

      Ist es in sharepoint möglich Datenbanken zu importieren? Und daraus auch abfragen zu Formen?

      Zum beispiel ist in der Datenbank ein Feld " nächstes Prüfungsdatum".

      Wenn das Heutige Datum das Prüfdatum überschreitet, will ich ausgaben und Hinweise machen.

      Aber um das Problem mal zu vereinfachen:
      Es ist nicht zwingend erforderlich die Dateien in die Datenbank abzulegen, auf einer geordneten "File" Basis geht das ebensogut.

      Ich wäre aber trotzdem für die Komplett Datenbank basierte Lösung

      Wie kann ich denn die Daten über eine Abfrage ausgeben? Da muss es doch eine nicht allzu schwere Lösung geben, einen Ordentlichen Querry zu machen der mir das PDF im IE öffnet.

      Wieso ist VBscript schlecht zur Ausgabe von Datenbank einträgen, bzw. dessen Änderung über ASP Inputformulare. Das funktioniert eigentlich alles, bis auf das ich nicht weis wie ich Daten übergebe aber input File ist da ein gute Ansatz.

      Es hapert dann nur noch an der Ausgabe.

      Jemand noch eine Idee?

      Ps: Das mit den Sharepoint schau ich mir auf jedenfall an, will nur nicht alles " neu" machen müssen dafür fehlt mir auch die Zeit.

      1. Hi

        Erstmal danke für die Antwort

        büdde, kein Problem.

        Das Problem dahinter ist das die Dokumente Zentral verwaltet werden sollen. Also Es geht im Prinzip um ein Dokumentenmanagementsystem.

        Aha, aber warum selbst bauen und Wochen an unerfüllter Arbeit investieren anstatt ein Out-of-the-box Produkt zu nehmen? Du siehst ja bereits, woran es bei dir scheitert.

        Da ich eh schon eine Datenbank erstellt hatte in der Alle Dokumente aufgelistet sind war dies für mich nah liegen sie auch dort für die zentrale Verarbeitung abzulegen.

        Es ist nie zu spät einen Fehltritt wegzuwerfen, es als Lernkurve zu betrachten und es nochmal von vorn, aber dann richtig zu machen. Also , dass du da schon mal was gebastelt hast, ist nicht wirklich ein Grund, krampfhaft daran festzuhalten.

        Ist es in sharepoint möglich Datenbanken zu importieren? Und daraus auch abfragen zu Formen?
        Zum beispiel ist in der Datenbank ein Feld " nächstes Prüfungsdatum".
        Wenn das Heutige Datum das Prüfdatum überschreitet, will ich ausgaben und Hinweise machen.

        Nun ja, du kannst mithilfe von Add-Ins für SharePoint die bereits von Haus aus zur Verfügung stellen auch einfach Datenbankabfragen durchführen und die Ergebnisse dann in einer Liste anzeigen lassen. Wenn es unbedingt sein muss, kannst du dir auch selbst solch ein Add-In schreiben, was z.b. eMails für überfällige Dokumente versendet, oder einer Liste spezielle Formatierung für überfällige Dokumente hinzufügt.

        Die Add-Ins zu schreiben ist einfacher, da du bereits bestehende Infrastruktur und Schnittstellen benutzen kannst, also dich quasi hauptsächlich mit der eigentlichen Funktion beschäftigen kannst.

        Es ist nicht zwingend erforderlich die Dateien in die Datenbank abzulegen, auf einer geordneten "File" Basis geht das ebensogut.

        Naja, es kann dem User ja relativ egal sein, wie und wo die Dokumente technisch abgelegt sind, soweit er sie einfach benutzen kann. Bei einem designierten Dokumentenmanagement System hast du auf diese Aspekte auch nur marginalen Einfluss.

        Ich wäre aber trotzdem für die Komplett Datenbank basierte Lösung

        Warum, weil du dich dann verwirklich konntest?

        Wie kann ich denn die Daten über eine Abfrage ausgeben? Da muss es doch eine nicht allzu schwere Lösung geben, einen Ordentlichen Querry zu machen der mir das PDF im IE öffnet.

        Du musst die Bytes auslesen und mit dem richtigen MIME-Typ für das PDF an den Client zurückschicken.

        Vielleicht hilft dir dieser Link weiter: http://support.microsoft.com/kb/300108/de

        Wieso ist VBscript schlecht zur Ausgabe von Datenbank einträgen, bzw. dessen Änderung über ASP Inputformulare. Das funktioniert eigentlich alles, bis auf das ich nicht weis wie ich Daten übergebe aber input File ist da ein gute Ansatz.

        <input type="file" ... /> ist fast der einzige Ansatz neben HTTP-PUT.

        Ich habe nicht geschrieben, das VBScript schlecht für die Ausgabe von Datenbankeinträgen ist, sondern dass es nicht sonderlich geeignet ist für dein Vorhaben. Besonders wenn es darum geht, die von <input type="file" ... /> gesendeten Daten aus dem Request Body herauszukratzen.

        Ich halte es für wesentlich einfacher, die Dokumente als PDFs in einem Ordner abzulegen, den du als WebOrdner / Netzwerkresource für die Anwender frei gibst. Dann können sie direkt von da öffnen und da wieder hin speichern. Eine ASP Seite, die durch diesen Ordner schaut und die Dateinamen mit MetaDaten (wie dein Überprüfungsdatum) korrelliert bekommst du dann viel einfacher hin, du brauchst dich nämlich nicht mehr um den I/O der Dokumente kümmern.

        Es hapert dann nur noch an der Ausgabe.

        Nicht eigentlich auch (bereits) an der Eingabe?

        Merk dir bitte für die Zukunft: Erst nach existierenden Produkten schauen und gegen deine Anforderungen abwägen, dann darüber nachdenken, welchen Vorteil eine Selbsentwicklung _effektiv_ bringt. Gerade für Dokumentenmanagement gibt es so viel Software auf der Welt.

        Ciao, Frank

        1. Na, ich kann mein Ego auch gut zurückstellen wenn es darum geht Lösungen zu entwickeln.
          Der Sharepoint Services läuft leider nicht einwandfrei, da er den selben Port wie Homepage verwendet, wenn ich den Port ändere, läuft das Intranet nichtmehr.

          Ich müsste also alle absoluten Pfade ändern, was nochmal ein relativ großer Aufwand wäre, und ich steh schlichtweg unter Zeitdruck.
          ( Abgabe Termin ist nächste Woche *g*)

          Also Probleme kann es überall geben, und ich wollte nicht zwingend mich in neue Programme und Strukturen einarbeiten müssen.

          Du hast aber völlig recht in deinen Ausführungen.
          Von Anfang an das Konzept gut überdenken bringt sehr viel mehr, und erspart viel Arbeit. Was will ich - und wie mach ich das am einfachsten? Weil gerade in der EDV führen viel zu viele Wege nach Rom. Nur wie so oft ist es so das mögliche Probleme bei einer Lösung einen erst auffallen wenn es so weit ist.

          Ich hab mir das mit der Filebase in der Datenbank einfacher vorgestellt, und ich bin mir auch sicher das es dafür eine gute Lösung gibt.

          Das mit der selbst erstellten Datenbank ist einfach individueller wenn du mich fragst. Ich weis genau was wo wie steht, wie die Tabellen verknüpft sind, wie die Abfragen auszusehen haben. Das erleichtert die Wartung wenn du mich fragst ungemein. Ich mag auch keine CMS´- Systeme wenn man da wirklich speziele Lösungen braucht die nicht jeder durchschnitts User hat wird es meistens einfach anstrengend dann in solchen Systemen zu arbeiten.

          Aber meine Meinung. Und ich beherzige dein Vorschlag, ich will demnächst meine Private Homepage vom CMS System umstellen auf Komplett selbst die Dinge zu bearbeiten. Ich wollte einfach Scripte einbauen, was nicht ging da ich nicht wusste wie genau die Php, Scripte und Variabelen in sich greifen. Wahrscheinlich aus dieser Erfahrung heraus wollte ich von Anfang das Ding selbst bauen.

          Aber um dich zu behruigen: Die Datenbank steht und die Abfragen laufen.

          Hab Alle Dokumente in eine Filebase gepackt und verlinkt die nur noch per Datenbank Querry.
          Das heißt es Funktioniert jetzt *freu*.

          Ist diese Sharepoint Service Problemlos unter LinuxServern zu betreiben, wohl eher nicht bis gar nicht oder?