Gerelateerde tabel

Status
Niet open voor verdere reacties.

jempi10

Gebruiker
Lid geworden
24 okt 2012
Berichten
230
Ik heb een tabel die gekoppeld is aan Excel (de tabel Tbl_led_2000).
Werkt prima, als ik iets wijzig in Excel, wordt ook Access aangepast.

Maar....bij opzoekingen in Access geeft de formule 'y= rs1!Recordcount' slechts 1 record aan, terwijl er 86 zijn.
De records zijn in Excel genummerd, en ik heb gemerkt dat de tabel in Access geen ID opgemaakt heeft.
De numerieke getallen kan ik niet omzetten in AutoNummering (deze eigenschap kan in gekoppelde tabellen niet worden gewijzigd.)

Zo tel ik de records:

Code:
Private Sub Opzoeken_AfterUpdate()
Dim db As Database
Dim rs, rs1 As Recordset
Dim x, y As Integer
Set db = CurrentDb
Set rs = db.OpenRecordset("samen")
Set rs1 = db.OpenRecordset("Tbl_led_2000")
DoCmd.RunSQL "delete * from samen"
DoCmd.SetWarnings False

y = rs1.RecordCount

For x = 1 To y
    rs.AddNew
        rs!Familienaam = rs1!Vollenaam
        rs!Ld_Adres = rs1!Ld_Adres
        rs!Geb_dat = rs1!Geb_dat
        rs!Functie = rs1!Kernlid
        rs.Update
    rs1.MoveNext

Next
DoCmd.OpenReport "rptsamen", acViewPreview, , "familienaam like '*" & Me!Opzoeken & "*'"
Me!Opzoeken = ""

End Sub

Voor ik een gekoppelde tabel gemaakt heb, bestond er een tabel Tbl_led_2000 en toen werden er 86 records geteld.
Na de koppeling heb ik de oude verwijderd en de nieuwe, gekoppelde tabel, dezelfde naam gegeven (Tbl_led_2000 ; = Recordbron voor besturingselementen).

Het lukt me niet om omgekeerd te koppelen: de tabel in Ecxel koppelen aan die in Access (misschien dat dan het probleem zich niet voordoet).

Ik ben op zoek of ik iets fout heb gedaan bij het koppelen en vooral, waar vind ik meer uitleg over het koppelen.

Hopelijk heb ik het probleem duidelijk verwoord.

Al op voorhand bedankt voor de hulp.
 
Ik snap niet helemaal wat je aan het doen bent; zo te zien kopieer je de records uit je Excel tabel naar een Access tabel. Je zult daar een reden voor hebben, maar het lijkt mij een overbodige handeling, want dan heb je 2 tabellen met dezelfde gegevens. Maar goed, dat is een andere discussie. Hoeft niet gevoerd te worden :). Laten we het daarentegen eens over de fouten in je code hebben, want die zijn er (helaas voor jou) genoeg. Laten we beginnen bij je declaraties, die al behoorlijk vreemd zijn. Het gaat dan vooral om deze regels:
Code:
Dim rs, rs1 As Recordset
Dim x, y As Integer
Waarschijnlijk denk je dat je met de eerste regel twee recordsets declareert, en met de tweede regel twee integers. Nee dus. In beide regels declareer je één specifieke variabele, en één varialbele zonder specificatie, en dat wordt dan automatisch een Variant. Da's niet handig, als je twee recordsets nodig hebt. Voor de integer maakt het niet zo bar veel uit overigens. Maar consequent is het allerminst. Wil je twee recordsets, en twee integers, dan moet het zo:

Code:
Dim x As Integer, y As Integer
Dim rs  As Recordset, rs1 As Recordset 
(liever nog zo: Dim rs  As DAO.Recordset, rs1 As DAO.Recordset om onderscheid te maken tussen ADO en DAO)

Een hele vervelende fout: je Setwarnings staat a) op de verkeerde plek, en b) wordt niet meer teruggezet. Daar ga je problemen mee krijgen! Maar je hebt die opdacht niet eens nodig! En een overbodige declaratie die weg kan: db.
Dan waar het écht fout gaat: je loop routine. Om te beginnen de reden waarom je Count verkeerd gaat. Als je een recordset opent, weet een DAO recordset nooit hoeveel records er in zitten. Dat weet de recordset pas als je op het laatste record bent geweest. Daarom zie je in dit soort routines vaak eerst een opdracht om naar het laatste record te gaan en vervolgens naar het eerste. Dán pas is een Count nuttig. Maar in je code doe je helemaal niks nuttigs met die count, dus waarom zou je dat doen? Er is een veel betere techniek om alle records te kopiëren.
Als laatste puntje, hoewel jouw methode niet fout is, zou ik de routine in een WITH .. END WITH zetten. Alles bij elkaar genomen zou ik de routine zo maken:

Code:
Private Sub Opzoeken_Click()
Dim rs As DAO.Recordset, rs1 As DAO.Recordset
    
    CurrentDb.Execute "DELETE * FROM samen", dbFailOnError
    Set rs1 = CurrentDb.OpenRecordset("Tbl_led_2000")
    Set rs = CurrentDb.OpenRecordset("samen")
    With rs1
        Do While Not .EOF
            rs.AddNew
            rs!Familienaam = !Vollenaam
            rs!Ld_Adres = !Ld_Adres
            rs!Geb_dat = !Geb_dat
            rs!Functie = !Kernlid
            rs.Update
            .MoveNext
        Loop
    End With
    DoCmd.OpenReport "rptsamen", acViewPreview, , "familienaam like ""*" & Me.Opzoeken & "*"""

