velden invullen

Status
Niet open voor verdere reacties.

JEPEDEWE

Terugkerende gebruiker
Lid geworden
14 jun 2006
Berichten
1.682
Hallo,
graag jullie advies

Via een query verzamel ik een reeks data en codes
Die wil ik in een tabel kwijt
Deze gegevens worden dan in een officieel document gegooid
Op dit document heb ik 20 vakjes voor de datum en 20 voor de code
is er een manier om dit in een loop te steken zodat de velden binnen deze loop een voor een aangeroepen worden... iets zoals

x=1
do while eenofander
form!veld(x)!value= "ook een of andere waarde"
x=x+1
loop

ik sla maar wat uit mijn nek..

iemand een idee
 
Dat kan inderdaad met een lus. Als je op je rapport 40 (20 + 20) tekstvakken hebt gemaakt, die een vaste naam hebben (Datum1, Datum2 .. Datum20 en Tekst1, Tekst2 .. Tekst20) dan zijn die vanuit een loop heel simpel te vullen. Anders wordt het als je ze afwisselende namen hebt gegeven die níet in een lus zijn te vangen. Dan heb je heel wat meer werk.
Code:
    Set rst = New ADODB.Recordset
    rst.Open strSQL, CurrentProject.Connection, adOpenKeyset
    With rst 
        If .RecordCount > 0 and .RecordCount <=20 Then
            Do While Not .EOF
                i = i + 1
                Me("Datum" & i).Value = !Datumveld
                Me("Tekst" & i).Value = !Tekstveld
                .MoveNext
            Loop
        End If
    End With
Hiervoor wel de ADO bibliotheek aanzetten, als je die nog niet gebruikt, anders werkt de ADO recordset niet.
 
En als ik die gegevens in een tabel kwijt wil en niet op een form?
 
Wat bedoel je met ADO bibliotheek? Kan je daar iets meer over vertellen?
 
Niet zo veel, vrees ik. Het is een recordset bibliotheek die je aan moet zetten. In tegenstelling tot DAO, dat standaard in Access zit ingebakken, wordt ADO regelmatig geupgrade. De nieuwste versie zit op 6.0. Maar je mag gerust een oudere versie aanzetten, zoals 2.8. Doet het ook prima.
 
En als ik die gegevens in een tabel kwijt wil en niet op een form?
Ik dacht aan een rapport, niet aan een formulier. Waarom zou je dat op een formulier zetten? Maar je kunt de procedure uiteraard aanvullen met een nieuwe recordset die de uitgelezen data in een tabel kwakt.
 
Als je die in een tabel kwijt wil... wat is dan de syntax..
het formulier-idee is inderdaad niet OK
JP
 
de code die ik nu aanmaakte is:

Code:
    Dim db As Database
    Dim TB As Recordset
    Dim TB_getuig As Recordset
    Dim sql As String
    Set db = CurrentDb()
    sql = "SELECT DATA.* FROM data WHERE data.KODELANG = '241003590670' ORDER BY DATA.DATUM, data.id;"
    Set TB = db.OpenRecordset(sql)
    Set TB_getuig = db.OpenRecordset("getuigschrift1", dbOpenDynaset)
    With TB
        If .RecordCount > 0 And .RecordCount <= 20 Then
            TB_getuig.AddNew
            TB_getuig!rekening_Kodelang = TB!KODELANG
            Do While Not .EOF
                i = i + 1
                'TB_getuig!Datum" & i = !datum
                'TB_getuig!code' & i = !code
                .MoveNext
            Loop
            TB_getuig.Update
        End If
    End With

bij de lijnen:
'TB_getuig!Datum" & i = !datum
'TB_getuig!code' & i = !code
zit ik in de problemen natuurlijk
 
Om te beginnen: met DAO kun je op deze manier niet controleren hoeven records er in een tabel zitten; .RecordCount zal altijd 1 zijn. Voor een correcte RecordCount zul je echt mijn code moeten gebruiken (ik geef ‘m niet voor niets zo).
Jouw fout zit in de .Update die niet in de Loop zit, maar erbuiten. En die quootjes doen de zaak uiteraard ook geen goed.
 
Laatst bewerkt:
Maar jij stelde iets voor om in een form te zetten.. ik wil het ineen veld van een tabel... en dat lukt niet met mijn code
 
de reden waarom ik je ganse code niet overneem is natuurlijk, omdat ik ze niet echt begrijp en de integratie dus ook niet foutloos kan doen, en dientengevolge het probleem weerom niet zelf kan oplossen...

Set rst = New ADODB.Recordset
rst.Open strSQL, CurrentProject.Connection, adOpenKeyset

???

Ik testte mijn code al een aantal keer uit en krijg wel degelijk de correcte Rowcount waarden mee hoor...

Ik had het gevoel dat de "update" buiten de loop moest omdat op dat moment pas alle velden van dat ene record gevuld zullen zijn... niet dus??

Groeten
JP
 
ADO werkt wat anders dan DAO, maar kan wat meer. Dat je de code niet begrijpt is logisch als je nog niet eerder met ADO hebt gewerkt, maar daarmee is de code nog niet minder juist :). Hij werkt namelijk als je de ADO bibliotheek hebt aangezet. Bij Addnew moet je elk record apart opslaan, dus ja: .Update moet binnen de loop zitten.
Overigens doe je dat met ‘normale’ tabellen en formulieren ook: elke keer als je naar een nieuw/ander record gaat, wordt het bewerkte record opgeslagen.
 
Maar dat lost nog steeds de regel niet op binnen die loop om het veld van de tabel te vullen met een waarde...
 
Nee, dat klopt. De manier waarop je de velden aanroept deugt niet. Ik kan de situatie in je laatste db niet nabootsen, want daar zit geen tabel Getuigschrift1 in, en ik kan ook niet gelijk zien waar de brongegevens vandaan moeten komen, maar je zult ofwel de velden hard in de query moeten zetten, zodat je ze als object kunt aanroepen met het uitroepteken (daarom gaat dit TB_getuig!rekening_Kodelang wel goed) ofwel je zult de FIELDS collectie moeten gebruiken. Je krijgt dan zoiets:
Code:
Dim TB As Recordset, TB_getuig As Recordset
Dim SQL As String
    
    SQL = "SELECT DATA.* FROM data WHERE KODELANG = ""241003590670"" ORDER BY DATUM, id;"
    Set TB = CurrentDb.OpenRecordset(SQL)
    Set TB_getuig = CurrentDb.OpenRecordset("getuigschrift1", dbOpenDynaset)
    With TB
        If .RecordCount > 0 Then
            TB_getuig.AddNew
            TB_getuig!rekening_Kodelang = !KODELANG
            Do While Not .EOF
                i = i + 1
                TB_getuig.Fields("Datum" & i) = !DATUM
                TB_getuig.Fields("code" & i) = !CODE
                TB_getuig.Update
                .MoveNext
            Loop
        End If
    End With
Overigens snap ik weinig van de uit te voeren actie.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan