OBDC via VBA till EXCEL

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

OBDC via VBA till EXCEL

Inlägg av Bosen »

Jag har gjort ett macro som analyserar artikelnummer och kollar hur många objekt den artikeln är kopplad mot.
Databasen är inte min utan jag har bara möjligheta att ställa frågor mot den.
.CommandText i nedanstående kod har jag tagit fram genom att exprimentera i Microsoft Query, resterande är klipp och klistra från ett äldre macro.
Variabeln ArtNr hämtas från en tabell som även den är tagen från samma databas med en annan .CommandText och jag loopar den tabellen.
Tabellen kan innehålla t.ex 150 artiklar så för varje rad i tabellen så anropar jag nedanstående kod med ett nytt ArtNr.

Problemet är att när det är väldigt många recordsets så låste sig excel. Vilket gjorde att jag la till TOP 20 för att begränsa hur mycket jag hämtade från databasen. (är artikeln kopplad mot fler än 20 objekt så behöver jag inte veta vilka alla objekten är)

koden fungerar men är brutalt slött. Excel slutar att svara då och då under hela körningen. går det att snabba upp hämtningen på något sätt??
Jag ska bara kopiera data till excel-arket, inga modifikationer skall göras.

Hoppas ni förstår min något flummiga fråga :)

Kod: Markera allt

With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
        "ODBC;DSN=MeritProdSCV;Description=Merit Produktion;;;DATABASE=MeritSCV;LANGUAGE=S" _
        ), Array("venska;Trusted_Connection=Yes")), Destination:=ThisWorkbook.Sheets("Arbetsblad2").Range("A1"))
        .CommandText = "SELECT TOP 20 GOD_D.ART_NR, BXI_D.ANL_NR, GOD_D.BENAMNING1, GOD_D.TYP_BETECKN, ARTREG_D.SENAST_UTT_DATUM FROM MeritSCV.dbo.ARTREG_D ARTREG_D, MeritSCV.dbo.BXI_D BXI_D, MeritSCV.dbo.GOD_D GOD_D WHERE BXI_D.ANL_NRX = GOD_D.ANL_NR AND ARTREG_D.ART_NR = GOD_D.ART_NR AND ((GOD_D.ART_NR='" & ArtNr & "')) ORDER BY BXI_D.ANL_NR"
        .Name = "Fråga från VarMeritProd"
        .FieldNames = False
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With
sodjan
EF Sponsor
Inlägg: 43245
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: OBDC via VBA till EXCEL

Inlägg av sodjan »

Är du säker på att det är i klienten det hänger?
Inte i servern där databasen ligger? Kan du köra
SQL frågan mot databasen på annat sätt utan att
det "hänger"?
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Re: OBDC via VBA till EXCEL

Inlägg av Bosen »

Nä, det är jag inte säker på, det kan ju va så stt jag kör för många förfrågningar.
Men just excel hänger sig oc visar "(svarar inte)" i menyraden.
sodjan
EF Sponsor
Inlägg: 43245
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: OBDC via VBA till EXCEL

Inlägg av sodjan »

Jo, men Excel kan ju upplevas att "hänga" (av dig eller av Windows)
p.g.a. att Excel väntar på att servern ska svara. En koll på servern
borde ganska enkelt svara på det.
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Re: OBDC via VBA till EXCEL

Inlägg av Bosen »

Kan man lägga in en timeout i min förfrågan? Hur isåfall?
Användarvisningsbild
Jan Almqvist
Inlägg: 1651
Blev medlem: 1 oktober 2013, 20:48:26
Ort: Orust

Re: OBDC via VBA till EXCEL

Inlägg av Jan Almqvist »

Vissa MS ODBC-drivrutiner är väldigt primitiva och om man kör över nätverk blir det snart segt. Undvik.
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Re: OBDC via VBA till EXCEL

Inlägg av Bosen »

Nu har jag själv hittat felet. Det visade sig att när jag raderade QueryTable inför varje förfrågan så funkade det dåligt med att använda Columns.Clear . När jag istället använde Columns.Delete så snabbade det upp allt!!!

Tack för er hjälp ändå!
Användarvisningsbild
Lennart Aspenryd
Tidigare Lasp
Inlägg: 12607
Blev medlem: 1 juli 2011, 19:09:09
Ort: Helsingborg

Re: OBDC via VBA till EXCEL

Inlägg av Lennart Aspenryd »

Kul att köra ingår i, och matcha mot består av.
Bra att du fann en lösning.
Skriv svar