Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Haku avaimella

Tommy.s [29.03.2005 11:47:40]

#

Terve !

Voisiko joku neuvoa miten saisin haettua ja avattua toisen lomakkeen avaimen perusteella. Minulla on henkilölomake ja auto lomake. Henkilöllä voi olla monta autoa, jotka luodaan henkilölomakkeella olevasta painikkeesta. Luonnissa vien autolle myös henkilönro:n (avaimeksi) Tällä henkilönro:lle minun pitäisi saadaa auto kiinni ja avata se tai jos henkilöllä ei ole autoa se luodaan uutena. Teen tämän käyttämällä Accessia kantana. Ongelmana on myös mihin tämän haun sijoitan (henkilölomakkeen painikkeeseen tai auto lomakkeella olevaan datacontrolliin)

Onko neuvoja..

BadSource [29.03.2005 12:28:05]

#

Henkilölomakkeen painikkeeseen, jossa käskytät auto-lomakkeen datakontrollia hakemaan haluamasi tiedon.

'Kaksi formia, joista Form2:lla on tavallinen Data-kontrolli.
'Esitetään Form2:lla TiedostoID(13):sta tiedot.
Private Sub Command1_Click()
    Load Form2
    'Huomioi, että TiedostoID:n täytyy olla sarake kyseisessä tietokannassa
    Form2.Data1.Recordset.FindFirst "TiedostoID = 13"
    If Form2.Data1.Recordset.NoMatch Then
        'Arvoa ei löytynyt, joten suljetaan Form2 ilman että sitä tuodaan näkyviin
        MsgBox "Nada", vbInformation, "WTF!?"
        Unload Form2
    Else
        Form2.Show
    End If
End Sub

Edit:Filtterin käyttö...

Private Sub Command1_Click() 'filtteröidyt
    Load Form2
    'esitetään vain tiedot TiedostoID:llä 13.
    Set Form2.Data1.Recordset = FilterField(Form2.Data1.Recordset, "TiedostoID=13")
    If Form2.Data1.Recordset.RecordCount = 0 Then
        MsgBox "Nada", vbInformation
        Unload Form2
    Else
        Form2.Show
    End If
End Sub

Private Sub Command2_Click() 'kaikki tiedot
    Form2.Show
End Sub

Function FilterField(rstTemp As Recordset, _
                     strFilter As String) As Recordset
    'Filtteröidään vain halutut tiedot mukaan
    rstTemp.Filter = strFilter
    Set FilterField = rstTemp.OpenRecordset
End Function

Tommy.s [13.04.2005 13:27:20]

#

Kiitos...Hiukan helpotti.

Kysymys:
Miten saan muutettua tähän esimerkin koodiin:
Form2.Data1.Recordset.FindFirst "TiedostoID = 13"

13:sta tilalle kentän auto lomakkeelta. Eli vertaisin Henkilölomakkeella olevaa TiedostoID kenttää Autolomakkeella olevaan AutoID kenttään ?
Avattaisiin aina samalla ID:llä oleva tieto

BadSource [13.04.2005 15:09:21]

#

frmHenkilo.Data1.Recordset.FindFirst "TiedostoID = " & _
  frmAuto.lblTiedostoID.Caption"

Eli et-merkillä liität jonon jatkoksi haettavan tiedon. Tässä tapauksessa Auto-formin TiedostoID-labelin sisältö.

Tommy.s [14.04.2005 19:09:26]

#

Sain toimimaan tällä komennolla..
frmhenkilo.TiedostoID.Text = TiedostoID.Text

Mutta missä on vika kun antaa hakea vain yhden arvon.
Esim. jos kannassa on autot ja vastaavasti henkilöt ID:llä 1, 2, ja 3. Jos olen autossa 1 ja etsin henkilöä 1 niin löytyy, mutta muut ei löydy. Taas jos poistan kokonaan henkilön 1 niin löytää seuraavana autolomakkeelta haettavan 2 henkilön. Vaikuttaako tähän arvo henkilö lomakkeella olevan dataonjektin arvo ?. Nyt siellä on valittuna kohtaan Recordsource taulu henkilöt.

Toivottavasti en selittänyt liian vaikeasti =)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta