Dim XXX As Database

Status
Niet open voor verdere reacties.

BasHD

Gebruiker
Lid geworden
2 dec 2008
Berichten
99
Hallo allemaal,

Ik zit in office 2010 in acces te werken. Ik gebruik de code Dim as Database maar die komt niet voor. Als ik As intyp en verder ga geeft de VBA een aantal keuze nmaar geen Database? Hoe kan dat?

Verder zit ik het misschien wel verkeerd te doen.

In een formulier heb ik een keuzelijst met invoervak gemaakt. Hieraan is een tabel gekoppelt met artikel nummers. Ik kan dus snel een artikel kiezen. De artikelnummers zijn de eerste kolom. In de betreffende tabel is de 3e kolom het BTW percentage. Die wil ik opzoeken om zo verder op in het formulier een ander vakje te berekenen.

Dim DBase As Database
Dim Uitvoer As Recordset

Code:
locatie = "H:\Minas\Kostprijs.mdb"
    Set DBase = OpenDatabase(locatie)
    Set Uitvoer = DBase.OpenRecordset("UitvoerGegevensKostprijs")
    
    
    On Error GoTo Fout1
    Uitvoer.MoveFirst
    Do
       If Not Uitvoer.EOF Then
          If (Uitvoer.Fields("GRASCODE SPEC") = [GRASCODE SPEC].Value) Then
                Exit Do
            Else
               Uitvoer.MoveNext
            End If
        Else
            GoTo Fout1
        End If
   Loop
   BTW = Uitvoer.Fields("BTWPerc")

Maar dat werkt dus niet. Wie wil me een tip geven?

Groet,

Bas
 
Waarom zo ingewikkeld?

Code:
Dim strSQL As String

    locatie = "H:\Minas\Kostprijs.mdb"
    strSQL = "SELECT [BTWPerc] FROM UitvoerGegevensKostprijs WHERE [GRASCODE SPEC]=" & [GRASCODE SPEC].Value
    Set DBase = OpenDatabase(locatie)
    With DBase.OpenRecordset(strSQL)
        If .recordcount > 0 Then
            BTW = .Fields("BTWPerc").Value
        End If
        .Close
    End With
    DBase.Close
    Set DBase = Nothing
 
Vervolg vraag

Beste OctaFish

Als ik een en ander wat aanpas kom ik op het volgende:

Code:
Private Sub EuroPer100KgExBTWRek_Click()

Stop

Dim strSQL As String
'Dim DBase As Database

    locatie = "C:\Users\Administrator\Documents\Bas\D & A Bassa\Acces\BAS 2005.mdb"
    strSQL = "SELECT [BTWPerc] FROM T_GRASCODE WHERE [GRASCODE SPEC]=" & [GRASCODE SPEC].Value
    Set DBase = OpenDatabase(locatie)
    With DBase.OpenRecordset(strSQL)
        If .RecordCount > 0 Then
            BTW = .Fields("BTWPerc").Value
        End If
        .Close
    End With
    DBase.Close
    Set DBase = Nothing

Vervolgens krijg ik de meldingCompileerfout: Sub of Function niet gedefinieerd.
OpenDatabase achter Set Dbase = krijgt blauwe achtergrond.

Doe ik Dim DBase As Database dan krijg ik de melding Compileerfout:

Een door de gebruiker gedefinieerd gegevenstype is niet gedefinieerd.

Moet ik ergens nog wat aanvinken o.i.d. wat het gebruik van VBA nu nog beperkt?

Ik kom er even niet uit.

Groet,

Bas
 
Je hebt de declaratie op zich wel nodig; de foutmelding die je krijgt wordt veroorzaakt door de manier waarop je de database opent. Blijkbaar heb je in je db geen koppelingen met een backend, en bevinden de tabellen zich niet in de gebruikte database, anders zou je het waarschijnlijk niet op deze manier doen.
Zelf doe ik het in ieder geval anders; ik werk met Connections, dus ik kan je op dit moment niet helpen met de juiste syntax. Kijk eens naar het voorbeeld in de Help dat je krijgt bij OpenDatabase.
 
Hallo OctaFish,

Nu wordt er in een keer veel duidelijk. Ik roep een tabel aan uit de database waarvan het formulier ook deeluitmaakt die de gebeurtenis moet uitvoeren. Er wordt gezocht naar een tabel binnen de eigen database.

Ik kan nu een database aanmaken met de betreffende tabel erin en die aanroepen. Volgens de informatie die je geeft kan je dus ook tabellen uit de eigen database aanroepen.

Doe je dat via StrSQL Select Table Where als basis?

BB
 
Het is de meest gangbare manier van werken; je hebt ofwel een zelfstandige database, of een frontend-backend db waarbij je koppelingen in de frontend legt met de backend. In beide gevallen kun je in je modules en formulieren tabellen en queries rechtstreeks aanspreken zonder dat je allerlei connecties hoeft te leggen, of een database hoeft te openen.
Je werkt dan bijvoorbeeld met CurrentProject en CurrentDB() om een recordset binnen de eigen db te openen. Ik zou het dus eerst op die manier proberen, als je alles binnen de db beschikbaar hebt.
 
OK OK ik ben wat onervaren.

Onder het menu Extra --> verwijzingen --> Microsoft DAO 3.6 Object Library aangeklikt en zie hier :

Code:
Private Sub EuroPer100KgExBTWRek_Click()

Stop

Dim dummy
Dim DBase As DAO.Database
Dim strSQL As String
Dim BTW

   Set DBase = CurrentDb
  
    strSQL = "SELECT [BTWPerc] FROM T_GRASCODE WHERE [GRASCODE SPEC]=" & [GRASCODE SPEC].Value
    
    With DBase.OpenRecordset(strSQL)
        If .RecordCount > 0 Then
            BTW = .Fields("BTWPerc").Value
        End If
        .Close
    End With
    DBase.Close
    Set DBase = Nothing

werkt als een trein.

Bedankt voor het meedenken en versimpelen van de schrijfwijze.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan