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
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…
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.
Ok, hat sich erledigt, hab´s hinbekommen
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