Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 63745 Skopiuj do schowka Aktualizacja ścieżki dostępu do źródła SQL
Autor Wiadomość
z-kes 
Stały bywalec Excelforum


Pomógł: 29 razy
Posty: 433
Wysłany: 09-01-2019, 11:39   Aktualizacja ścieżki dostępu do źródła SQL

Witam

Mam nadzieję, że mój problem jest banalny...
Proszę o poradę jak postępować z kwerendami MS Query, w przypadku gdy robię coś u siebie na kompie i muszę mój plik odpalić na innym komputerze (lub zmieni mi się ścieżką dostępu/nazwa pliku).

W załączniku zrobiłem kwerendę parametryczną i jeżeli przenoszę plik między folderami, to potem muszę wejść do właściwości kwerendy (z poziomu ppm na tabeli, dalej tabela/właściwości danych zewnętrznych) i ręcznie zmienić foldery w parametrach połączenia oraz w tekście połączenia. Nawet nie pojawia się pytanie o lokalizację pliku źródłowego. Tylko komunikat (w załączniku).


Czy jest jakiś prostszy sposób na aktualizację tych danych? A może inaczej powinienem tworzyć kwerendę w MS Query, żeby uniknąć takich problemów?

Dzidek

komunikat błędu.jpg
Plik ściągnięto 13 raz(y) 39.97 KB

test.xlsx
Pobierz Plik ściągnięto 24 raz(y) 11.36 KB

ID posta: 360071 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 2652 razy
Posty: 8794
Wysłany: 10-01-2019, 03:30   

Zamień treść kwerendy
Kod:
SELECT `dane$`.kol1, `dane$`.kol2
FROM `C:\Users\ZKES\Desktop\test\test.xlsx`.`dane$` `dane$`
WHERE (`dane$`.kryterium=?)
na
Kod:
SELECT `dane$`.kol1, `dane$`.kol2
FROM `dane$`
WHERE (`dane$`.kryterium=?)
to będzie mniej do poprawiania poniższym makrem
Kod:
Sub UpdatePathODBCConn()
    Dim Cnct        As WorkbookConnection
    Dim strCn       As String
    Dim vTmp        As Variant
    Dim strOldFullName As String
    Dim strOldPath  As String
    Dim strNewFullName As String
    Dim strNewPath  As String


    For Each Cnct In ActiveWorkbook.Connections
       
        If Cnct.Type = xlConnectionTypeODBC Then
            strCn = Cnct.ODBCConnection.Connection
            vTmp = Split(strCn, ";")
            strOldFullName = Mid(vTmp(2), 5)
            strNewFullName = ActiveWorkbook.FullName

            strOldPath = fFolderPath(strOldFullName)
            strNewPath = fFolderPath(strNewFullName)

            If MsgBox("Zamienić ścieżki:" & vbLf & _
                      "Stara: " & strOldFullName & vbLf & _
                      "Nowa: " & strNewFullName & " ?", _
                      vbQuestion + vbYesNo + vbDefaultButton2, Cnct.Name) = vbYes Then
               
                vTmp(2) = Replace(vTmp(2), strOldFullName, strNewFullName)
                vTmp(3) = Replace(vTmp(3), strOldPath, strNewPath)
                vTmp = StringToArray(Join(vTmp, ";"))
                Cnct.ODBCConnection.Connection = Array(vTmp)
               
                'jl. wcześniej skróciłeś zapytanie,
                'to zakomentowane linie można wyrzucić
'                vTmp = Cnct.ODBCConnection.CommandText
'                vTmp = StringToArray(Replace(vTmp, strOldFullName, strNewFullName))
'                Cnct.ODBCConnection.CommandText = Array(vTmp)

              Cnct.Refresh
            End If
           
        End If
       
    Next Cnct

End Sub


Function fFolderPath(strFullName As String) As String
    Dim lPos        As Long

    lPos = InStrRev(strFullName, Application.PathSeparator)
    fFolderPath = Left(strFullName, lPos - 1)
End Function


Function StringToArray(Query As Variant) As Variant
    Const StrLen = 127
    Dim NumElems    As Integer, i&
    Dim temp()      As String

    NumElems = (Len(Query) / StrLen) + 1
    ReDim temp(1 To NumElems) As String

    For i = 1 To NumElems
        temp(i) = Mid(Query, ((i - 1) * StrLen) + 1, StrLen)
    Next i

    StringToArray = temp
End Function

Artik
_________________
Persistence is a virtue in the world of programming.
ID posta: 360162 Skopiuj do schowka
 
 
z-kes 
Stały bywalec Excelforum


Pomógł: 29 razy
Posty: 433
Wysłany: 10-01-2019, 07:52   

Dziękuję Artiku za odpowiedź oraz makro.
Też myślałem o wykorzystaniu VBA do mojego problemu ale znając to czego uczę się na tym Forum, naiwnie założyłem, że jest jakiś przycisk, :clap po wciśnięciu którego te ścieżki nie załadują się do kwerendy a drugi, że zmienię lokalizację pliku źródłowego.
Przy czym makro wydaje mi się najmniej pracochłonnym podejściem. I chyba do wykorzystania w każdym przypadku.

Pozdrawiam
Dzidek
ID posta: 360168 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe