Met behulp van ODBC haal ik wat gegevens uit een Centura database met de
code zoals hieronder bijgevoegd.
Zoals je kunt zien maak ik in beide (en in het echt nog meer) functies een
verbinding met de database via ODBC.
Is dat op de één of andere manier sneller te doen? Dit is nog al uitgebreid
om voor ieder gegeven wat ik nodig heb zo 'n functie te maken.
Moeten gegevens met een recordset worden opgehaald? Is het niet mogelijk om
te zeggen: document = "SELECT Max(DOCUMENT) As Docum FROM
SYSADM.VOORRAADMUTATIES" i.p.v. op de opgegeven manier?
Heeft iemand misschien een voorbeeld van hoe het sneller kan?
Alvast bedankt!
Hier mijn code:
Sub Test
Dim Rekening
Dim Document
Rekening = OphalenRekening(2003, "VMU")
Document = OpvragenDocument
end sub
Function OphalenRekening(boekjaar, dagboek)
Dim wrkODBC As Workspace
Dim conBron As Connection
Dim rstTijdelijk As Recordset
Dim strSQL
' ODBC koppeling aangeven
Set wrkODBC = CreateWorkspace("Multivers for Windows", "ODBC", "ODBC",
dbUseODBC)
' Definitie van het Connection-object van waaruit
' gegevens in de pipeline worden geplaatst.
Set conBron = wrkODBC.OpenConnection("Bedrijf", , , "ODBC;DSN=Multivers
for Windows;UID=ODBC;PWD=ODBC;Database=" & adm & ";SRVR=MVSERV")
strSQL = "SELECT CDGRBREKENING FROM SYSADM.DAGBOEK WHERE (CDDAGBOEK='" &
dagboek & "') AND (BOEKJAAR=" & boekjaar & ")"
Set rstTijdelijk = conBron.OpenRecordset(strSQL, dbOpenDynaset)
With rstTijdelijk
.MoveLast
If .RecordCount > 0 Then
OphalenTegenrekening = !cdgrbrekening
End If
End With
' Sluit ODBC-connectie
conBron.Close
wrkODBC.Close
End Function
Private Function OpvragenDocument()
Dim wrkODBC As Workspace
Dim conBron As Connection
Dim rstTijdelijk As Recordset
Dim strSQL
' ODBC koppeling aangeven
Set wrkODBC = CreateWorkspace("Multivers for Windows", "ODBC", "ODBC",
dbUseODBC)
Set conBron = wrkODBC.OpenConnection("Bedrijf", , , "ODBC;DSN=Multivers
for Windows;UID=ODBC;PWD=ODBC;Database=" & adm & ";SRVR=MVSERV")
strSQL = "SELECT Max(DOCUMENT) As Docum FROM SYSADM.VOORRAADMUTATIES"
Set rstTijdelijk = conBron.OpenRecordset(strSQL, dbOpenDynaset)
With rstTijdelijk
.MoveLast
If .RecordCount > 0 Then
OpvragenDocument = !docum + 1
End If
End With
' Sluit ODBC-connectie
conBron.Close
wrkODBC.Close
End Function
Waarom maakt u geen gebruik van een externe datasource (zit standaard in het
menu data>get external data).
Hiermee kun je meteen connecteren met een externe datasource.
De DSN kun je definiëren in de ODBC datasource administrator.
--
Lorenzo Platteau
http://users.skynet.be/lorenzo.platteau
"Gerrit" <gs...@hotmail.com> wrote in message
news:%23Te09xu...@TK2MSFTNGP10.phx.gbl...
Daar maak ik ook (veelvuldig) gebruik van, maar niet alles is daarmee op te
lossen. Waar het nu om gaat zijn gegevens die ik nodig heb binnen vba
modules en forms.
Nu gaat het toevallig om een Excelbestand, maar dezelfde vraag heb ik voor
het ophalen van gegevens binnen Visual Basic of Access.
Gerrit
Misschien kun je in de VB editor een eigen class aanmaken (vb myODBCclass)
die vooraf al de connectie maakt met de ODBC datasource. Properties van je
class zijn dan bijvoorbeeld:
- strSQL : uw SQL instructies
- rstResult : resulterende recordset
i.p.v. telkens je workspace te moeten definiëren, kun je in heel je vb
toepassing dan éénmaal een object van je class-type aanroepen . Bij het
initialiseren van je class, kun je dan van de eerste keer de nodige
parameters doorgeven (en al meteen de connectie openen).
Bij een Terminate van je class, kun je dan netjes de connectie afsluiten.
Natuurlijk is er wel wat werk aan om je class met al zijn properties en
methodes te definiëren, maar éénmaal op punt, kun je dan bijvoorbeeld als
volgt je class oproepen:
-------------
dim myODBC as myODBCclass
dim rst as recordset
dim OpvragenDocument
set myODBC = new myODBCclass("Bedrijf","ODBC;DSN=Multivers for
Windows;UID=ODBC;PWD=ODBC;Database=" & adm & ";SRVR=MVSERV")
myODBC.strSQL = "SELECT Max(DOCUMENT) As Docum FROM SYSADM.VOORRAADMUTATIES"
rst = myODBC.rstResult
With rst
.MoveLast
If .RecordCount > 0 Then
OpvragenDocument = !docum + 1
End If
End With
--------------
Dit is iets korter, maar als je binnen eenzelfde project met verschillende
ODBC bronnen werkt, is dit niet echt een verbetering.
--
Lorenzo Platteau
http://users.skynet.be/lorenzo.platteau
"gs" <gs...@hotmail.com> wrote in message
news:6BiIb.5546$7U1.65174@amstwist00...
Van classes heb ik nog geen kaas gegeten. (Iemand die toevallig een site
weet met meer info?)
> Dit is iets korter, maar als je binnen eenzelfde project met verschillende
> ODBC bronnen werkt, is dit niet echt een verbetering.
Zo te zien kan ik heel wat keren de mijn uitvoering gebruiken in de tijd die
ik nodig zal hebben om deze manier te gaan gebruiken :(
Maar toch bedankt voor de info. Ik wil het wel gaan uitzoeken. Al zou het
alleen al zijn om er van te leren.
Gerrit