Loop maken in access/vb

Status
Niet open voor verdere reacties.

Eddydy

Gebruiker
Lid geworden
13 mei 2006
Berichten
5
In een subform staat de output van een query. Ik wil een loop op deze subform uitvoeren. Per regel moet een insert en/of update gedaan worden in een tabel. Hoe ga ik dit programmeren. Met de helpfunctie van access/vb kom ik er niet uit. Dit soort dingen heb ik in oracle en uniface gebouwd maar weet nu even niet waar ik beginnen moet. Alvast enorm bedankt!
 
Eddydy zei:
In een subform staat de output van een query. Ik wil een loop op deze subform uitvoeren. Per regel moet een insert en/of update gedaan worden in een tabel. Hoe ga ik dit programmeren. Met de helpfunctie van access/vb kom ik er niet uit. Dit soort dingen heb ik in oracle en uniface gebouwd maar weet nu even niet waar ik beginnen moet. Alvast enorm bedankt!

Heb je geen klein voorbeeldje van je database, zodat ik wat meer een idee heb van wat het moet worden
 
syntax

Bedankt voor je reactie!

In oracle ging het zo:

select .....
Dan had je een recordset gebouwd
dan: for [voorwaarden] loop

tijdens de loop kon je bewerkingen uitvoeren waaronder:

Insert into table [tabelnaam] met een lijstje van inserts

end loop

Nu zou ik willen weten hoe de syntax van bovenstaande moet zijn in access en waar je die code dan plaatst. Waarschijnlijk gewoon onder een knop of zo.

Ik hoop dat je er iets van maken kan.
 
Vanuit je vraagstelling is niet helemaal duidelijk wat je nu precies wilt, daarom is gevraagd om je database even te posten.
Een subform kent namelijk een aantal variabelen:
- de query waarop het subform gebaseerd is
- de wijze waarop de gegevens op het subform gepresenteerd worden
- het filter dat vanuit het hoofdform op het subform toegepast wordt

Het is niet duidelijk of je wilt loopen op de totale query waarop het subform gebaseerd is of op de gefilterde gegevens of op de set die zichtbaar is op het subform.

Overigens kun je in access makkelijker loopen door gegevens (resultaten van een query dus) dan op data die gepresenteerd wordt op een formulier.

Als je iets duidelijker kunt aangeven wat je precies wilt doen dan is het wat eenvoudiger om een goed advies te geven.
 
Loopen

De opbouw is als volgt:

Hoofdscherm: Fakturen query op 1 tabel [fakturen], Q_FAKTUREN_1.
Subscherm: Faktuurregels (query van twee tabellen)
Per faktuurregel die bij deze faktuur hoort moet een boeking in de boekhouding worden gedaan van het BTW tarief (1 boeking per btw tarief). Q_FAKTUURREGELS_1.

Dus de loop moet er als volgt uitzien:

Q_FAKTUREN_1: verzamel alle fakturen die nog niet gefaktureerd zijn

>> loop

Q_FAKTUURREGELS_1: per faktuur: selecteer alle faktuurregels, totaliseer per btw tarief zodat er per btw tarief 1 totaalregel ontstaat. sorteer op BTW tarief

>> loop

selecteer de eerste regel uit de query
maak een regel aan in de tabel [boekingen] en voer de waarden uit de queryregel in in deze tabel.
herhaal dit voor alle regels

>> end loop
>> end loop

Ik kan hiervoor de inhoud van de schermen gebruiken, ik kan natuurlijk ook 'onder water' een bewerking op de database laten uitvoeren onder een button die op hetzelfde neerkomt. Beide mogelijkheden zijn wat mij betreft prima.

Wie helpt me verder?

Alvast bedankt!

Eddy.
 
Dit heeft dus eigenlijk niets met formulieren te maken, maar is en zuiver batchproces.
Je maakt eerst een query waarin je de te verwerken facturen selecteerd.
Vervolgens begint het programmeren.

Open een recordset die gebaseerd is op die query en loop door de records in je recordset.
Hieronder een voorbeeldje dat gebruik maakt van DAO. Je kunt ook gebruik maken van ADO, de werkwijze is verder hetzelfde.

Dim db as database
Dim rs as recordset

Set db = currentdb()
Set rs = db.OpenRecordset(qryJouwQuery, dbOpenSnapShot)
rs.movefirst
While not rs.eof
doe alle leuke dingen die je wilt doen
rs.movenext
Loop

set rs = nothing
set db= nothing
 
Dit is een grote hulp, al heel helder. Bedankt! Toch nog wat te vragen:

"Set rs = db.OpenRecordset(qryJouwQuery, dbOpenSnapShot)"

qryJouwQuery, komt hier de naam van de betreffende query te staan?
dbOpenSnapShot, wat is dat en wat moet ik hier invullen?

En als laatste vraag: hoe doe ik een insert op bijvoorbeeld de tabel 'boekingen' in het "leuke dingen gedeelte" van de loop? De waarden zijn opgehaald uit de query en dan komt er een insert in tabel boekingen. Hoe schrijf ik dat?

Ik hoop dat ik hier nog antwoord op krijg. Dan kan ik weer lekker verder ploeteren!

Groeten en dank,
Eddy.
 
qryJouwQuery is de naam van de query waarin je de fakturen die nog niet gefaktureerd zijn ophaald.

dbOpenSnapShot is een constante binnen access, moet je gewoon zo gebruiken.

En je laatste vraag:
dim strSQL as string
strSQL = "INSERT INTO JouwTabel (veld1, veld2, veld3) VALUES (Waarde1, Waarde2, Waarde3);"
db.execute strSQL

Gewoon even in je code een SQL INSERT samenstellen en die op je database loslaten dus.
 
Fantastisch!

Dank voor de hulp. Ga ik weer lekker verder en het zal zo allemaal wel voor elkaar komen. Te gek!

Eddy.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan