Kommunikation VBA via ODBC mit Postgres Server

Guten Morgen zusammen,

bin auf der Suche nach einer Lösung auf dieses Thema gestoßen:
VBA via ODBC zu PostgreSQL

anon93149028 schrieb hier:

ich bin dabei eine bestehende Access Datenbanken in postgres einzufügen. Dafür habe ich mir in VBA ein Programm geschrieben, dass via ODBC mit dem postgres Serverprogramm kommuniziert. Das funktioniert.

Der Beitrag ist schon 10 Jahre alt. Keine Ahnung was sich da so getan hat in der Zwischenzeit. Aber ich suche aktuell nach genau dieser Möglichkeit Binär-Dateien von einem lokalen Verzeichnis direkt in die PostgreSQL zu bringen oder zumindest auf den Server zu kopieren, auf dem Postgres läuft.

Aktuell kopiere ich die Dateien manuell mit WinSCP auf den Server und gehe dann von VBA aus mit einem SQL-INSERT (oder UPDATE) Befehl weiter und lade meine PDF, JPG usw. in ein bytea-Feld hoch:

cnn.execute "INSERT INTO schema.tabelle (textspalte, byteaspalte) VALUES('DateiString', pg_read_binary_file('/ServerPfad/Datei.jpg')::bytea)"

Kann mir bitte jemand helfen, eben jenen manuellen Kopierschritt vom lokalen Verzeichnis zu Postgres hin per VBA zu automatisieren?

Für Eure Unterstützung bedanke ich mich schon im Voraus recht herzlich :slight_smile:

siehe auch Dateiimport mit bytea | Datenbank-Forum , vermutlich bist Du das, oder?

Letztendlich benötigst Du in VBA eine Variable, die den BYTEA-Wert erst einmal aufnimmt, und diesen verwendest Du dann. Ich nix VBA, aber google einfach mal. Man muß da wohl einen Verbindungsparameter setzen, der Rest ist offenbar nicht allzu schwer…

siehe auch Dateiimport mit bytea | Datenbank-Forum , vermutlich bist Du das, oder?

Ja :wink:

Ich nix VBA, aber google einfach mal.

So bin ich nun hier gelandet.

Man muß da wohl einen Verbindungsparameter setzen, der Rest ist offenbar nicht allzu schwer…

Da ich einerseits etwas ratlos bin, sonst würde ich nicht fragen, andererseits fleißig bin, bin ich u. a. auch hier gelandet und teste das gerade bzw. versuche es umzusetzen.

Mal schauen, wie weit ich komme.

Ok, hat sich erledigt, hab´s hinbekommen :slight_smile:
Hier die Kurzversion, falls mal einer danach sucht. Entsprang zwar nicht wirklich meiner Feder und beruht auf den o. g. Links, aber ich finde es in dieser Kurzversion etwas nachvollziehbarer. Funktionen usw. kann sich dann ja jeder selbst draus basteln.

Sub ImportTest() 
    Dim strFile As String 
    Dim ByteArray() As Byte 
    Dim F As Integer 
    F = FreeFile 
    strFile = "C:\MeinPfad\MeineDatei.jpg" 
    Open strFile For Binary As #F 
        ReDim ByteArray(LOF(F)) 
        Get #F, , ByteArray() 
    Close #F 
    With rcs 
        .Open ("SELECT * FROM schema.tabelle"), cnn, adOpenDynamic, adLockOptimistic 
        .AddNew 
        .Fields("jpgname").Value = "MeineDatei.png" 
        .Fields("jpgpic").AppendChunk ByteArray() 
        .Update 
        .Close 
        Set rcs = Nothing 
    End With 
    Erase ByteArray 
End Sub