2017-09-02 1 views
3

Ich suche oft in Google, SO, und ich kann nichts über die Arbeit mit Anhang über Delphi finden, also entscheide ich mich, diese Frage zu schreiben.Delphi und Anhang Dateien in MS Access-Datenbank

Ich habe eine Tabelle in .accdb Datenbank Dateien mit diesen Feldern genannt:

IDFile PK AutoIncField, 
FileName WideStringField, 
FilesAttached WideMemoFiled. 

enter image description here

Wie kann ich Speichern/Laden von Dateien zu/von Befestigungsfelder delphi mit?

Attach files and graphics to the records in your database

Das Problem hier ist, den Datentyp von FilesAttached in delphi TWideMemoField, wenn ich ShowMessage(FDTable1FilesAttached.Value); es nur den Namen der Anlage geben schreiben.

Ich weiß nicht, wie Sie Dateien in/aus diesem Feld mit Delphi einfügen/speichern.

+0

@DownVoter Wie ich schon sagte, nicht nur dv und verlassen, sagen Sie uns, was ist los mit der Frage, was ist Ihre Sicht, auch die Besucher können diese Kommentare hilfreich finden und ihre Qs beter machen. – Sami

+0

@MartynA Sie meinen 'TBlobField (FDTable1FilesAttached)'? – Sami

+1

Attachmentdatentyp ist eine Struktur, nicht nur ein Dateistream (er kann mehrere Dateien enthalten.). Es gibt keine offizielle Beschreibung dieser Struktur und unterliegt Änderungen, daher würde ich diesen Typ einfach vermeiden. P.S. Versuchen Sie nicht, den vorgeschlagenen Weg über den Feldzugriff zu typisieren. – Victoria

Antwort

1

Es schien nicht so schwer zu finden VBA/C# Beispiele für die Arbeit mit. ACCDB Anhang Felder, die relativ leicht in Delphi übersetzen sollte. Es stellte sich jedoch heraus, dass es schwieriger als gedacht war, etwas zu finden, das a) nicht verstanden hat, was Attachment-Felder tatsächlich sind und b) tatsächlich funktioniert. Gehen Sie zum Abschnitt update weiter unten.

Zum Beispiel

accdb googeln erstellen Befestigung in vba

zahlreiche Hits einschließlich dieser

http://sourcedaddy.com/ms-access/working-with-attachment-fields.html

gibt, die Sie als Ausgangspunkt versuchen könnten. Es verwendet MS DAO-Objekte und enthält einfachen Code zum Speichern von Dateien in Anhangsfeldern und für den Zugriff darauf. Sie müßten eine Delphi-Wrapper-Einheit für die DAO-Typenbibliothek erstellen, wenn Sie nicht bereits eine haben, die IDE mit Import Type Library

Wenn Sie etwas ADO-basierte bevorzugen würden, könnten Sie einen Blick auf

nehmen

https://www.codeproject.com/Questions/843001/Handling-fields-of-Attachment-type-in-MS-Access-us

aktualisiert Siehe die Funktion OpenFirstAttachmentAsTempFile in dem Beitrag von "Espe" (date = 2012.04.11 07.18) in diesem Thread

https://access-programmers.co.uk/forums/showthread.php?t=224112&page=2

zeigt einen scheinbar erfolgreichen Versuch, eine Datei aus einem Feld attachment zu extrahieren (der Thread enthält auch mehrere andere Versuche, diese Funktion zu codieren).

Hinweis insbesondere auf diese Linie

Set rstChild = rstCurrent.Fields(strFieldName).Value ' the .Value for a complex field returns the underlying recordset 

was impliziert, dass die Value des Befestigungsfeldes eine Datensatz zurückkehren kann, die die angehängte Datei (en) enthält.

Vermutlich würde eine aktuelle Version der DAO-Typbibliothek in Delphi importieren lassen ein Delphi-App, das Gleiche zu tun, und dann könnte man die rstChild Cord-Reverse-Engineering zu sehen, wie dieses Feld im Code zu füllen. Das habe ich aber noch nicht getan.

+0

Sie haben Recht. Ohne das Reverse Engineering der Dateitypstruktur 'Attachment' können Sie keine Zeile in eine solche Tabelle einfügen. Sie können die Daten der Anhangsdatei durch Zugriff auf diese Spaltenfelder lesen, wie zum Beispiel 'SELECT FilesAttached.FileData FROM Files' und Sie erhalten ein Blob-Feld mit den Dateidaten (das Tupel wird in mehrere geteilt, wenn mehrere Dateien angehängt sind dieses Feld). Wie man Daten in eine solche Tabelle mit einer ODBC-Client-Bibliothek einfügt, ist ein Rätsel. – Victoria

+0

@Victoria: Ja, gut. Ich war amüsiert über den Kommentar im ADO-Artikel '// Tue etwas mit Daten ...' - macht es so einfach klingen; =) – MartynA

+0

Nun, es wird intern blob sein, ich wette. Aber strukturiert, und solange wir keine Definition dieser Struktur haben, können wir nur raten. Ich habe es ohne Erfolg versucht. – Victoria

Verwandte Themen