Avatar billede tonnym Nybegynder
24. januar 2005 - 15:47 Der er 8 kommentarer og
1 løsning

Rediger destination sti på forespørgsler

Ved ikke helt om det er Excel, eller Access sprøgsmål..

I hvert fald har jeg problemet i Excel når jeg skal ændre sti'en for 10+ forespørgsler som kommer fra samme database.

Mere specifikt så kommer problemet hver måned, hvor jeg skal opdatere excel filen. Excel filen får data fra en access database, som jeg for overblikkets skyld har en af for hver måned. I access databasen ligger der 10+ queries (underbygget af 30+ andre queries) som levere data til excel, disse er afgrænset
med start og slut dato for hver uge.

PROBLEMET!!!!

Når jeg så skal have en ny fil, til den nye måned, skal jeg i Excel opdatere disse 10+ queries, således de nu peger mod den nye Access fil med de rigtige dato intervaller.

Oftets gør jeg det at jeg redigere forspørgslen og hopper ind i MS Query, for der i SQL sætnignen at skiftet navnet på databasen.

MEN der må da findes en nemmere løsning på dette, et sted hvor man kan se alle SQL sætninger på samme tid og redigere i dem eller noget, måske endda noget søg og erstat!

Er der nogen som kan fortælle en nemmere måde at skiftet navnet på databasen ud på?? Hvis der er nogen som har en nemmere løsning på selve setup'et er disse forslag også velkommen, men hovedsagligt sigter jeg efter at holde setup'et, og finde en nemmere måde at skifte navnet på.

PFT.
Avatar billede bak Forsker
24. januar 2005 - 18:15 #1
det ser ud til at jeg har lavet det før
http://www.eksperten.dk/spm/514127
Avatar billede bak Forsker
24. januar 2005 - 22:28 #2
Lidt bedre end før
I sub test skriver du den nye sti og det nye databasenavn (uden .MDB)
Hvis der ikke er nogen ny sti skriver du bare den gamle.

Sub test()
ChangeDBPath "d:\dokumenter", "KOPI_AF_BEARBEJDNINGzz"
End Sub

