Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Dateien in Filetable schreiben und auslesen via ADODB

Begonnen von datekk, September 19, 2016, 09:39:09

⏪ vorheriges - nächstes ⏩

datekk

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
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps
  •  

Wurliwurm

  •  
    Folgende Mitglieder bedankten sich: datekk

datekk

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....


Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps
  •  

datekk

#3
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

Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps
  •  
    Folgende Mitglieder bedankten sich: PhilS