Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[ACCESS / VBA] Vraag over results van pass-through query *

Pagina: 1
Acties:
  • 577 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Beste allemaal,

Waarschijnlijk heel simpel, maar ik blijf er al een tijdje op steken. Het geval is als volgt:

Ik heb in access een passthrough query aangemaakt en wil daarmee vanuit VBA een query direct op Oracle uitvoeren, dit is de query:

SQL:
1
2
3
4
5
6
select sum(sum(decode(discount_type, 3, 0, delivered))) As total_units from t******* tr,
 c***** c, lookup_period lp, lookup_period_current lpc where tr.CONFIRMDATE = lp.targetdate and 
tr.localproductno = c.localproductno and lp.financialyear = lpc.financialyear and lp.financialmonth =
lpc.financialmonth and tr.discount_type <> 3 and tr.trans_type not in ('F','R') and tr.product_group < 
900 and tr.delivered <> 0 and tr.backorder_code <> 'D' and tr.upcno = '" & recSPrevRec("UPCNO") &
 "' Group by tr.CONFIRMDATE order by tr.CONFIRMDATE


(**** = dingen die jullie helaas niet mogen zien)

Dit is de funtie waarmee ik de query push:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
Public Function ChangeSQLrr(pstrSPTName As String, pstrSQL As String, returnrecords As Boolean)

    'Requires reference to DAO library
    Dim db As DAO.Database
    Dim qd As DAO.QueryDef
    Set db = CurrentDb
    Set qd = db.QueryDefs(pstrSPTName)
    qd.SQL = pstrSQL 'set new value
    qd.ReturnsRecords = returnrecords
    Set qd = Nothing
    Set db = Nothing
    
End Function


en dan:

Visual Basic:
1
Call ChangeSQLrr (<pstrSPTName>, <pstrSQL>, <returnrecords>)


Dit is allemaal logisch en werkt ook gewoon, maar nu:

Als result van die query krijg ik een waarde, maar hoe kan ik die opvangen in een variabele in VBA?

Iemand een concreet voorbeeld?

Mijn dank is bij voorbaat groot.


- Jeroen

Verwijderd

Topicstarter
Sluit topic maar, het is me na veel klooien wel gelukt door de record set in een global te proppen en niet te returnen met de functie wat ik eerst deed en steeds fout ging:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Public Sub ChangeSQLrr(pstrSPTName As String, pstrSQL As String, returnrecords As Boolean)

    'Requires reference to DAO library
    Dim db As DAO.Database
    Dim qd As DAO.QueryDef
    Dim prm As DAO.Parameter
    Dim rst As DAO.Recordset
    
    Set db = CurrentDb
    Set qd = db.QueryDefs(pstrSPTName)
    
    qd.SQL = pstrSQL 'set new value
    qd.ReturnsRecords = returnrecords
    
    For Each prm In qd.Parameters
        prm.Value = Eval(prm.Name)
    Next prm
    
    Set gPushRSet = db.OpenRecordset(pstrSPTName, dbOpenDynaset)


    Set qd = Nothing
    Set db = Nothing
    
End Sub

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Een slotje is niet nodig op een topic als je je oplossing hebt. Zie daarvoor ook onze faq betreffende topiceinde.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
Ahaok, ik haal zo af en toe wat fora door elkaar :)

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

FYI: mocht je nou in de toekomst een functie wel een waarde terug willen laten geven zonder globale variabelen:
Visual Basic:
1
2
3
4
5
6
7
8
9
Function MyFunc() as recordset
    \\ bla 
    Set MyFunc=db.openrecordset()
End Function

Sub Main
    dim rs as recorset
    Set rs=MyFunc()
End Sub

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Topicstarter
Thanks,

Ga ik morgen even proberen. :)
Pagina: 1