Sub ChangeDBPath(stNewPath, Optional stNewDB)
Const stEXT As String = ".MDB"
Dim stDBase As String
Dim vaTemp
Dim vaConn As Variant
Dim ws As Worksheet
Dim qt As QueryTable
Dim stOldPath As String
Dim stOldDB As String
Dim ok As Long
    For Each ws In ActiveWorkbook.Worksheets
    On Error Resume Next
        For Each qt In ws.QueryTables
            vaConn = Split(qt.Connection, ";")
            vaTemp = Split(vaConn(2), "\")
            stOldDB = Replace(vaTemp(UBound(vaTemp)), stEXT, "")
            stOldPath = Mid(vaConn(3), InStr(1, vaConn(3), "=") + 1)
            If IsMissing(stNewDB) Then
                stDBase = stOldDB
                Else
                stDBase = stNewDB
            End If
            vaConn(2) = Replace(vaConn(2), stOldPath & "\" & stOldDB, stNewPath & "\" & stNewDB) '"DBQ=" & stNewPath & "\" & stDBase
            vaConn(3) = "DefaultDir=" & stNewPath
            vaConn = Join(vaConn, ";")
            qt.Connection = vaConn
            ok = InStr(qt.CommandText, stOldPath & "\" & stOldDB)
            qt.CommandText = Replace(qt.CommandText, stOldPath & "\" & stOldDB, stNewPath & "\" & stNewDB)
        Next
    On Error GoTo 0
    Next
End Sub
Avatar billede tonnym Nybegynder
25. januar 2005 - 12:54 #3
Hmm det virker næsten...

Den oprindelige sti/database er:
P:\FORECAST WEEKLY\DATA\WklyFC_Marts_05


I ny sti/database skriver jeg så "P:\forecast weekly\data", "WklyFC_April_05"

Det giver så følgende resultat i SQL sætningen:
P:P:\FORECAST WEEKLY\DATA\WklyFC_April_05FORECAST WEEKLYP:\FORECAST WEEKLY\DATA\WklyFC_April_05DATAP:\FORECAST WEEKLY\DATA\WklyFC_April_05WklyFC_Marts_05

En ordenlig gang mudder som jeg ikke helt kan hitte styr på hvorfor kommer, der er umiddelbart ingen logik i det for mig at se?


P:
P:\FORECAST WEEKLY\DATA\WklyFC_April_05
FORECAST WEEKLY
P:\FORECAST WEEKLY\DATA\WklyFC_April_05
DATA
P:\FORECAST WEEKLY\DATA\WklyFC_April_05
WklyFC_Marts_05

Den indsætter den nye sti/database 3 gange, men splitter den gamle sti op i mellem?

Ved ikke om du umiddelbart kan se nogen fejl i din kode som kunne gøre det?

Ellers er jeg pt. igang med trial and error løsningen ;o)
Avatar billede tonnym Nybegynder
25. januar 2005 - 13:16 #4
Jeg har testet nogle flere gange og den virker og så alligevel ikke...

Jeg ved ikke helt hvad der ændres, men det er ikke SQL sætningen og dermed ikke selve forspørgslen åbenbart.

Jeg startede med at indsætte et par MsgBox'e før din IF sætning, første kørsel viste den den gamle database, anden kørsel viste den nye.. så noget er altså skiftet.

Men da jeg så via MS Query går ind og åbner SQL sætningen, ja, desværre så er det den gamle database der stadig står der...

Men din funktion virker altså fint nok! :o) Løste bare ikke problemet.
Avatar billede bak Forsker
25. januar 2005 - 17:00 #5
kigger på det :-)
Har du mulighed for at smide hele din oprindelige sql-sætning her ?
Avatar billede tonnym Nybegynder
26. januar 2005 - 13:08 #6
SELECT qry_Uge1_EWS01_1_1.OHFIKQ, qry_Uge1_EWS01_1_1.OHOENQ, qry_Uge1_EWS01_1_1.SumOfOHKPRI, qry_Uge1_EWS01_1_1.SumOfOHAKPR
FROM `P:\FORECAST WEEKLY\DATA\WklyFC_Februar_05`.qry_Uge1_EWS01_1_1 qry_Uge1_EWS01_1_1

Således ser den fulde sætning ud. Der er det "naturligvis" From sætningen som jeg søger ændret.

Jeg skal måske uddybe lidt, helt fra start af, så benytter jeg mig af "ny database forspørgsel" funktionen, og køre denne guide igennem. Her under anvender jeg en ODBC connection til MS Access databaser, og kobler via denne på en Access database. Disse data bliver så blot listet i Excel.

Ved ikke om det giver en bedre indsigt i hvorledes Excel gemmer forspørgslen.

Et eksempel på hvordan Excel reagere:
Hvis jeg skifter navn på en database og efterfølgende vil opdatere mine queries i Excel, får jeg en login prompt til Access databaser hvor jeg først skal pege mod den database jeg ønsker og derefter logge ind på den. Dette giver adgang til at opdatere queryen og mulighed for at komme ind i MS Query programmet, hvor jeg så der manuelt må/kan ændre databasen til det nye navn. Jeg vil tror at det er dette skjulte som også ændres med din VB funktion, men altså så stadig giver forkert sti i selve SQL databasen.
Avatar billede bak Forsker
26. januar 2005 - 16:21 #7
Fejlen skulle være udbedret nu

Sub test()
ChangeDBPath "d:\tester", "KOPI_AF_Master"
End Sub

Sub ChangeDBPath(stNewPath, Optional stNewDB)
Const stEXT As String = ".MDB"
Dim stDBase As String
Dim vaTemp
Dim vaConn As Variant
Dim ws As Worksheet
Dim qt As QueryTable
Dim stOldPath As String
Dim stOldDB As String
Dim lnr0 As Long
Dim lnr1 As Long
Dim lnr2 As Long
Dim temp, temp1

    For Each ws In ActiveWorkbook.Worksheets
    On Error Resume Next
        For Each qt In ws.QueryTables
            vaConn = Split(qt.Connection, ";")
            vaTemp = Split(vaConn(2), "\")
            stOldDB = Replace(vaTemp(UBound(vaTemp)), stEXT, "")
            stOldPath = Mid(vaConn(3), InStr(1, vaConn(3), "=") + 1)
            If IsMissing(stNewDB) Then
                stDBase = stOldDB
                Else
                stDBase = stNewDB
            End If
            vaConn(2) = Replace(vaConn(2), stOldPath & "\" & stOldDB, stNewPath & "\" & stNewDB) '"DBQ=" & stNewPath & "\" & stDBase
            vaConn(3) = "DefaultDir=" & stNewPath
            vaConn = Join(vaConn, ";")
            qt.Connection = vaConn
            lnr0 = InStr(1, qt.CommandText, "FROM")
            lnr1 = InStr(lnr0, qt.CommandText, "`") + 1
            lnr2 = InStr(lnr1, qt.CommandText, "`")
            temp1 = Mid(qt.CommandText, lnr1, lnr2 - lnr1)
            temp = Replace(qt.CommandText, temp1, stNewPath & "\" & stNewDB)
            qt.CommandText = temp
        Next
    On Error GoTo 0
    Next
End Sub
Avatar billede tonnym Nybegynder
28. februar 2005 - 10:41 #8
Sorry sorry sorry sorry X 1000000!

Beklager jeg ikke har svaret/kommenteret eller noget i så lang tid.

Jeg fik testet det just nu, og det virker som en drøm!!!

Drop et svar :o)
Avatar billede bak Forsker
28. februar 2005 - 12:52 #9
ok, godt det virker :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester