collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 61
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 4
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13808
  • stats Beiträge insgesamt: 64233
  • stats Themen insgesamt: 8686
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: Dateien in Filetable schreiben und auslesen via ADODB  (Gelesen 1288 mal)

Offline datekk

  • Access-Meister
  • ***
  • Beiträge: 678
Dateien in Filetable schreiben und auslesen via ADODB
« am: September 19, 2016, 09:39:09 »
Hi,

hier gibt es ja einige Experten rund um das Thema ADODB. Ich habe einen SQL Server, welcher meiner Access Datenbank als Backend dient. Gern möchte ich in dieser SQL Datenbank Dateien ablegen (PDFs, Bilder etc.). Diese Dateien möchte ich per Klick dann angezeigt bekommen, bzw. soll es auch möglich sein, dass Access diese z.B. als Formularhintergrund nutzen kann. SQL Server und Access Client sind auf zwei unterschiedlichen Rechnern. Zugriff auf das SQL Backend erfolgt via Internet. Die Tabellen sind verknüpft bzw. erfolgt der Zugriff direkt über ADODB.

Ich habe hier https://www.youtube.com/watch?v=cjjalLenWjMein Video gefunden, welches wahrscheinlich ziemlich gut viele Dinge diesbezüglich erklärt, allerdings ist die Qualität schlecht, es ist englisch und mir im Moment noch etwas zu hoch.

Wer von Euch kann mir diesbezüglich etwas behilflich sein und mir einige Grundzüge erklären? Eine Filetable habe ich im SQL Server bereits erstellt.

LG
datekk
« Letzte Änderung: September 19, 2016, 09:43:20 von datekk »
 

Offline Wurliwurm

  • Access-Profi
  • **
  • Beiträge: 364
Re: Dateien in Filetable schreiben und auslesen via ADODB
« Antwort #1 am: September 19, 2016, 09:45:23 »
 
Folgende Mitglieder bedankten sich: datekk

Offline datekk

  • Access-Meister
  • ***
  • Beiträge: 678
Re: Dateien in Filetable schreiben und auslesen via ADODB
« Antwort #2 am: September 19, 2016, 10:01:48 »
Vielen Dank Wurliwurm... Meine Anfrage bezog sich nicht auf die Ablage einer Grafik in einer Binary/Bilder Spalte einer Tabelle, sondern um die Ablage einer Datei in einer SQL Filetable Tabelle. Die Art der abzulegenden Dateien sollen daher unterschiedlich sein .. also JPG, Gif, Word, PDF....


 

Offline datekk

  • Access-Meister
  • ***
  • Beiträge: 678
Re: Dateien in Filetable schreiben und auslesen via ADODB
« Antwort #3 am: September 19, 2016, 13:23:31 »
Ich habs... es ist eigenltlich genau der gleiche Aufbau wie im Link von Wurliwurm, nur dass die Select Ansprache sich direkt an die Filetable richtet. Dann sind noch die  Spaltennamen anzupassen. Der Datenstream geht dann z.B. an das Feld "file_stream", der Dateiname an das Feld "Name".

Die Filetable legt als ID eine GUID ID an (z.B. 0AEC77A4-587E-E611-8DC1-1C6F6586498E). Diese kann man dann mit den entsprechenden Datensätzen anderer Tabellen verknüpfen. Das muss ich mir noch anschauen wie das geht, aber es sollte kein großes Problem sein.

Hier die Listings, die man natürlich individuell anpassen muss:

Datei schreiben:
Sub AddFile(strFileName As String, strFilePath As String)
    Dim con As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim objStream As New ADODB.Stream
   
    'create the stream
    objStream.Type = adTypeBinary
    objStream.Open
    objStream.LoadFromFile strFilePath & "\" & strFileName
   
    con.Open "PROVIDER=SQLOLEDB.1;Server=**********;DATABASE=*******;UID=*******;PWD=***********"
    rs.Open "Select * from dbo.tblFiletable", con, adOpenDynamic, adLockOptimistic
    rs.AddNew
    rs!Name = strFileName
    rs!file_stream = objStream.Read
    rs.Update
    rs.Close
    objStream.Close
    con.Close
End Sub


Datei aus Filetable holen und auf Festplatte speichern (Selektion des Files erfolgt hier über den Filename):

Sub ReadFile(strFileName As String, strFilePath As String)
    Dim con As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim objStream As New ADODB.Stream
   
    Debug.Print strFilePath & "\" & strFileName
   
    'create the stream
    objStream.Type = adTypeBinary
    objStream.Open
   
    ccon.Open "PROVIDER=SQLOLEDB.1;Server=**********;DATABASE=*******;UID=*******;PWD=***********"
    rs.Open "Select * from dbo.tblFiletable where name = '" & strFileName & "'", con, adOpenDynamic, adLockOptimistic
    If Not rs.EOF Then
        objStream.Write rs!file_stream
        objStream.SaveToFile strFilePath & "\" & strFileName, adSaveCreateOverWrite
        objStream.Close
    End If
    rs.Close
    con.Close

Hier das Klassenmodul als Beispiel mit zwei Schaltflächen

Option Compare Database
Option Explicit

Private Sub Befehl0_Click() 'Daten in Filetable speichern

    AddFile "test2.pdf", "C:\Users\Testuser"
   
End Sub



Private Sub Befehl1_Click() 'Datei aus Filetable holen und abspeichern

    ReadFile "test.pdf", "C:\Users\Testuser"

End Sub

« Letzte Änderung: September 19, 2016, 13:30:28 von datekk »
 
Folgende Mitglieder bedankten sich: PhilS