Meneekö vähän hermot kun kummittelee yksi ongelma eräässä kannassa.
Eli ekalla lomakkeella kysyn mitä halutaan hakea ja toiseen lomakkeeseen tuodaan esille lista hakukriteerit täyttävistä tietueista.
No nyt kuitenkin jostain syystä tähän listaus lomakkeeseen jää kummittelemaan vanhoja hakuarvoja. Eli jos haen kaikki tietueet missä joku kriteeri on "AB" ja sen jälkeen haen "CB" kriteerillä se palauttaa ekan haun tulokset.
Olen kokeillut tehdä kahdella tavalla.
eli OpenFormin Where conditionissa annan haettavat arvot:
DoCmd.OpenForm Formi, , , kriteerit
ja olen passannut Openargumenteina arvot listaus lomakkeeseen jossa Open kohdassa teen seuraavat:
Me.ServerFilter = Me.OpenArgs
Me.Requery
Se saattaa toimi hetken mutta sitten soittaa käyttäjä että tämä ei palauta oikeita tietueita haussa. Eli auttakkee..
Kysykää jos olin epäselvä..
Eli ekalla lomakkeella kysyn mitä halutaan hakea ja toiseen lomakkeeseen tuodaan esille lista hakukriteerit täyttävistä tietueista.
No nyt kuitenkin jostain syystä tähän listaus lomakkeeseen jää kummittelemaan vanhoja hakuarvoja. Eli jos haen kaikki tietueet missä joku kriteeri on "AB" ja sen jälkeen haen "CB" kriteerillä se palauttaa ekan haun tulokset.
Olen kokeillut tehdä kahdella tavalla.
eli OpenFormin Where conditionissa annan haettavat arvot:
DoCmd.OpenForm Formi, , , kriteerit
ja olen passannut Openargumenteina arvot listaus lomakkeeseen jossa Open kohdassa teen seuraavat:
Me.ServerFilter = Me.OpenArgs
Me.Requery
Se saattaa toimi hetken mutta sitten soittaa käyttäjä että tämä ei palauta oikeita tietueita haussa. Eli auttakkee..
Kysykää jos olin epäselvä..
Vastaukset 4
Vanhimmat
Siis jos olin epäselvä niin olen kokeillut avata listaus lomaketta molemmilla tavoilla. eli sekä ton where conditionion avulla ja openargumenttien kautta. ja molemmisssa tuppaa olemaan sama herja.
Kahden lomakkeen järjestelysi toimii ilmeisesti aina oikein ensimmäisellä kyselykerralla. Ongelmasi vaikuttaisi liittyvän siihen, että openargs:it eivät päivity oikein.
Kysymys: Jääkö listauslomake auki ensimmäisen haun jälkeen, vai suljetko sen aina ennen seuraavaa hakua ?
Jos olet aikaisemmin jättänyt lomakkeen auki, niin kokeile, onko sulkemisella vaikutusta halutulosten oikeellisuuteen.
Toinen juttu: kannattaa ehdottomasti laittaa jonkinlainen debugtulostus listauslomakkeen koodiin, jotta saat tolkkua sille syötettävistä parametreista.
Ei jää auki.. ja Openargsit päivittyvät oikein. Siis olen debugannut sille välitetyt tiedot.
Lisäksi olen kokeillut laittaa lomakkeen Close koodiin pätkän joka tyhjää ja poistaa serverfilterin...
Ja kun filtteri jää kerran päälle niin sen filterin saa poistettua muokkaamalla lomaketta poistamalla mahdolliset serverfilter asetukset joita ei edes välttämättä ole ja tallentamalla lomakkeen uudestaan.
En ole koskaan käyttänyt tuota serverfilter:iä, vaan rakentanut dynaamiset sql-lauseet seuraavan rungon mukaan:
Kaksi formia, päälomake formA sekä alilomake ChildFormB. Päälomakkeella vaikka dropdown "cbVuosi", jonka arvo halutaan syöttää alilomakkeelle. Lisäksi painike "btnHaeArvot", jota painamalla alilomake päivittyy (tässä esimerkissä alilomake tietty vastaa oman tapauksesi kakkoslomaketta).
[tämä koodi siis "formA":ssa upotettuna painikkeeseen "btnHaeArvot"]
Private Sub btnHaeArvot_Click()
dim paramVuosi as string
dim sql as string
' sijoita dropdownin arvo muuttujaan
paramVuosi = me!cbVuosi
' muodosta sql-lause
sql = SELECT id, name FROM tableA WHERE vuosi = paramVuosi
' päivitä alilomakkeen recordsource
Me![ChildFormB].Form.RecordSource = sql
end sub
[koodin toimivuutta ei tarkistettu]
Tämä runko toimii niin lomakkeissa kuin raporteissakin. Ja kun where-ehdot ovat koodin sisällä, niitä voi pyörittää miten haluaa.
Luonnollisesti joutuisit muokkaamaan tuota recordsourcea päivittävää riviä siten, että se viittaa kakkosformin recordsourceen. Jotenkin näin:
Forms![formB].Form.RecordSource = sql