Archief - VBA - Database connectie wil niet afsluiten

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Recipe4hate

Legacy Member
Hoi,

Ik werk in MsExcel 2000 en ik heb een connectie gemaakt met een MsAccess database. Alles verloopt prima en alle waarden worden via SQL naar mijn recordsets gedropt en van daaruit laad ik alles in arrays in Excel. Het probleem is, dat ik mijn connectie en mijn recordset sluit en toch mijn database in gebruik blijft. (Na het runnen van de code kan ik bijvoorbeeld de database niet hernoemen of knippen, want dan zegt hij: "in use by another program". Als ik Excel afsluit kan het plots wel.)

mijn relevante code:
Code:
Dim cnnADO As ADODB.Connection
Dim rsABMG As ADODB.Recordset
Dim rsADLO As ADODB.Recordset
Dim rsADFM As ADODB.Recordset
Dim rsAMLP As ADODB.Recordset
Const sDBPATH As String = "K:\Transportation\Manuals\Dbs\Testing purps.mdb"
Const sPROVIDER = "Microsoft.Jet.OLEDB.4.0;"

Private Sub retrieveConnection()
    Application.StatusBar = "Retrieving external database connection: " & ""
    setupConnections
    makeConnection
    retrieveDealer_Loc
    retrieveBike_ManGrp
    retrieveDealer_Lang
    retrieveGroupLang_Part
    closeConnection
End Sub

   Private Sub setupConnections()
        Application.StatusBar = "Retrieving external database connection: " & "setup connection"
        sConnString = "Provider=" & sPROVIDER & "Data Source = " & sDBPATH & ";"
        sSQLADFM = sSQLADFM & "SELECT DCode, DCountry "
        sSQLADFM = sSQLADFM & "FROM [dealers for manuals] "
        sSQLADFM = sSQLADFM & "ORDER BY DCode ASC"
        
        sSQLABMG = sSQLABMG & "SELECT [Bike Ref], [Manual Group Year 2008], [Manual Group Year 2009] "
        sSQLABMG = sSQLABMG & "FROM [Bike and manual group] "
        sSQLABMG = sSQLABMG & "ORDER BY [Bike Ref] ASC"
        
        sSQLADLO = sSQLADLO & "SELECT [Bike Dealer], [Language] "
        sSQLADLO = sSQLADLO & "FROM [Dealer, Language, Order Codes] "
        sSQLADLO = sSQLADLO & "ORDER BY [Bike Dealer] ASC"
        
        sSQLAMLP = sSQLAMLP & "SELECT [Manual Group], [Language:], [Part Number:] "
        sSQLAMLP = sSQLAMLP & "FROM [man group_lang code_part no] "
        sSQLAMLP = sSQLAMLP & "ORDER BY [Manual Group] ASC"
    End Sub
  Private Sub makeConnection()
        Application.StatusBar = "Retrieving external database connection: " & "opening connection"
        cnnADO.CursorLocation = adUseClient
        cnnADO.Open (sConnString)
    End Sub
    Private Sub closeConnection()
        Application.StatusBar = "Retrieving external database connection: " & "closing connection"
        cnnADO.Close
        Set cnnADO = Nothing
    End Sub
    Private Sub retrieveDealer_Loc()
        Application.StatusBar = "Retrieving external database connection: " & "retrieving values"
        Dim iListLength As Integer
        Dim ic As Integer
        rsADFM.Open sSQLADFM, cnnADO
        iListLength = countFields(rsADFM)
        ic = 0
        ReDim arrACCDealer_Location(iListLength, 2)
        rsADFM.MoveFirst
        Do While (Not rsADFM.EOF)
            arrACCDealer_Location(ic, 0) = rsADFM.Fields("DCode")
            arrACCDealer_Location(ic, 1) = rsADFM.Fields("DCountry")
            ic = ic + 1
            rsADFM.MoveNext
        Loop
        rsADFM.Close
        Set rsADFM.ActiveConnection = Nothing
        Set rsADFM = Nothing
    End Sub
   
    'de rest van de retrieves zijn analoog met retrievedealer_loc() dus ga ik dat hier niet plakken.

Zoals je ziet close ik eerst mijn recordset en uiteindelijk mijn volledige connectie. Ik zie dus niet waarom ik nog steeds niet mijn database mag editen.
Graag jullie hulp! :applause:

Zhergan

Legacy Member
Vermits je met excel werkt, maakt je jezelf wel ongelooflijk moeilijk door die lijsten zelf aan te maken en op te vullen.
Misschien moet je eens kijken naar "Data\Import External Data\New Database Query" en daarmee je verbinden maken naar je databank. Eens aangemaakt kan je die lijst refreshen wanneer je maar wil en moet je absoluut geen rekening houden met connecties en dergelijke, excel regelt dit allemaal voor jouw :)

Kijk ook eens je SQL-statements na, deze worden niet correct opgebouwd, zou deze vervangen door:
sSQLADFM = "SELECT DCode, DCountry "
sSQLADFM = sSQLADFM & "FROM [dealers for manuals] "
sSQLADFM = sSQLADFM & "ORDER BY DCode ASC"

Recipe4hate

Legacy Member
Zhergan zei:
Vermits je met excel werkt, maakt je jezelf wel ongelooflijk moeilijk door die lijsten zelf aan te maken en op te vullen.
Misschien moet je eens kijken naar "Data\Import External Data\New Database Query" en daarmee je verbinden maken naar je databank. Eens aangemaakt kan je die lijst refreshen wanneer je maar wil en moet je absoluut geen rekening houden met connecties en dergelijke, excel regelt dit allemaal voor jouw :)

Kijk ook eens je SQL-statements na, deze worden niet correct opgebouwd, zou deze vervangen door:
sSQLADFM = "SELECT DCode, DCountry "
sSQLADFM = sSQLADFM & "FROM [dealers for manuals] "
sSQLADFM = sSQLADFM & "ORDER BY DCode ASC"

Bedankt voor je input. Ik maak het mezelf eigenlijk niet echt moeilijk. Connectie met een database maken ed. is imo niet zo erg lastig. Ik doe het op deze manier omdat ik zo veel meer controle heb. Ik zou trouwens niet weten of bij een database query via excel mijn verbinding open blijft ed. (nooit echt mee gewerkt). 't Is een kwestie van voorkeur denk ik.
Wat de SQL statements betreft, deze zijn in orde. Vooraleer ik er een stringwaarde aan toeken worden ge op "" gezet. Dus die eerste regel staat er enkel om de leesbaarheid te bevorderen.
Kon evengoed zo zijn: (maar heb 't nu zo staan en dat zijn voorlopig details)
Code:
sSQLADFM = "SELECT DCode, DCountry " & _
sSQLADFM = "FROM [dealers for manuals] " & _
sSQLADFM = "ORDER BY DCode ASC"[/QUOTE]



edit:
Na wat geprul heb ik ontdekt dat het niet de DATABASE die in gebruik is, maar de MAP zelf. Ik kan eigelijk waarden in de database aanpassen en de volledige DB verplaatsen. De map die toegang geeft tot de DB, kan ik echter niet verplaatsen/hernoemen. Op zich kan het eigenlijk geen kwaad, aangezien die mappen niet mogen veranderen, maar ik zou wel graag weten waarom en hoe ik dat oplos?

Recipe4hate

Legacy Member
Ik heb nog een vraagje, maar ik ga er geen nieuw topic over openen.
Wat precies is ":=" (zonder quotes)?
In de excelfuncties zit het soms, zoals bij sort:
Code:
Selection.Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

Waarom kan het niet gewoon:
Code:
Selection.Sort(Range("C1"), xlAscending, xlNo, 1, False, xlTopToBottom)

Alvast bedankt
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan