recordset

Status
Niet open voor verdere reacties.

Zurrik

Gebruiker
Lid geworden
17 mrt 2006
Berichten
221
Als ik in een keuzelijst een ordernummer aanklik, veranderd alles op het hele formulier. Ik denk dat dit weer vanuit het vakje Order-ID gaat. Maar ik krijg het niet voor elkaar om mijn vakje ordernummer te updaten.
Ik heb deze code mee gekregen van mijn begeleider:

Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[Order-ID] = '" & Me![Ordernummer] & "'"
If Not rs.EOF Then Me.Bookmark = rs.Bookmark

Nu vraag ik me een paar dingen af:
1. Wat doet Recordset precies? (onduidelijk voor mij in de help)
2. Hij heeft in de tabel Order, Ordernummer als ID gemaakt. Met als waarde tekst. Ik heb een Autonummer als ID. En daarnaast wel een uniek Ordernummer, gewoon gedefineert als tekst. Hoe moet ik deze dan updaten?


Ik heb nu:
Me.txtKlantNaam = DFirst("Naam", "tblBedrijven", "Bedrijfnr=" & DFirst("Bedrijfnr", "tblOfferte", "Offertenr=" & CStr(Me.Keuzelijst0)))
Me.txtKlantAdres = DFirst("Adres", "tblBedrijven", "Bedrijfnr=" & DFirst("Bedrijfnr", "tblOfferte", "Offertenr=" & CStr(Me.Keuzelijst0)))
Me.txtKlantPostcode = DFirst("Postcode", "tblBedrijven", "Bedrijfnr=" & DFirst("Bedrijfnr", "tblOfferte", "Offertenr=" & CStr(Me.Keuzelijst0)))
Me.txtKlantPlaats = DFirst("Plaats", "tblBedrijven", "Bedrijfnr=" & DFirst("Bedrijfnr", "tblOfferte", "Offertenr=" & CStr(Me.Keuzelijst0)))
Me.txtKlantKorting = DFirst("Korting", "tblBedrijven", "Bedrijfnr=" & DFirst("Bedrijfnr", "tblOfferte", "Offertenr=" & CStr(Me.Keuzelijst0)))

Dat werkt ook wel, maar het wordt wel een erg lange code denk ik. Wat is het slimste?

Is wel uit andere database, maar het gaat om welk principe het best is.
 
Laatst bewerkt:
Een recordset is een object waarmee je gegevens in een tabel of query kunt bekijken, wijzigen, toevoegen of verwijderen.
Onder water werkt access voor formulieren en rapporten ook met recordsets.

De code van je begeleider is standaard code voor het zoeken in de recordset van een formulier of rapport.
Dat zoeken mag je niet doen in de recordset van het formulier zelf, maar moet je doen in een kopie daarvan, de recordset clone.
Bookmarks zijn pointers in de recordset waar je dan naar toe kunt springen.

Je vertelt niet duidelijk wat je wilt doen. Wil je de inhoud van velden in een record wijzigen (dat doe je namelijk in jou code) of wil je naar een ander record gaan (dat is wat je met de code van je begeleider doet)?
In beide gevallen zullen de waarden op je scherm wijzigen, maar het eindresultaat is toch iets heel anders......
 
Ik wil eigenlijk met zo weinig mogelijk code, lijkt me het beste, toch alle gegevens op mijn formulier krijgen. Daarna moet ik nog met een Button alle gegevens in een mooi rapport zetten, zodat dat uitgedraaid kan worden. Ik denk zelf dat de manier van mijn begeleider het beste is. Maar ik krijg constant een foutmelding bij rs.FindFirst.....
 
Je weet het toch inmiddels wel, post je mdb! Geef de foutmelding die je krijgt!

Als ik naar de code kijk:

rs.FindFirst "[Order-ID] = '" & Me![Ordernummer] & "'"

Ordernummer lijkt me iets numerieks, dan moeten er geen quotes omheen.

Zou er dan ongeveer zo uit moeten zien:

rs.FindFirst "[Order-ID] = cStr(Me![Ordernummer])
 
Hier een klein vb.

Ik wil links ergens op klikken en dan moet rechts de juiste gegevens ingevuld worden. Alleen geld dat dadelijk voor veel tabbladen en veel gegevens. Is daar een makkelijke manier voor?
 

Bijlagen

Ik heb wat jij wilt in je database gezet. Is erg simpel.
Denk eraan dat alle elementen op je tabbladen elementen van je formulier zijn, niet van je tabblad! Dat betekent dat je de elementen benaderd met forms![JouwFormulier]![Jouwelement] of met me![Jouwelement], het tabblad vindt je in de code nergens terug!
Velden hangen dus ook aan je formulier (via de RecordSource eigenschap). Je RecordSource moet dus alle velden op alle tabbladen gaan bevatten!
 

Bijlagen

Dank je. Is inderdaad precies wat ik wil. Alleen een probleem nog, ik snap het niet. Hoe kan het dat ie nu alle velden vult? Want je geeft eigenlijk nergens weer dat ie dat moet doen? Zoals ME.naam = blabla
 
Je hebt je formulier gekoppeld aan een tabel of een query (zie de eigenschappen van het formulier). Op het formulier heb je je velden gekoppeld aan velden uit die tabel of query (zie de eigenschappen van de componenten op je formulier, de tekstveldjes dus). Op het formulier worden de gegevens getoond van het actuele record uit die tabel of query.
Als je de inhoud van een veld op je formulier wijzigt, wijzig je bij het afsluiten van je formulier of het springen naar een ander record de gegevens in het record van de betreffende tabel.

Je moet dus goed nadenken wat je wilt zien en wat je wilt opslaan.
Je moet onderscheid maken tussen de inhoud van een veld op een formulier, de inhoud van een veld in een record en een record. Ook moet je goed nadenken wanneer dingen opgeslagen worden in een tabel.

Op basis van die gegevens kun je bepalen wat je bij welke eigenschap van welke component kan uitvoeren.
 
Dank je. Is een stuk duidelijker waarom ik dingen doe.
 
Nog 1 vraagje? Als ik iets uit 2 tabellen wil halen, hoe doe ik dat dan?


Me.RecordSource = "Select persoon.* , Koppel.blauw from Persoon, koppel where Persoon.persoonID = " & Me.Keuzelijst5
 
Dat doe je met een query die de volgende structuur moet hebben:

SELECT veld1, veld2, etc.
FROM tabel1, tabel2
WHERE tabel2.ID = tabel1.Tabel2ID
AND etc.
 
Me.RecordSource = "Select orders.*, klanten.* from orders, klanten where orders.ordersID = " & CStr(Me.kzOrdernummers)

Deze werkt gewoon, maar hij werkt mijn klantgegevens niet bij. Echter de ordergegevens worden wel bijgewerkt? hoe kan dat. Zal wel logisch zijn, maar nog niet voor mij.
 
Me.RecordSource = "Select orders.*, klanten.* from orders, klanten where klanten.klantenID = orders.klantenID and orders.ordersID = " & CStr(Me.kzOrdernummers)

Dit is de oplossing.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan