Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Access: Siirtyminen haluttuun tietueeseen

kisahalo [13.01.2011 13:44:28]

#

Tervehdys,

Miten voin tallettaa Access 2007:ssa tietueen paikan jonkin tapahtuman yhteydessä, ja sitten myöhemmin siirtää kohdistuksen siihen?

Esimerkki: On valittu tietue 3 ja painetaan nappia, jolloin avautuu toinen ikkuna. Käyttäjä peruu ikkunan avauksen, jolloin oletustoiminnon (Access siirtyy tietueeseen 1) sijasta aiemmin valitun tietueen paikka (3) on tallessa ja kohdistus siirretään siihen.

Yritin jotain tällaista:

Dim db As Database, rs As Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("Tilaukset", dbOpenDynaset, dbOptimistic)

Access ei kuitenkaan tykkää OpenRecordset-käskystä, ilmeisesti, koska tietokanta on jo käsiteltävänä.

Grez [13.01.2011 15:15:20]

#

Onko Accessin antama virheilmoitus tosiaankin "En tykkää" ?

Ei sen puoleen, jos ymmärsin oikein mitä olet tekemässä (eli sinulla on accessissa auki jokin näkymä tietokantaan) niin toisen yhteyden avaaminen samaan tietokantaan ei tiedä mitään siitä mikä rivi jollakin toisella yhteydellä on auki eikä pysty ohjaamaan sitä.

Eli käyttöliittymään liittyvä koodi pitäisi tehdä sinne käyttöliittymän puolelle.

neau33 [13.01.2011 16:54:27]

#

Moikka taas kisahalo!

esim. näin...

'Module1
Option Compare Database

Public LastSelectedRecord As Long
'Lomake1
Option Compare Database

Private Sub Form_Load()

    If LastSelectedRecord  < 0 Then
        LastSelectedRecord = 0
    End If

    Set rs = Me.Recordset
    rs.Move (LastSelectedRecord)
    Set rs = Nothing

End Sub


Private Sub Peruuta_Click()
    On Error GoTo Err_Peruuta_Click

    LastSelectedRecord  = CurrentRecord - 1
    DoCmd.Close

Exit_Peruuta_Click:
    Exit Sub

Err_Peruuta_Click:
    MsgBox Err.Description
    Resume Exit_Peruuta_Click
End Sub

neau33 [13.01.2011 20:55:34]

#

Moikka taas kisahalo!

Tässä vielä pikku esimerkki VB6:lle...

'Module1 (Public)
Public db As Database, rs As Recordset
Public LastSelectedRecord As Long, rsTempLastSelectedRecord As Long

Public Sub SetValues(Source As Form, recSet As Recordset)
    For i = 1 To recSet.Fields.Count - 1
        Source.Text1(i).Text = recSet.Fields(i).Value
    Next
End Sub

Public Sub MoveToRecord(index As Integer, recSet As Recordset, lRec As Long)

    Select Case index
        Case 0
            If lRec > 0 Then recSet.MoveFirst
        Case 1
            If lRec > 0 Then recSet.MovePrevious
        Case 2
            If lRec < recSet.RecordCount - 1 Then recSet.MoveNext
        Case 3
            If lRec < recSet.RecordCount - 1 Then recSet.MoveLast
    End Select

End Sub
'Projektiin referenssi:
'Microsoft DAO 3.6 Object Library (dao360.dll)

'Form1
' lomakkeelle:
' 4 indeksoitua Text controllia (Text1(1) - Text1(4))
' 4 indeksoitua Komentopainiketta (Command1(0) - command1(3))

Private Sub Form_Load()
    Dim dbPolku As String, TaulunNimi As String
    dbPolku = App.Path & "\tietokanta.mdb"
    TaulunNimi = "taulu"

    Set db = OpenDatabase(dbPolku)
    Set rs = db.OpenRecordset(TaulunNimi, dbOpenDynaset)

    Dim i As Integer
    If rs.RecordCount > 0 Then
        rs.MoveLast: rs.MoveFirst
        For i = 1 To rs.Fields.Count - 1
            Text1(i).Text = rs.Fields(i).Value
        Next
    End If
End Sub

Private Sub Command1_Click(index As Integer)
    MoveToRecord index, rs, LastSelectedRecord
    LastSelectedRecord = rs.AbsolutePosition
    SetValues Me, rs
End Sub

Private Sub Command2_Click()
    If Not Form2.Visible Then Form2.Show
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    rs.Close: Set rs = Nothing
    db.Close: Set db = Nothing
End Sub
'Form2
' 4 indeksoitua Text controllia (Text1(1) - Text1(4))
' 4 indeksoitua Komentopainiketta (Command1(0) - command1(3))

Private rsTemp As Recordset

Private Sub Form_Load()
    If rsTempLastSelectedRecord < 0 Then
        rsTempLastSelectedRecord = 0
    End If
    Set rsTemp = rs.Clone

    If rsTemp.RecordCount > 0 Then
        rsTemp.Move (rsTempLastSelectedRecord)
        Dim i As Integer
        For i = 1 To rsTemp.Fields.Count - 1
            Text1(i).Text = rsTemp.Fields(i).Value
        Next
    End If
End Sub

Private Sub Command1_Click(index As Integer)
    MoveToRecord index, rsTemp, rsTempLastSelectedRecord
    rsTempLastSelectedRecord = rsTemp.AbsolutePosition
    SetValues Me, rsTemp
End Sub

Private Sub Command2_Click()
    Unload Me
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Set rsTemp = Nothing
End Sub

Halutessaan esimerkkiprojektin voi impata täältä

kisahalo [14.01.2011 15:24:01]

#

neau33 kirjoitti:

Moikka taas kisahalo!

esim. näin...

Kiitos, tämä ratkaisi ongelman.

Vastaus

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

Tietoa sivustosta