If functie met Recordset gebruiken

Status
Niet open voor verdere reacties.

Ronny20be

Gebruiker
Lid geworden
8 jul 2012
Berichten
10
Hallo,

Eerst en vooral even duidelijk maken dat ik helemaal geen ervaring heb met programmeren, maar je moet ergens beginnen zeker?

Onderstaande code is een combinatie van codes die ik op het net heb gevonden. Na enkele uren vloeken en sakkeren heb ik het aan de praat gekregen :x
Deze keer ga ik toch hulp vragen dacht ik zo, al is het gewoon om al die uren die ik er heb ingestoken niet terug om zeep te helpen :)

To the point nu! In QRYRecomended.. heb ik volgende velden:

BarcodePallet Location Item TypeLocationWidth Overstock FreePlace TypeLocationHeight
Barcode 1 AA0021 BDF454RFE3 2 Yes Yes 1
Barcode 1 AA0022 BDF454RFE3 2 Yes Yes 1
Barcode 2 AA0011 BDF454RFE3 1 Yes Yes 2
Barcode 2 AA0012 BDF454RFE3 1 Yes Yes 2
Barcode 2 AA0031 BDF454RFE3 1 Yes Yes 2
Barcode 2 AA0032 BDF454RFE3 1 Yes Yes 2

In 1 Locatie kan 1 pallet van 80 cm breed. In een rek (3 locaties) kan dus 240 cm. In het geval dat er een pallet breder is dan 80 cm wordt deze aangeduid als TypeLocationWidth 2, anders als 1.

In mijn Tabel TBLOverstockLocations heb ik ook een veld TypeLocatonWidth. Per rek van 3 locaties staat dit op 1, 2, 1. Vb. (AA001 = 1, AA002 = 2, AA003= 1.) Zodanig dat volgende check gedaan kan worden: Als Qry...TypeLocation=2 kijk dan naar vorige record in TBL...TypeLocation. Indien deze = 2, update daar ook FreePlace="No". Kijk dan naar volgende record in TBL...TypeLocation. Indien deze = 2, update daar ook FreePlace="No".

Maar hoe krijg ik dit nu in deze code ingewerkt?

Code:
Public Sub Command5_Click()
Dim db As Database
Dim rs As Recordset

