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=cjjalLenWjM (https://www.youtube.com/watch?v=cjjalLenWjM)ein 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
Schon gegoogelt?
https://support.microsoft.com/de-de/kb/258038 (https://support.microsoft.com/de-de/kb/258038)
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....
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