24. januar 2005 - 15:47Der 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å.
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
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?
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.
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.
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
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.