Set db = CurrentDb()
Set rs = db.OpenRecordset("SELECT * FROM TBLOverstockLocations WHERE Location='" & Me.QRYRecomendedPlaceToPut!Location & "'")
If rs.NoMatch Then
MsgBox """Value"" was not found"

Else
rs.Edit
rs!FreePlace = "No"
rs.Update

End If
End Sub

In tussentijd probeer ik het natuurlijk zelf op te lossen, alvast bedankt voor de hulp en hints.
 
ik snap niet wat je precies doet in je tabel [TBLOverstockLocations].
In mijn Tabel TBLOverstockLocations heb ik ook een veld TypeLocatonWidth. Per rek van 3 locaties staat dit op 1, 2, 1. Vb. (AA001 = 1, AA002 = 2, AA003= 1.)
Wat sla je precies op hier? En hoe is de tabel (en het veld) ingericht? Ik vermoed (en daar ligt gelijk het probleem) dat je een keuzelijst gebruikt waarin je meerdere waarden kunt opslaan...
Maak anders een voorbeeld db, dat kijkt een stuk makkelijker.
 
Hoi Octafish,

Alvast bedankt voor je snelle reactie. Ik zal doen wat je vraagt eenmaal ik wat meer tijd heb.
In mijn tabel overstocklocations moet het veld FreePlace geupdate worden. In deze tabel staan alle locaties van een magazijn en standaard staat FreePlace op Yes. Eens hier een pallet wordt ingezet komt deze te staan op No. Zo weet de query die er onder ligt welke plaatsen nog beschikbaar zijn.

En dit lukt me nu al :-)

Maar zoals reeds gepost, een rek heeft 3 locaties per verdiep. 1 rek bestaat uit volgende locaties: AA010, AA020 en AA030 (grondplaatsen) AA011,AA021 en AA031 (eerste verdiep)... 3 locaties naast elkaar meten 240 cm, een standaardpallet meet 80 cm. In 1 rek (vb vloerplaatsen) kunnen dus 3 pallets.

Indien er een pallet wordt gezet op een locatie dat breder is dan 80 cm dienen er 2 plaatsen op FreePlace No gezet te worden. Maar enkel binnen het rek van 3 locaties.

Rek1: AA010, AA020, AA030 - Rek2: AA040, AA050, AA060...

Er staan dus x-tal rekken tegen elkaar en daarom heb ik een veld met TypeLocation gemaakt.
Dwz. AA010= Type1, AA020= Type2, AA030= Type1, AA040= Type1, AA050 = Type2, AA060=Type1...

Op die manier kan volgende oefening gemaakt worden: "code die ik reeds heb (die vb. AA030 op FreePlace Yes zet) + als PALLETtype=2 (+80 cm) kijk dan naar vorige record. Indien TypeLocation=2 zet deze record ook op FreePlace=Yes. Kijk dan naar volgend record, indien TypeLocation=2 zet deze record ook op FreePlace=Yes.

Hopelijk kan je hier wat mee?
 
Hiermee laad ik de record uit TBLOverstockLocations die overeenkomt met de record uit QRYRecomendedPlaceToPut!Location... Maar hoe laad ik de record die na deze record komt?
Code:
Set rs = db.OpenRecordset("SELECT * FROM TBLOverstockLocations WHERE Location='" & Me.QRYRecomendedPlaceToPut!Location & "'")
 
ik ben absoluut geen access kenner maar weet wel een klein beetje van excel-vba
misschien met de findfirst en findnext functies
zie ook http://msdn.microsoft.com/en-us/library/ff197799.aspx voor voorbeeldcode
als ik jou was, zou ik de noordenwind access-voorbeeld-database eens uitpluizen
 
Bedankt alphamax, hier heb ik wel wat aan ;-)
 
Laatst bewerkt door een moderator:
Na veel geprobeerd te hebben moet ik toch weer wat hulp vragen.
Ik zit vast bij:
Code:
If rs!TypeLocationWidth = 2 Then

Ik krijg geen foutmelding, hij wil gewoon het volgende record niet aanpassen als het veld TypeLocationWidth = 2.
Als ik dat lijntje weglaat dan wordt het volgende record wel op FreePlace "No" gezet, maar hij zou het enkel mogen doen indien het veld TypeLocationWidth gelijk is aan 2.

Dit is wat ik tot nog toe heb:
Code:
Public Sub Command5_Click()
Dim db As Database
Dim rs As Recordset

Set db = CurrentDb()
Set rs = db.OpenRecordset("TBLOverstockLocations", dbOpenDynaset)
rs.FindFirst "[Location] LIKE '" & Me.QRYRecomendedPlaceToPut!Location & "'"
    If rs.NoMatch Then
    MsgBox """Value"" was not found"
    rs.Close
        Else
        rs.Edit
        rs!FreePlace = "No"
        rs.Update
    End If
        If Me.QRYRecomendedPlaceToPut!TypeLocationWidth = 2 Then
        rs.MoveNext
        End If
If rs!TypeLocationWidth = 2 Then
rs.Edit
rs!FreePlace = "No"
rs.Update
End If
End Sub

Ik heb ook een kleine test gedaan dmv volgende:

Code:
Public Sub Command5_Click()
Dim db As Database
Dim rs As Recordset

Set db = CurrentDb()
Set rs = db.OpenRecordset("TBLOverstockLocations", dbOpenDynaset)
rs.FindFirst "[Location] LIKE '" & Me.QRYRecomendedPlaceToPut!Location & "'"
    If rs.NoMatch Then
    MsgBox """Value"" was not found"
    rs.Close
        Else
If rs!TypeLocationWidth = 2 Then
MsgBox "ok"
End If
End Sub

En dit werkt, ik krijg dan een Prompt met ok.
 
Dat kan veel simpeler. Kijk eens in de VBEditor hulp op 'CopyFromRecordset'
 
Dat kan veel simpeler. Kijk eens in de VBEditor hulp op 'CopyFromRecordset'

Ik zal het eens bekijken maar zoals ik reeds vermeld heb, ik heb helemaal geen kennis van programmeren. Ik zal al blij zijn als ik de boel aan de praat krijg :-p

Toch bedankt voor de tip, ik neem het zeker eens door.
 
Dat kan veel simpeler. Kijk eens in de VBEditor hulp op 'CopyFromRecordset'

Ik weet niet wat ik ermee moet... "Copies the contents of an ADO or DAO Recordset object onto a worksheet"
Volgens mij kopiëer ik toch niets? Graag wat meer info :)
 
Voor de lezers van deze vraag is het vast interessant om te horen hoe je het hebt opgelost! Nu heeft niemand wat aan de topic (behalve jij, want je hebt een oplossing ;) )
 
Hoi OctaFish,

Het laatste stukje code dat ik gepost had werkte wel, zij het niet dat ik een foutje had gemaakt. TypeLocationWidth moest zijn TypePalletWidth. Ik had deze velden hernoemd maar de oude benaming blijven gebruiken in de code.

Bedankt voor je nuttige tip, dat heeft me echt geholpen! ;-)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan