Ingegeven gegevens in formulier niet opgenomen door query

Status
Niet open voor verdere reacties.

ongenae

Gebruiker
Lid geworden
20 okt 2010
Berichten
124
Hallo

Zit volgens mij met een dom, simpel probleem maar ik krijg het maar niet weg;
het is het volgende:

ik heb een query die zoekt op dossiernummer (Like [Formulieren]![f_opzoeken]![dnrzoeken]) met 1 tabel in de query.
En een formulier met een txtbox (dnrzoeken) waar ik het dossiernummer kan ingeven en op een knop druk dan opent hij de query.

Als ik de query open zonder het formulier vraag hij dus om de waarde dnrzoeken en die geef ik dan manueel in = ok de query wordt goed uitgevoerd.

Open ik het formlier en vul ik het dossiernummer in en dan open ik de query dan krijg ik geen resultaten terwijl deze wel bestaan.
Dus de waarde van op mijn formulier neemt hij niet mee in mijn query.

Ik heb geen flauw idee meer hoe het komt.
Iemand tips?
 
En hier de eenvoudige oplossing:

Code:
DoCmd.OpenQuery "q_zoekenvolledigewanden"

Ik zie bij je knop een hele hoop code staan, maar niet deze regel :)
 
Die code ken ik inderdaad ook :)

Dat is niet het probleem, het is om te testen dat je de query manueel moet openen, en dan werkt het niet.
De bedoeling is dat de resultaten van de query in een formulier komen vandaar al de VBA code, maar dat deel werkt wel.
Alleen krijg ik geen goede resultaten, vanaf er meer dan 1 record in mijn tabel zit.
 
Ben iets anders aan het licht gekomen;

De query werkt WEL, maar het is de vba code die problemen heeft als er meer dan 1 record in de tabel zitten. Bij 1 record werkt de vba wel goed:

Dus de gegevens worden opgezocht in de tabel en weergegeven in een formulier bij het klikken op de knop btnzoeken2

Code:
Private Sub btnzoeken2_Click()


Dim dossiernr As String
Dim strsql As String

dossiernrinput = Me.dnrzoeken2.Value

strsql = "SELECT klantnr, typewand, zp, mp, hswg, hswgp, hswr, hswiso, hswmr, fswg, fswc, bswr, bswg, dossiernr, dossiernrde," _
& "artomschrijving, klantref, leverdatum, levernaam, leverstraat, leverhuisnr, leverpostcode, levergemeente, leverland, fabrieknr, groep, " _
& "eenheden, klantorder, leverorder, akprijs, vkprijs, abnummer, datumorderbevkl, afhalingnaam , afhalingdatum, afhalingdeok, afhalingplaat, " _
& "opmerkingen , bijlagen, artcreatiefoxpro, orderbevklontvangen" & vbCrLf _
& "FROM t_bestellingenwanden" & vbCrLf _
& "WHERE (dossiernr ='" & dossiernrinput & "');"

With CurrentDb.OpenRecordset("t_bestellingenwanden")
    If .recordcount = 1 Then
    
    
    
        Form_f_volledigewanden.klantnr.Value = .Fields("klantnr")
        Form_f_volledigewanden.typewand.Value = .Fields("typewand")
        
        Form_f_volledigewanden.zp.Value = .Fields("zp")
        Form_f_volledigewanden.mp.Value = .Fields("mp")
        
        Form_f_volledigewanden.hswg.Value = .Fields("hswg")
        Form_f_volledigewanden.hswgp.Value = .Fields("hswgp")
        Form_f_volledigewanden.hswr.Value = .Fields("hswr")
        Form_f_volledigewanden.hswiso.Value = .Fields("hswiso")
        Form_f_volledigewanden.hswmr.Value = .Fields("hswmr")
        Form_f_volledigewanden.fswg.Value = .Fields("fswg")
        Form_f_volledigewanden.fswc.Value = .Fields("fswc")
        Form_f_volledigewanden.bswr.Value = .Fields("bswr")
        Form_f_volledigewanden.bswg.Value = .Fields("bswg")
        
        Form_f_volledigewanden.dossiernr.Value = .Fields("dossiernr")
        Form_f_volledigewanden.dossiernrde.Value = .Fields("dossiernrde")
        Form_f_volledigewanden.artomschrijving.Value = .Fields("artomschrijving")
        Form_f_volledigewanden.klantref.Value = .Fields("klantref")
        
        Form_f_volledigewanden.leverdatum.Value = .Fields("leverdatum")
        Form_f_volledigewanden.leverdatum.Value = .Fields("leverdatum")
        Form_f_volledigewanden.levernaam.Value = .Fields("levernaam")
        Form_f_volledigewanden.leverstraat.Value = .Fields("leverstraat")
        Form_f_volledigewanden.leverhuisnr.Value = .Fields("leverhuisnr")
        Form_f_volledigewanden.leverpostcode.Value = .Fields("leverpostcode")
        Form_f_volledigewanden.levergemeente.Value = .Fields("levergemeente")
        Form_f_volledigewanden.leverland.Value = .Fields("leverland")
        
        Form_f_volledigewanden.fabrieknr.Value = .Fields("fabrieknr")
        Form_f_volledigewanden.groep.Value = .Fields("groep")
        
        Form_f_volledigewanden.eenheden.Value = .Fields("eenheden")
        Form_f_volledigewanden.klantorder.Value = .Fields("klantorder")
        Form_f_volledigewanden.leverorder.Value = .Fields("leverorder")
        Form_f_volledigewanden.akprijs.Value = .Fields("akprijs")
        Form_f_volledigewanden.vkprijs.Value = .Fields("vkprijs")
        Form_f_volledigewanden.abnummer.Value = .Fields("abnummer")
        Form_f_volledigewanden.datumorderbevkl.Value = .Fields("datumorderbevkl")
        
        Form_f_volledigewanden.afhalingnaam.Value = .Fields("afhalingnaam")
        Form_f_volledigewanden.afhalingdatum.Value = .Fields("afhalingdatum")
        Form_f_volledigewanden.afhalingdeok.Value = .Fields("afhalingdeok")
        Form_f_volledigewanden.afhalingplaat.Value = .Fields("afhalingplaat")
        
        Form_f_volledigewanden.artcreatiefoxpro.Value = .Fields("artcreatiefoxpro")
        Form_f_volledigewanden.orderbevklontvangen.Value = .Fields("orderbevklontvangen")
                
        Form_f_volledigewanden.opmerkingen.Value = .Fields("opmerkingen")
        
        Else
        MsgBox ("Opgezochte gegevens niet gevonden")
                
    End If
    .Close
End With


controleerbijlagen
DoCmd.Close

End Sub
 
Volgens mij zit het echt in dit klein deeltje:

Code:
With CurrentDb.OpenRecordset("t_bestellingenwanden")
    If .recordcount = 1 Then

de .recordcount geeft altijd het aantal records weer die in mijn tabel zitten, terwijl het eigenlijk de gezochte records moeten zijn (query).
Maar als ik de t_bestellingenwanden vervang door de query q_zoekenvolledigewanden, dan krijg ik de foutmelding van verwacht aantal parameters:

Er zijn te weinig parameters. Het verwachte aantal is: 1.

mijn query zoekt enkel op het identieke ingegeven dossiernr.
 
Als je een formulier wilt vullen met gegevens uit een recordset, en je hebt een enkelvoudig formulier, dan lijkt het logisch als je maar één record inleest. Blijkbaar heb je een gegevensbron die uit meer dan één record kan bestaan, in welk geval de check op één record natuurlijk niet nodig is. Ik zou de regel dan veranderen in:
Code:
    If .recordcount >= 1 Then
 
Hij toont enkel maar het eerste record uit mijn tabel t_bestellingenwanden.

Zou het niet kunnen zijn dat bij het vullen van het formulier ik mijn gegevens gebruik uit de tabel

Code:
Form_f_volledigewanden.klantnr.Value = .Fields("klantnr")

terwijl ik eigenlijk wel de gefilterde gegevens nodig heb (1 record)
 
Je filtert je query op "WHERE (dossiernr ='" & dossiernrinput & "')"
Ik zie daar verder geen filter op klantnummer bij.
 
ik haal eers ALLE gegevens uit mijn tabel via een query

Code:
strsql = "SELECT klantnr, typewand, zp, mp, hswg, hswgp, hswr, hswiso, hswmr, fswg, fswc, bswr, bswg, dossiernr, dossiernrde," _
& "artomschrijving, klantref, leverdatum, levernaam, leverstraat, leverhuisnr, leverpostcode, levergemeente, leverland, fabrieknr, groep, " _
& "eenheden, klantorder, leverorder, akprijs, vkprijs, abnummer, datumorderbevkl, afhalingnaam , afhalingdatum, afhalingdeok, afhalingplaat, " _
& "opmerkingen , bijlagen, artcreatiefoxpro, orderbevklontvangen" & vbCrLf _
& "FROM t_bestellingenwanden" & vbCrLf _
& "WHERE (dossiernr ='" & dossiernrinput & "');"


daarna vul ik de gegevens van de query in in mijn formulier zodat ik ze kan aanpassen en terug wegschrijven naar mijn tabel.

Code:
With CurrentDb.OpenRecordset("t_bestellingenwanden")
    If .recordcount >= 1 Then
    
    

        Form_f_volledigewanden.klantnr.Value = .Fields("klantnr")
        Form_f_volledigewanden.dossiernr.Value = .Fields("dossiernr")
        Form_f_volledigewanden.artomschrijving.Value = .Fields("artomschrijving")
        Form_f_volledigewanden.klantref.Value = .Fields("klantref")

klantnr is een van de gegevens uit die tabel, niet het gene waar op gezocht wordt.
 
Je hebt vermoed ik gekozen voor een niet-afhankelijk formulier, dat je vult vanuit een Recordset? Heb je wel bladerknoppen gemaakt die de volgende/vorige records ophalen?
 
ik heb dus het volgende gemaakt:

1) een niet-afhankelijk formulier waar ik gegevens kan invullen en via de knop toevogen opslaan in de tabel t_bestellingenwanden [dit werkt]
2) op dat formulier heb ik een knop zoeken waarmee hij een ander formulier opent waar ik een dossiernummer kan ingeven.
dan zoekt hij in de tabel t_bestellingenwanden naar de record die overeenkomt met dat dossiernr (uniek) via een query; dit geeft hij dan weer in mijn formulier (zie 1) [dit werkt niet]
voorlopig toont hij enkel het eerste record ook al is dit niet de record dat ik opgezocht heb.

Code:
Private Sub btnzoeken2_Click()


Dim dossiernr As String
Dim strsql As String

dossiernrinput = Me.dnrzoeken2.Value

strsql = "SELECT klantnr, typewand, zp, mp, hswg, hswgp, hswr, hswiso, hswmr, fswg, fswc, bswr, bswg, dossiernr, dossiernrde," _
& "artomschrijving, klantref, leverdatum, levernaam, leverstraat, leverhuisnr, leverpostcode, levergemeente, leverland, fabrieknr, groep, " _
& "eenheden, klantorder, leverorder, akprijs, vkprijs, abnummer, datumorderbevkl, afhalingnaam , afhalingdatum, afhalingdeok, afhalingplaat, " _
& "opmerkingen , bijlagen, artcreatiefoxpro, orderbevklontvangen" & vbCrLf _
& "FROM t_bestellingenwanden" & vbCrLf _
& "WHERE (dossiernr ='" & dossiernrinput & "');"

With CurrentDb.OpenRecordset("t_bestellingenwanden")
    If .recordcount >= 1 Then
    
    

        Form_f_volledigewanden.klantnr.Value = .Fields("klantnr")
        Form_f_volledigewanden.typewand.Value = .Fields("typewand")
        
        Form_f_volledigewanden.zp.Value = .Fields("zp")
        Form_f_volledigewanden.mp.Value = .Fields("mp")
        
        Form_f_volledigewanden.hswg.Value = .Fields("hswg")
        Form_f_volledigewanden.hswgp.Value = .Fields("hswgp")
        Form_f_volledigewanden.hswr.Value = .Fields("hswr")
        Form_f_volledigewanden.hswiso.Value = .Fields("hswiso")
        Form_f_volledigewanden.hswmr.Value = .Fields("hswmr")
        Form_f_volledigewanden.fswg.Value = .Fields("fswg")
        Form_f_volledigewanden.fswc.Value = .Fields("fswc")
        Form_f_volledigewanden.bswr.Value = .Fields("bswr")
        Form_f_volledigewanden.bswg.Value = .Fields("bswg")
        
        Form_f_volledigewanden.dossiernr.Value = .Fields("dossiernr")
        Form_f_volledigewanden.dossiernrde.Value = .Fields("dossiernrde")
        Form_f_volledigewanden.artomschrijving.Value = .Fields("artomschrijving")
        Form_f_volledigewanden.klantref.Value = .Fields("klantref")
        
        Form_f_volledigewanden.leverdatum.Value = .Fields("leverdatum")
        Form_f_volledigewanden.leverdatum.Value = .Fields("leverdatum")
        Form_f_volledigewanden.levernaam.Value = .Fields("levernaam")
        Form_f_volledigewanden.leverstraat.Value = .Fields("leverstraat")
        Form_f_volledigewanden.leverhuisnr.Value = .Fields("leverhuisnr")
        Form_f_volledigewanden.leverpostcode.Value = .Fields("leverpostcode")
        Form_f_volledigewanden.levergemeente.Value = .Fields("levergemeente")
        Form_f_volledigewanden.leverland.Value = .Fields("leverland")
        
        Form_f_volledigewanden.fabrieknr.Value = .Fields("fabrieknr")
        Form_f_volledigewanden.groep.Value = .Fields("groep")
        
        Form_f_volledigewanden.eenheden.Value = .Fields("eenheden")
        Form_f_volledigewanden.klantorder.Value = .Fields("klantorder")
        Form_f_volledigewanden.leverorder.Value = .Fields("leverorder")
        Form_f_volledigewanden.akprijs.Value = .Fields("akprijs")
        Form_f_volledigewanden.vkprijs.Value = .Fields("vkprijs")
        Form_f_volledigewanden.abnummer.Value = .Fields("abnummer")
        Form_f_volledigewanden.datumorderbevkl.Value = .Fields("datumorderbevkl")
        
        Form_f_volledigewanden.afhalingnaam.Value = .Fields("afhalingnaam")
        Form_f_volledigewanden.afhalingdatum.Value = .Fields("afhalingdatum")
        Form_f_volledigewanden.afhalingdeok.Value = .Fields("afhalingdeok")
        Form_f_volledigewanden.afhalingplaat.Value = .Fields("afhalingplaat")
        
        Form_f_volledigewanden.artcreatiefoxpro.Value = .Fields("artcreatiefoxpro")
        Form_f_volledigewanden.orderbevklontvangen.Value = .Fields("orderbevklontvangen")
                
        Form_f_volledigewanden.opmerkingen.Value = .Fields("opmerkingen")
        
        Else
        MsgBox ("Opgezochte gegevens niet gevonden")
                
    End If
    .Close
End With

End Sub

3) wanneer de gegevens ingeladen zijn in mijn formulier kan ik deze wijzigen en opnieuw opslaan (t_bestellingenwanden updaten) [dit werkt]

Dus het is enkel bij het opzoeken dat hij ipv het goede resultaat (een unieke record) standaard het 1ste record in mijn tabel toont.

Hopelijk heb je hiermee alle gewenste info
 
Dan zit er dus een fout in je query, niet in je formulier. Ik zou met een Inputbox dus de query uitlezen
Code:
Dim tmp
Tmp=Inputbox("","",strSQL)
zodat je kunt controleren welke records hij ophaalt. En dan de query code aanpassen...
 
owké, heb het eens laten lopen:

SELECT klantnr, typewand, zp, mp, hswg, hswgp, hswr, hswiso, hswmr, fswg, fswc, bswr, bswg, dossiernr, dossiernrde,artomschrijving, klantref, leverdatum, levernaam, leverstraat, leverhuisnr, leverpostcode, levergemeente, leverland, fabrieknr, groep, eenheden, klantorder, leverorder, akprijs, vkprijs, abnummer, datumorderbevkl, afhalingnaam , afhalingdatum, afhalingdeok, afhalingplaat, opmerkingen , bijlagen, artcreatiefoxpro, orderbevklontvangen
FROM t_bestellingenwanden
WHERE (dossiernr ='d1000');

dus wil id die 'd1000' veranderen in het ingegeven veld:

Dim dossiernrinput As String
dossiernrinput = Me.dnrzoeken2.Value

strsql = "SELECT klantnr, typewand, zp, mp, hswg, hswgp, hswr, hswiso, hswmr, fswg, fswc, bswr, bswg, dossiernr, dossiernrde," _
& "artomschrijving, klantref, leverdatum, levernaam, leverstraat, leverhuisnr, leverpostcode, levergemeente, leverland, fabrieknr, groep, " _
& "eenheden, klantorder, leverorder, akprijs, vkprijs, abnummer, datumorderbevkl, afhalingnaam , afhalingdatum, afhalingdeok, afhalingplaat, " _
& "opmerkingen , bijlagen, artcreatiefoxpro, orderbevklontvangen" & vbCrLf _
& "FROM t_bestellingenwanden" & vbCrLf _
& "WHERE (dossiernr ='" & dossiernrinput & "');"
 
Laatst bewerkt:
Zodra je de variabele strSQL klaar hebt. Dus ergens daar onder. Zelf zet ik 'm er direct onder, gevolgd door Exit Sub, zodat ik eerst de sql maak, en dan de inputbox krijg en gelijk kan gaan testen.
 
Da's mooi! Maar het gaat natuurlijk om het resultaat: zie je de records die je verwacht?
 
nee :p
dat is juist mijn probleem;

er zitten 3 records in mijn tabel met volgende dossiernrs
D1000
D2000
D3000

als ik zoek op D3000 krijg ik toch nog al mijn gegevens van D1000 in het formulier terwijl ik deze van D3000 wil zien.


het rare is wel als ik de query manueel open doe, ik wel het juiste resultaat heb.
Misschien is het mij recordbron die foutief is
 
Laatst bewerkt:
Open je wel de goede recordset?
Jij hebt:
With CurrentDb.OpenRecordset("t_bestellingenwanden")
moet zijn, denk ik:
With CurrentDb.OpenRecordset(strSQL)
 
Daar heb ik inderdaad een klein beetje overheen gekeken.... Maar daarmee blijft de vraag staan: zie je in de query wel de goede records? Je filtert daar immers op Dossiernr?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan