Access 2013 veld (gegevenstype 'bijlage') kopieren naar SQL tabel

Status
Niet open voor verdere reacties.

test1000

Gebruiker
Lid geworden
7 jul 2017
Berichten
277
Hoi,

In Access 2013 heb ik een tabel met een veld [Foto] met als gegevenstype "Bijlage".
(Deze tabel bevat meerdere velden zoals naam, voornaam, straat, huisnummer, ......)

Nu wil ik een record (of records) kopiëren van deze lokale Access tabel naar een SQL 2008 tabel.
Deze SQL tabel bevat dezelfde velden en gegevenstype als de lokale Access tabel.

SQL veld "Foto" heb ik als gegevenstype "Image" of "Varbinary" - Lenght 5000 gekozen.
Maar als ik de toevoeg query uitvoer krijg ik de melding "In de query INSERT TO kan geen opzoekveld voor meerdere waarden worden genomen".

Iemand enig idee op welke manier ik dit probleem kan oplossen ?

Alvast bedankt.
 
Laat je query eens zien, zou ik zeggen.
 
Is een heel simpele toevoeg query.
Geen parameters of dergelijke meer.

Van tabel A naar tabel B.
De velden hebben dezelfde naam.

Je selecteert een veld en Access stelt al mee het gewenste veld.
Nogmaals zonder filters, parameters ed
Als ik toevoeg zonder het veld [Foto] is er geen probleem.
Doet ie het goed.
Maar met veld [Foto] krijg ik de foutmelding.

Als je in Access de tabel open doet zie je een "paperclip" symbool en (0) of (1).
Als je op paperclip klikt krijg je een pop-up waar je bijlage kan openen of verwijderen of toevoegen.
Dus mijn vermoeden is dat deze eigenschap met die van SQL misschien toch anders is.
 
Laatst bewerkt:
Dat klopt,

SQL server kent geen attachments. Wat wij doen om afbeeldingen in onze SQL database op te slaan is ze te converteren naar base 64 formaat en deze ASCII dan in een varchar(max) veld op te slaan. Opletten want als je de connectie via ODBC maakt kan het zijn dat de omgezette varchar te groot is voor ODBC. Voor de behandeling van deze attachment is een apart object aangemaakt.
https://www.base64decode.org/
Mocht je geïnteresseerd zijn, dan kan ik de code wel eens opzoeken.

vriendelijke groeten
Noëlla
 
Dag Noella,

Dat zou zeer fijn zijn.

Ik heb al wat gezocht op internet maar niet onmiddellijk een oplossing kunnen vinden.

De bedoeling is van een gekoppeld lokaal SharePoint tabel met een veld Logo (eigenschap Bijlage) een record te kopiëren naar een SQL tabel met ook veld Logo.
Welke eigenschap ? Image of ...
De gebruiker vult op SharePoint een formulier in. En dat record wordt dan gekopieerd naar de SQL tabel.

https://stackoverflow.com/questions...ess-attachment-data-type-to-file-system-files

https://social.msdn.microsoft.com/F...ment-field-to-sql-server-2012?forum=accessdev
 
Of wat ook mogelijk is dat, via SharePoint wordt de bijlage toegevoegd in de Access tabel, om dan de locatie uit te lezen.
Hiermee bedoel ik de gebruiker selecteert een bestand via 'Verkenner' en het bestand wordt ingevoegd in de tabel.
Als de locatie (folder + bestandsnaam) wordt weggeschreven in de SQL tabel dan is het ook OK.
Misschien dat dit makkelijker is ?
 
In mijn lokale Access tabel moet ik voor het veld [Foto] wel als gegevenstype 'Bijlage' kiezen.
Want deze tabel push ik naar SharePoint.
Bij het opmaken van een SharePoint formulier op basis van deze tabel dan geeft SharePoint automatisch de knop "Bijlage toevoegen".
Als je op deze knop klikt wordt automatisch een 'folder kiezer' weergegeven en kan je naar de juiste folder gaan en het bestand selecteren.
Het bestand wordt de opgeslagen in de 'gekoppelde SharePoint tabel'.
Tot hier gaat alles nog goed.

Nu worden deze gegevens opgeslagen in een SQL tabel.
Bestand er een manier / code om de folder en bestandsnaam uit te lezen van de bijlage of dit bestand ergens op te slaan zodat ik de verwijzing (= folder + bestandsnaam) kan opslaan in de SQL tabel.
 
Deze code werkt :
Code:
Public Sub AttachmentToDisk(strTableName As String, _
        strAttachmentField As String, strPrimaryKeyFieldName As String)

    Dim strFileName As String
    
    Dim db As DAO.Database
    Dim rsParent As DAO.Recordset2
    Dim rsChild As DAO.Recordset2
    Dim fld As DAO.Field2
    
    Dim strPath As String
    
    strPath = SpecialFolderPath("Desktop") & ""
    Set db = CurrentDb
        
    Set rsParent = db.OpenRecordset(strTableName, dbOpenSnapshot)

    With rsParent
        If .RecordCount > 0 Then .MoveFirst
        
        While Not .EOF
            ' our picture is in the field "pics"
            Set rsChild = rsParent(strAttachmentField).Value
        
            If rsChild.RecordCount > 0 Then rsChild.MoveFirst
            
            While Not rsChild.EOF
        
                ' this is the actual image content
                Set fld = rsChild("FileData")
                
                ' create full path and filename
                strFileName = strPath & .Fields(strPrimaryKeyFieldName) & "" & rsChild("FileName")

                ' create directory if it does not exists
                If Len(Dir(strPath & .Fields(strPrimaryKeyFieldName), vbDirectory)) = 0 Then MkDir strPath & .Fields(strPrimaryKeyFieldName)
                ' remove any previous picture from disk it there is any
                If Len(Dir(strFileName)) <> 0 Then Kill strFileName
                
                ' save our picture to disk
                fld.SaveToFile strFileName
                
                ' move to next attachment
                rsChild.MoveNext
            Wend
            
            ' move record pointer of parent
            .MoveNext
        Wend
    
    End With
    
    
    Set fld = Nothing
    Set rsChild = Nothing
    Set rsParent = Nothing
    Set db = Nothing

End Sub

********

Code:
Private Sub Knop0_Click()
Call AttachmentToDisk("Tabel1", "Bijlage", "Id1")
End Sub
 
Laatst bewerkt:
Doe ons een lol en zet je code hierboven in CODE tags...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan