Ergebnis 1 bis 7 von 7

Thema: PSL-Relation mit VBA in Excel reinladen

  1. #1
    eremit ist offline Benutzer
    Registriert seit
    19.02.2007
    Ort
    Braunschweig
    Beiträge
    49

    Standard PSL-Relation mit VBA in Excel reinladen

    Guten Morgen,

    Ich möchte eine komplette PostgreSQL-Relation in eine Excel-Tabelle kopieren. Zuerst wird dazu eine Verbindung zwischen Rechner und Server aufgebaut:

    Code:
    plink.exe <nutzername>@<ip-adresse> -P 2222 -pw <passwort> -v -ssh -L 5432:localhost:5432
    Der eigentliche Import geschieht mit einem VBA-Skript. In der Vergangenheit nahm ich dazu ein Makro auf, modifizierte dieses leicht - und es lief! So sah es aus:

    Code:
    Sub tdb_ImportRelation(s As String)
    ' One relation called s is imported from databank
    ' fields of type 'text' lead to ODBC-errors and can therefore not be imported
    
    [...]
        With ActiveSheet.QueryTables.Add(Connection:= _
            Array(Array("ODBC;DRIVER={PostgreSQL ANSI};DATABASE=<db-name>;SERVER=localhost;PORT=5432;PASSWORD=xxxxxx;UID=<nutzer-name>;;SSLmode=disable;ReadOnly=1;Protocol=7.4;FakeOidI")), Destination:=Range("A1"))
            .CommandText = Array("SELECT * FROM ""public""." & Chr(34) & s & Chr(34))
            .Name = "qt_1"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = True
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
            .Refresh BackgroundQuery:=False
        End With
    [...]    
        ' Bei jeder Abfrage wird eine QueryTable als benannter Bereich im Register Clipboard abgelegt.
        ' Wenn man die nicht löscht, gibts davon irgendwann hunderte und es können dubiose ODBC-Fehler auftreten.
        ActiveSheet.QueryTables(1).Delete
    End Sub
    Nach der Umstellung auf Office 2010 in unserer Firma :-( funktionierte dies nicht mehr. Es kam Laufzeitfehler '1004': Allgemeiner ODBC-Fehler.

    Mein erster Gedanke war, dass durch das Aufspielen von Office 2010 der Treiber entfernt worden sein könnte. Den ursprünglichen Treiber hatte ich mir als zip "psqlodbc-08_02_0400.zip" runtergeladen und installiert. Der aktuell installierte Treiber stammt aus einem zip namens psqlodbc_09_00_0200-x64.zip, direkt von der PostgreSQL-Homepage. Die Treiberdatei heißt psqlodbc_x64.msi. Leider ging es dann immer noch nicht.

    Daraufhin habe ich mir den alten Code angeschaut und gedacht, dass Excel vielleicht das eine oder andere überflüssige Zeug da rein geschrieben hatte. Da ich denke, dass einfacher Code tendenziell auch weniger Fehler enthält, habe ich ihn folgendermaßen umgeschrieben:

    Code:
    Sub tdb_ImportRelation(s As String)
    ' One relation called s is imported from databank
    ' fields of type 'text' lead to ODBC-errors and can therefore not be imported
    
    Dim ConnectionString As String
    Dim SQLString As String
    Dim rng As Range
    
    [...]    ConnectionString = "ODBC;DATABASE=<db-name>;SERVER=localhost;PORT=5432;UID=<nutzername>;PASSWORD=xxxxxx;DRIVER={PostgreSQL ANSI};PROTOCOL=7.4"
        SQLString = "SELECT * FROM ""public""." & Chr(34) & s & Chr(34)
        Set rng = ActiveSheet.Range("A1")
    
        ' With ActiveSheet.QueryTables.Add(Connection:=Array(Array(ConnectionString), rng, SQLString))
        With ActiveSheet.QueryTables.Add(ConnectionString, rng, SQLString)
            .Name = "qt_1"
            .Refresh
        End With
    
    [...]    
        ' Bei jeder Abfrage wird eine QueryTable als benannter Bereich im Register Clipboard abgelegt.
        ' Wenn man die nicht löscht, gibts davon irgendwann hunderte und es können dubiose ODBC-Fehler auftreten.
        ActiveSheet.QueryTables(1).Delete
    End Sub
    Leider geht das noch immer nicht.

    Weitere Informationen:
    - PostgreSQL 8.3.8
    - Mein Rechner = Windows 7 64 bit, 8GB Arbeitsspeicher, Office 2010.

    Für Tips wäre ich dankbar.

    Eremit

  2. #2
    eremit ist offline Benutzer
    Registriert seit
    19.02.2007
    Ort
    Braunschweig
    Beiträge
    49

    Standard

    Hat denn niemand eine Idee? :-(
    Fehlen noch Informationen von mir?
    Eremit

  3. #3
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von eremit Beitrag anzeigen
    Hat denn niemand eine Idee? :-(
    Fehlen noch Informationen von mir?
    Eremit
    - vielleicht mal beim Hersteller der neuen Office-Version nachfragen?
    - einfach CSV nutzen?

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  4. #4
    eremit ist offline Benutzer
    Registriert seit
    19.02.2007
    Ort
    Braunschweig
    Beiträge
    49

    Standard

    Leider kann ich mir nicht aussuchen, ob und wann in unserer Firma diese Updates eingespielt werden. Die Hilfefunktionen von Office helfen (wie meistens) nicht weiter.
    Der Import nach Excel geschieht nicht ohne Grund. Was meinst Du mit "einfach CSV nutzen"?
    In der Zwischenzeit habe ich herausgefunden, dass die ODBC-Verbindung in dem vor mir oben angegebenen verkürzten Code unter Windows XP (aber mit Office 2010) funktioniert - weiß der Himmel warum. Aber ich wäre nicht der Erste, der sich Altrechner ins Büro stellt, um den Udates unserer IT zu entkommen... Der Trend geht bei uns klar zum Zweit- oder gar Drittrechner ;-)
    Eremit

  5. #5
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von eremit Beitrag anzeigen
    Leider kann ich mir nicht aussuchen, ob und wann in unserer Firma diese Updates eingespielt werden. Die Hilfefunktionen von Office helfen (wie meistens) nicht weiter.
    Der Import nach Excel geschieht nicht ohne Grund. Was meinst Du mit "einfach CSV nutzen"?
    Suchergebnisse für

    In der Zwischenzeit habe ich herausgefunden, dass die ODBC-Verbindung in dem vor mir oben angegebenen verkürzten Code unter Windows XP (aber mit Office 2010) funktioniert - weiß der Himmel warum. Aber ich wäre nicht der Erste, der sich Altrechner ins Büro stellt, um den Udates unserer IT zu entkommen... Der Trend geht bei uns klar zum Zweit- oder gar Drittrechner ;-)
    Eremit
    Dann macht ihr tendenziell was falsch...

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  6. #6
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    794

    Standard

    Zitat Zitat von eremit Beitrag anzeigen
    Der Trend geht bei uns klar zum Zweit- oder gar Drittrechner ;-)
    Eremit
    Wir nutzen dazu Virtuelle Maschinen . Erleichtert auch den Umstieg auf eine neue Maschine...

    CU Uwe
    Have a lot of fun!

  7. #7
    eremit ist offline Benutzer
    Registriert seit
    19.02.2007
    Ort
    Braunschweig
    Beiträge
    49

    Beitrag

    Um diesen Thread abzuschließen: ich kriege diese Abfrage nur mit Windows XP und Office <=2007 zum Laufen. Hier nochmal der Code:

    Code:
    Sub tdb_ImportRelation(s As String)
    ' One relation called s is imported from databank
    ' fields of type 'text' lead to ODBC-errors and can therefore not be imported
    
    Dim ConnectionString As String
    Dim SQLString As String
    Dim ZellAdresse As String
    Dim rng As Range
    
        ' First delete present contents. Important, because, when data sets were deleted in the databank
        ' one or more lines at the end of each list remain, leading to seemingly duplicate IDs.
        ' In this example data are imported into a sheet called 'Clipboard' and in thereafter are
        ' moved to different locations within the file
        tdb_SelectClipboard
        tdb_ClearSheet
    
        ' Get data from the databank
        ConnectionString = "ODBC;DATABASE=<dbname>;SERVER=localhost;PORT=<portnumber>;UID=<username>;PASSWORD=xxyyzz;DRIVER={PostgreSQL ANSI};PROTOCOL=7.4"
        SQLString = "SELECT * FROM ""public""." & Chr(34) & s & Chr(34)
        Set rng = ActiveSheet.Range("A1")
        
        With ActiveSheet.QueryTables.Add(ConnectionString, rng, SQLString)
            .RefreshStyle = xlInsertDeleteCells
            .PreserveFormatting = True
            ' Nur mit der folgenden Zeile gelingt später das Löschen der QueryTables ...
            .Refresh BackgroundQuery:=False
            ' ... und mit dieser nicht :-)
            '.Refresh
        End With
    
        ' Copy imported data from register clipboard to the other registers
        Range("A1").Select
        tdb_SelectWrittenRange
        Selection.Copy
        Application.Goto Reference:="import_" & s
        tdb_PasteValues
        
    End Sub
    Um die query tables zu löschen, empfiehlt sich am Ende der Prozedur der folgende Code:

    Code:
    Sub tdb_DeleteAllQueries()
    
         Dim qt As QueryTable
         Dim WSh As Worksheet
    
         For Each WSh In ThisWorkbook.Worksheets
              For Each qt In WSh.QueryTables
                   qt.Delete
              Next qt
         Next WSh
    
    End Sub
    Trotzdem vielen Dank für alle Antworten.

    Eremit

Ähnliche Themen

  1. Frage Auf SQL DB schreiben via Excel (ODBC)
    Von Kev im Forum SQL
    Antworten: 5
    Letzter Beitrag: 30.09.2011, 08:39
  2. SQL statt Excel
    Von karl_ha im Forum SQL
    Antworten: 2
    Letzter Beitrag: 18.06.2009, 15:13
  3. Frage mit SQL union all excel Blätter zusammenfassen
    Von hannes1011 im Forum SQL
    Antworten: 2
    Letzter Beitrag: 13.11.2008, 20:15
  4. Excel-Tabellen in Datenbank übertragen
    Von Rapthor im Forum Programmierung
    Antworten: 2
    Letzter Beitrag: 16.03.2006, 09:18
  5. ODBC Verbindung zu MS EXCEL XP
    Von dominik.woehr im Forum externe Schnittstellen
    Antworten: 1
    Letzter Beitrag: 15.03.2006, 11:24

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum