Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Gegevens ophalen met ODBC

79 views
Skip to first unread message

Gerrit

unread,
Dec 30, 2003, 10:49:13 AM12/30/03
to
Ik weet niet goed in welke nieuwsgroep ik het kwijt moet, maar omdat ik op
dit moment met Excel werk, dan maar hier.

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


_lpl_

unread,
Dec 30, 2003, 12:21:30 PM12/30/03
to
Gerrit,

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...

gs

unread,
Dec 30, 2003, 12:28:24 PM12/30/03
to

"_lpl_" <lpl_wa...@DELETEhotmail.com> schreef in bericht
news:3ff1b426$0$20535$ba62...@news.skynet.be...

> Gerrit,
>
> 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

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


_lpl_

unread,
Jan 2, 2004, 6:21:27 AM1/2/04
to
Veel korter kan allicht niet.

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...

gs

unread,
Jan 5, 2004, 5:11:36 PM1/5/04
to
> 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:

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


0 new messages