End Sub
 
Beste,

Bedankt voor uw reactie.
Ik ben bezig een beperkt bestand te maken met verwijdering van de persoonlijke gegevens.
Waarom de koppeling met excel: de persoon die het bijhouden van de gegevens zal overnemen, kent niks van Acces.
ik moet nu maar in 1 toepassing de gegevens bijwerken.
Over de programmatie: bedankt voor de tips en de verbeteringen.
Als excuus: mijn VBA-codes dateren wel van het jaar 2000 (via avondlessen) en al zeg ik het zelf: het werkte perfect tot ik de tabel koppelde.
Ik waardeer dat u me wilt helpen, ik zal zo snel mogelijk het bestand doorsturen
Dan kan u zien dat het aantal records wel degelijk onmiddellijk wordt geteld.
Met vriendelijk groeten
Jean Pierre (71 j)
 
Waarom de koppeling met excel: de persoon die het bijhouden van de gegevens zal overnemen, kent niks van Acces.
Des te meer reden om een goede database voor de gebruikers te maken waarbij ze niks van de 'achterkant' te zien krijgen en alleen maar gegevens kunnen/mogen muteren. Veel makkelijker voor de gebruiker dan dat je die in Excel loslaat. Maar dat is mijn mening, in het Excel forum denken ze daar heel anders over :). Maar het is dus perfect mogelijk om een Access database zo te maken dat de gebruiker nergens om hoeft te denken, dan aan het eigenlijke werk: mutatie van de gegevens. En de beheerder kan dan natuurlijk wél overal bij.

en al zeg ik het zelf: het werkte perfect tot ik de tabel koppelde.
Het zal ongetwijfeld gewerkt hebben, maar als je deze code hebt gebruikt, zou ik het woord 'perfect' niet in de mond nemen. Het kan, zoals ik al aangaf, namelijk veel beter. En dan kan het dus nooit perfect zijn geweest :).

Dan kan u zien dat het aantal records wel degelijk onmiddellijk wordt geteld.
In het eerste bericht schreef u dat de telling nou net niet meer werkt. Dat is voor ons, als helpers, dan licht verwarrend :).
 
Beste,

Alvast bedankt, uw programmatie werkt op de gekoppelde tabel.

Met 'perfect' bedoelde ik dat het werkte zoals ik wou, dus niet op de code, die pretentie had ik niet.

In het oorspronkelijk bestand wordt in 4 lijsten gezocht, de 3 anderen zijn (nog) niet gekoppeld, daar gaf y het juiste aantal.
Nu kan ik alle tabellen koppelen.

Zal een bestandje doorsturen, zodat u beter overzicht hebt in mijn probleem (dat u hebt opgelost).
Waarvoor dank.
 
In mijn eerste antwoord gaf ik een voorbeeld waarbij het er helemaal niet toe doet of je het juiste aantal weet of niet. Dat heb je namelijk helemaal niet nodig om tabellen te vullen. Ik zou kortom de noodzaak om de juiste Count te weten gewoon laten vallen. Zolang de procedure zijn werk maar doet :).
 
Ja, uw antwoord voldoet volledig.

Het probleem was dat hij maar een record vond in de gekoppelde tabel.

Hou u op de hoogte als ik alle tabellen heb gekoppeld.
 
Laatst bewerkt:
Beste OctaFish

Het lukt me niet om het bestand te verkleinen.
Ondanks het verwijderen van tabellen, query's, formulieren en rapporten blijft de grootte op 11.000 kb.
 
Laatst bewerkt:
11MB? Dat is behoorlijk. Overigens hoop ik niet dat je de tabellen hebt verwijderd, maar alleen leeggemaakt. En hopelijk staan er dan nog wel dummy records in. Heb je 'm na het opschonen nog gecomprimeerd? En daarna het bestand gezipt? Sowieso kun je geen database bestanden uploaden, dus je zult hem altijd moeten zippen.
 
Comprimeren en zippen is voor mij niet evident.
Zal opzoeken hoe ik dat moet doen en hopelijk lukt het.
 
De db comprimeren zit in het hoofdmenu onder de knop <Comprimeren en herstellen>. Daarmee wordt de db doorgaans aanzienlijk kleiner, zeker als je records verwijdert. Zippen doe je vanuit de verkenner met de rechtermuisknop. Dan kies je in het snelmenu <Kopiëren naar> en vervolgens <Gezipte map>.
 
Het is me gelukt, alleen: bij het dowloaden krijg nu deze boodschap:

Code:
De volgende fouten zijn opgetreden: 
Gekoppelde tabel-kopie.zip:
Uw bestand is 135,3KB bytes groot. De maximaal
toegestane grootte voor dit bestandstype is 100,0 KB.

Gelukkig is mijn probleem wel opgelost met uw programmatie.
Bedankt hiervoor.
 
Als het nu werkt, dan hoef je de db uiteraard verder niet mee te sturen, tenzij je wilt dat we daar nog een blik op werpen.
Als de zip te groot is, kun je een truc toepassen: verander de extensie naar xlsb. Dan gaat het wel. Of gebruik WinRar om de zip te maken, dan kun je deelbestanden van 100kb maken.
Maar dat is dan meer voor de volgende vraag :).
 
Nogmaals bedankt voor de aanvullende uitleg.
Zal het eventueel een volgende keer toepassen.
Ik ga het topic nu als afgehandeld zetten.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan